mcpField
C
cuda-auto-tune

cuda-auto-tune

github.com/bruce-lee-ly開発25108 回インストール29 週間前に更新
リポジトリ

cuda-auto-tune について

NVIDIA Nsight Compute(NCU)のプロファイルデータに基づいて、CUDA カーネルの反復的な最適化を導くスキルです。Native CUDA、CUTLASS、Triton、CuTe DSL を対象に、根拠のある変更を一度に一つずつ進めます。

主な機能

  1. 01NCU プロファイルとレポートの分析
  2. 02ルーフライン、メモリ、ストール、占有率の診断
  3. 03カーネル種別ごとの最適化手順
  4. 04変更ごとの再プロファイルと比較

活用シーン

  1. 01CUDA カーネルのボトルネック診断
  2. 02CUTLASS または Triton カーネルの調整
  3. 03コード変更前後の性能比較

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/bruce-lee-ly/cuda_auto_tune --skill cuda-auto-tune

インストール後、Claude Code で/cuda-auto-tuneを入力して読み込まれたか確認します。

同梱ファイルscripts/ncu_analyse.pyscripts/ncu_profile.sh

詳細

NCU 駆動の反復的カーネル最適化(CUDA/CUTLASS/Triton/CuTe DSL)

ゲートチェック(最適化の前に必ず実施)

STOP — Do you have NCU profile data for this kernel?
  NO  → Go to Step 1. Do NOT touch any kernel code.
  YES → Go to Step 2.

厳守事項 — いずれかに違反すると、最適化全体が無効になります:

  • NCU のデータなしに、カーネルコード、起動設定、テンプレートパラメーターを絶対に変更しないでください。
  • 推奨事項にはすべて、根拠となる具体的な NCU メトリクス値を必ず示してください。
  • 各反復では、ルーフライン、メモリ階層、ワープストール、占有率を最低限確認してください。
  • 最適化のプレイブックは、カーネルの実装タイプに一致させてください。
  • コードを変更するたびに、再プロファイリングを行い、--diff で比較してください。
  • 改善が頭打ちになった場合、またはメトリクスがハードウェアの上限に近づいた場合は、反復を終了してください。

必須の最適化ループ

┌─────────────────────────────────────────────────────────────────────┐
│  Step 1: Profile (NCU --set full)                                   │
│      ↓                                                              │
│  Step 2: Multi-dimensional analysis + identify kernel type          │
│      ↓                                                              │
│  Step 3: Apply type-specific playbook (one change per iteration)    │
│      ↓                                                              │
│  Step 4: Re-profile + diff → improved? → loop or stop               │
│      ↑                                           │                  │
│      └───────────────────────────────────────────┘                  │
└─────────────────────────────────────────────────────────────────────┘

ステップ 1:NCU でプロファイリングする(必須 — データなしで最適化しない)

オプション A:プロファイリングスクリプト(推奨)
# Native CUDA / CUTLASS binaries
bash cuda-auto-tune/scripts/ncu_profile.sh ./kernel report_v1

# Triton / Python
bash cuda-auto-tune/scripts/ncu_profile.sh "python your_kernel.py" report_v1

# CuTe DSL / Python
bash cuda-auto-tune/scripts/ncu_profile.sh "python your_cutedsl_kernel.py" report_v1

このスクリプトは --set full を収集し、CSV にエクスポートした後、詳細分析を実行してレポートを生成します。

オプション B:手動プロファイリング
ncu --set full -o report_v1 --target-processes all ./your_kernel
ncu --import report_v1.ncu-rep --page raw --csv > report_v1.csv
python3 cuda-auto-tune/scripts/ncu_analyse.py report_v1.csv
カーネル名フィルター(ノイズを低減)
# CUTLASS only
ncu --set full -o report_v1 --target-processes all \
    --kernel-name "cutlass_\|sm90_\|ampere_" ./cutlass_program

# Triton only
ncu --set full -o report_v1 --target-processes all \
    --kernel-name "triton_" "python triton_kernel.py"

# CuTe DSL (kernel name often generic — use --type override in analysis)
python3 cuda-auto-tune/scripts/ncu_analyse.py report_v1.csv --type cutedsl
想定される出力
ncu_reports/
├── report_v1.ncu-rep           # Full binary report
├── report_v1.csv               # Raw metrics CSV
├── report_v1_analysis.md       # Deep analysis report
└── report_v1_summary.txt       # Per-kernel summary

ステップ 2:多面的な分析

2.1 実装タイプを特定する

NCU の「Function Name」とソースのコンテキストから、カーネルのタイプを判定します:

タイプ判定の手がかり
Native CUDAライブラリの接頭辞がない。手書きの __global__ 関数
CUTLASScutlass_ 接頭辞、smXX_xmma_、tensorop または cutlass を含む
Tritontriton_ 接頭辞、triton を含む、エンコードされた接尾辞(例:_0d1d...e)
CuTe DSL@cute.kernel による汎用的な名前。ソースのインポート(cutlass.cute、cute.compile)または --type cutedsl で確認
ライブラリcublas*、cudnn* — ベースライン/参照用のみ。最適化対象外
2.2 共通診断(すべてのカーネルタイプで必ず実行)
分析項目主な NCU メトリクス出力
ルーフラインSM スループット、メモリスループット計算律速/メモリ律速/レイテンシ律速/バランス
メモリ階層L1/L2 ヒット率、コアレス化率、DRAM スループットキャッシュ効率+帯域幅のサブボトルネック(DRAM/L2/L1)
ワープストールPC サンプリングによるストール理由(long_scoreboard、wait、barrier、など)ストール理由の上位項目と割合
命令構成パイプラインの FMA/ALU/LSU/Tensor 使用率パイプラインの不均衡、Tensor Core の使用状況
占有率アクティブワープ率、制限要因の内訳(レジスタ/smem/ワープ/ブロック)制限要因+レジスタ数+smem サイズ
メモリハザードバンク競合、レジスタスピル(ローカルストアセクター)深刻度と根本原因
分岐平均実行スレッド数と平均アクティブスレッド数(実数)分岐率
2.3 タイプ別の重点項目
タイプ主な重点項目
Native CUDA起動設定(ブロックサイズ、グリッド)、メモリアクセスパターン、非同期コピー(cp.async/TMA)、Tensor Core の活用可能性
CUTLASSThreadblockShape、WarpShape、ステージ数、アライメント、スケジュールポリシー、エピローグ融合、CTA スウィズル
Tritonnum_warps、num_stages、BLOCK_* サイズ、コンパイラーヒント(tl.multiple_of、tl.max_contiguous)、tl.dot の設定
CuTe DSLthreads_per_cta、elems_per_thread、CopyAtom(num_bits_per_copy)、tiled_copy のレイアウト、smem ステージング、cta_reduce パターン
2.4 ボトルネック分類の判断ツリー
SM% > MEM% + 20  →  COMPUTE_BOUND
MEM% > SM% + 20  →  MEMORY_BOUND
  ├─ DRAM throughput > 70%        → DRAM-Bound (near HBM ceiling)
  ├─ L2 hit < 50%, DRAM > 40%    → DRAM-Bound (L2 miss driven)
  ├─ L1 hit < 20%, L2 hit >= 50% → L2-Bound
  └─ L1 hit < 20%                → L1-Bound
SM% < 40 AND MEM% < 40           →  LATENCY_BOUND
SM% > 60 AND MEM% > 60           →  BALANCED (near peak)
2.5 結論のテンプレート(分析のたびに必須)
=== Conclusion ===
Kernel:    {kernel_name}
Type:      {Native CUDA | CUTLASS | Triton | CuTe DSL}
Arch:      SM_{arch}
Overall:   {COMPUTE_BOUND | MEMORY_BOUND | LATENCY_BOUND | BALANCED}
Duration:  {duration_us} us
Roofline:  SM {sm}%, MEM {mem}%, DRAM {dram}%
Occupancy: {occ}% (theoretical: {theo}%), limited by {limiter}
Regs/Thread: {regs}, Smem/Block: {smem} KB

Findings (sorted by severity):
  [CRITICAL] {finding}: {NCU evidence with numbers} -> {specific action}
  [WARNING]  {finding}: {NCU evidence with numbers} -> {specific action}
  [INFO]     {finding}: {NCU evidence with numbers}

Optimization priorities:
  1. {highest_priority} (expected gain: Nx, evidence: {metric}={value})
  2. {second_priority}  (expected gain: Nx, evidence: {metric}={value})
  3. {third_priority}   (expected gain: Nx, evidence: {metric}={value})

ステップ 3:タイプ別プレイブックを適用する

直感だけに頼った変更は禁止です。変更はすべて、NCU で判明した問題に直接対処する必要があります。 反復ごとに変更は 1 つだけ行い、その後再プロファイリングします(ステップ 4)。


3.1 プレイブック:Native CUDA
3.1.1 起動構成
NCU の検出結果対応コードパターン
占有率 < 50%、ブロックサイズ < 128ブロックサイズを 128–256 に増やしますkernel<<<grid, 256>>>
レジスターが占有率の制限要因です__launch_bounds__ でレジスター数を制限します__global__ void __launch_bounds__(256, 2) kernel()
グリッドが小さすぎます(< SM 数)すべての SM をカバーできるだけのブロック数を確保します十分な N を指定して grid = (N + block - 1) / block
占有率が低く、ブロック数が制限要因ですブロックサイズを小さくして、SM あたりのブロック数を増やします256 の代わりに 128 を試します
3.1.2 メモリアクセスの最適化
NCU の検出結果対応コードパターン
ロードの合体率 > 8ワープ内で連続したアドレス指定を確保し、AoS→SoA にしますdata[threadIdx.x + blockIdx.x * blockDim.x]
ストアの合体率 > 8スキャッター書き込みには共有メモリのステージングを使用しますまず smem に書き込み、その後、合体した書き戻しを行います
L1 ヒット率 < 20%頻繁に再利用されるデータには __shared__ を使用します__syncthreads() を使って共有メモリにタイル化します
L2 ヒット率 < 50%L2 永続化ヒント(Ampere 以降)を使用しますホットデータ範囲に cudaAccessPolicyWindow を使用します
DRAM スループット > 80%混合精度や圧縮を使ってデータ移動を減らします帯域幅が重要な処理には half / __nv_bfloat16 を使用します
バンク競合 > 100K共有メモリにパディングを追加するか、レイアウトをスウィズルします__shared__ float smem[32][33];(+1 のパディング)
レジスターのスピル > 0スレッドごとの状態を減らし、__launch_bounds__ を使用しますアキュムレーターを単純化するか、サブカーネルに分割します
3.1.3 レイテンシ隠蔽とパイプライン処理
NCU の検出結果対応コードパターン
stall_long_scoreboard > 30%(SM>=80)cp.async とダブルバッファリングを使用します__pipeline_memcpy_async(&smem, &gmem, size)
stall_long_scoreboard > 30%(SM>=90)バルクの非同期転送には TMA を使用しますcute::copy(tma_load, ...) または CuTe TMA アトム
stall_barrier > 25%同期の頻度を減らし、ワーププリミティブを使用します__shfl_sync()、cooperative_groups
stall_wait > 30%、long_scoreboard < 15%パイプラインのバッファーが過剰です。深さを減らしますバッファーステージを 1 つ削除します
stall_math_pipe_throttle > 20%計算が飽和しています(好ましい兆候です)Tensor Core の使用、または FLOP 数の削減を検討します
3.1.4 Tensor Core の使用率
NCU の検出結果対応
pipe_tensor < 5%、FP16/BF16 ワークロードで GEMM に似たパターンWMMA(wmma::mma_sync)またはインライン PTX(mma.sync)を使用します
pipe_tensor < 5% だが、データは FP32nvcuda::wmma::precision::tf32 を指定した wmma::mma_sync で TF32 パスを使用します
pipe_fma_fp16 > 10%、pipe_tensor < 5%スカラー FP16 FMA から Tensor Core パスに切り替えます
3.1.5 ベクトル化メモリアクセス
// NCU evidence: coalescing ratio > 4 for 32-bit loads
// Before: scalar loads
float val = input[idx];

// After: vectorized 128-bit load (4x float)
float4 val = reinterpret_cast<const float4*>(input)[idx / 4];

3.2 プレイブック:CUTLASS
3.2.1 カーネル構成の解析

CUTLASS のカーネル名には構成がエンコードされています。次の情報を抽出します。

  • アーキテクチャ:sm80_、sm90_、ampere_、hopper_
  • 計算タイプ:tensorop と simt のどちらか
  • タイル形状:128x128x32、256x128x64
  • パイプラインのステージ数:末尾の x3、x5
  • アラインメント:align8
  • スケジュール(3.x):WarpSpecialized、WarpSpecializedCooperative、WarpSpecializedPingpong
3.2.2 タイル形状と占有率
NCU の検出結果対応
占有率 < 40%、smem が制限要因ですThreadblockShape を小さくする(例:256x128→128x128)か、ステージ数を減らします
占有率 < 40%、レジスターが制限要因ですWarpShape を小さくして(例:64x64→32x32)、スレッドあたりのレジスター数を減らします
SM スループット < 30%、グリッドが小さいThreadblockShape を大きくして、CTA あたりの処理要素数を増やします
SM スループット > 80%、MEM < 40%すでに計算律速です。重なりを増やすため、パイプラインのステージ数を増やします
3.2.3 パイプラインのステージ数
NCU の検出結果対応
stall_long_scoreboard > 30%ステージ数を増やします(Ampere:3→5、Hopper:2→3)
stall_wait > 30%、long_scoreboard < 15%パイプラインのバッファーが過剰です。smem を節約するため、ステージ数を減らします
smem が制限要因で、ステージ数 > 3ステージ数を減らして smem を空け、占有率を高めます
3.2.4 アラインメントとベクトル化
NCU の検出結果対応
ロードの結合が 4 を超え、アラインメントが 8 未満CUTLASS のアラインメントを 8(128 バイト)に引き上げます。行列の先頭次元をアラインメントの倍数にパディングします
データが TensorOp に対応しているのに SIMT パスが使用されているCUTLASS の設定を tensorop に切り替えます(2~8 倍の高速化)
TensorOp が設定されているのに pipe_tensor が 5% 未満アラインメント要件を確認します。LD は InstructionShape::kK の倍数である必要があります
3.2.5 スケジュールとアーキテクチャ
NCU の検出結果対応
SM>=90 で CUTLASS 2.x を使用WarpSpecialized + TMA を備えた CUTLASS 3.x にアップグレードします(1.2~1.5 倍の高速化)
大規模な GEMM で L2 ヒット率が 50% 未満ThreadblockSwizzle を追加します(2.x:GemmIdentityThreadblockSwizzle<N>、3.x:StreamK またはタイルスウィズル)
Hopper で stall_long_scoreboard が 30% を超えるTMA ロードを使用する WarpSpecializedCooperative スケジュールに切り替えます
3.2.6 エピローグの融合
NCU の検出結果対応
CUTLASS カーネルが連続して複数実行されている(例:GEMM + バイアス + 活性化)CUTLASS エピローグビジターツリーを使用して、単一のカーネルに融合します
DRAM トラフィックが多い(読み書きの GB が想定値を超える)GEMM 後の処理をエピローグに移し、中間テンソルをなくします

3.3 プレイブック:Triton
3.3.1 カーネルの分類

Triton カーネルのサブタイプ(カーネル名から判定):

  • triton_poi_:Inductor のポイントワイズ(自動生成)
  • triton_red_:Inductor のリダクション(自動生成)
  • triton_per_:Inductor の永続リダクション(自動生成)
  • カスタムの @triton.jit:手書きカーネル(全面的にチューニング可能)

Inductor 生成カーネル:PyTorch レベル(torch._inductor.config)で最適化するか、ホットパスの場合はカスタムの @triton.jit として書き直します。

3.3.2 num_warps のチューニング
NCU の検出結果対応
レジスター数が 128 以上、num_warps が 8 以上重大:num_warps を減らします(4 または 2 を試します)
レジスター数が 64 以上、num_warps が 8 以上num_warps を 4 に減らします
占有率が 40% 未満で、レジスターが制限要因num_warps を減らす、および/または BLOCK_* タイルサイズを小さくします
SM スループットが 30% 未満で、ワープ数が少ないレイテンシー隠蔽を改善するため、num_warps を増やします
3.3.3 num_stages のチューニング
NCU の検出結果対応
stall_long_scoreboard が 30% を超えるnum_stages を増やします(Ampere では 2→3→4、Hopper では 2→3)
stall_wait が 30% を超え、long_scoreboard が 15% 未満num_stages を減らす(バッファー過多)か、タイルあたりの処理量を増やします
Smem が占有率の制限要因num_stages を減らします(各ステージで smem バッファーが 2 倍になります)
Hopper で long_scoreboard が高いTMA ベースのロードには tl.make_block_ptr() の使用も検討します
3.3.4 BLOCK_* タイルサイズのチューニング
NCU の検出結果対応
レジスターの負荷が高いBLOCK_M、BLOCK_N、または BLOCK_K を小さくします
SM スループットが低く、計算律速を改善できる余地があるタイルあたりの計算量を増やすため、BLOCK_M/BLOCK_N を大きくします
DRAM 帯域幅が上限に近い書き戻し前のデータ再利用を増やすため、BLOCK_K を大きくします
3.3.5 メモリアクセスの最適化
NCU の検出結果対応コードパターン
ロードの結合が 8 を超えるストライドのヒントを追加しますtl.multiple_of(stride, 16) および tl.max_contiguous(offsets, BLOCK)
転置された入力でアクセスが結合されていない構造化ポインターを使用しますtl.make_block_ptr(base, shape, strides, offsets, block_shape, order)
L1 ヒット率が低いアクセスパターンの連続性を確認します最内次元のストライドが 1 であることを確認します
3.3.6 Tensor Core の使用率
NCU の検出結果対応
カーネルが tl.dot を使用しているのに pipe_tensor が 5% 未満1)fp32 では allow_tf32=True を設定します。2)BLOCK_K を 16 の倍数にします。3)データ型が fp16/bf16/tf32/fp8 であることを確認します
コードに tl.dot がなく、pipe_tensor が 5% 未満GEMM に似たパターンがありません。tl.dot を使うように構造を変更します
3.3.7 Triton autotune の統合
@triton.autotune(
    configs=[
        triton.Config({'BLOCK_M': 128, 'BLOCK_N': 128, 'BLOCK_K': 32}, num_warps=4, num_stages=3),
        triton.Config({'BLOCK_M': 64,  'BLOCK_N': 64,  'BLOCK_K': 64}, num_warps=4, num_stages=4),
        triton.Config({'BLOCK_M': 128, 'BLOCK_N': 64,  'BLOCK_K': 32}, num_warps=8, num_stages=3),
    ],
    key=['M', 'N', 'K'],
)
@triton.jit
def kernel(...):
    ...

NCU でボトルネックが判明したら、手当たり次第に検索するのではなく、有望な領域に絞って autotune の設定を調整します。


3.4 プレイブック:CuTe DSL
3.4.1 主要な調整パラメーター
パラメーター効果一般的な範囲
threads_per_ctaCTA あたりのワープ数です。占有率、バリアコスト、リダクションコストに影響します128–512
elems_per_threadスレッドあたりの要素数です。レジスター使用量、データ再利用に影響します4–32
num_bits_per_copyCopyAtom の幅です。ベクトル化されたロード/ストアの帯域幅に影響します32, 64, 128
Smem ステージングバッファーパイプラインの深さ × タイルサイズです。smem の使用量に影響します占有率を高めるため最小化
3.4.2 占有率の最適化
NCU の検出結果対処
占有率 < 40%、レジスターが制限要因elems_per_thread または threads_per_cta を減らします。cute.compile() に --maxrregcount=128 を追加します
占有率 < 40%、smem が制限要因threads_per_cta を減らします(ワープが少ないほどリダクションバッファーが小さくなります)。またはステージングバッファーの数を減らします
レジスター >= 128、ワープ >= 8重大:threads_per_cta を 128 または 256 に減らします
3.4.3 メモリーアクセス(TiledCopy)
NCU の検出結果対処
ロードのコアレッシング > 81) num_bits_per_copy を 128 に増やします。2) t_layout が連続するアドレスに沿ってスレッドを配置していることを確認します。3) from_dlpack() で assumed_align=16 が使われていることを確認します
stall_long_scoreboard > 30%1) num_bits_per_copy を 128 に増やします。2) 再利用を増やすため elems_per_thread を増やします。3) SM>=80 では CpAsyncOp コピーアトムを使用します。4) ダブルバッファリングを追加します
stall_wait > 30%、long_scoreboard < 15%パイプラインのバッファーが過剰です。1 ステージあたりの計算量を増やすため elems_per_thread を増やすか、パイプラインの深さを減らします
3.4.4 同期とリダクション
NCU の検出結果対処
stall_barrier > 25%1) threads_per_cta を減らします(バリアで待機するワープが少なくなります)。2) ワープ数が 32 以下の場合、2 回目の sync_threads をシャッフルブロードキャストに置き換えます。3) 複数の cta_reduce 呼び出しをまとめます
バリアコストが高く、リダクションが小さい要素数が少ない場合は、smem を使わないワープのみのリダクションを使用します
反復ごとに sync_threads が複数回ある同期ポイントを最小限にします。非同期パイプラインのコミット/待機パターンを使用します
3.4.5 スレッドの分岐
NCU の検出結果対処
分岐 > 20%threads_per_cta * elems_per_thread が問題の次元 N にできるだけ近くなるよう調整し、述語によって無効化されるスレッドを減らします
述語付きコピーで分岐が多いN が threads_per_cta * elems_per_thread で割り切れることを確認するか、末尾処理の方法を使用します
3.4.6 計算の最適化
NCU の検出結果対処
pipe_tensor < 5%、FP16 の GEMM 型演算Tensor Core パスに MmaOp を指定して cute.make_mma_atom() を使用します
pipe_fma が高く pipe_tensor が低い(RMSNorm/LayerNorm などの非 GEMM 演算)リダクションには Tensor Core を適用できません。代わりにメモリーとバリアの最適化に注力します
3.4.7 再プロファイリングのためのキャッシュ無効化

CuTe DSL は JIT を介して Python を CUDA にコンパイルします。コードを変更した後:

# Clear compilation cache to ensure re-compilation
rm -rf __pycache__/ .cache/ /tmp/cutlass_cute_cache/
# Then re-profile
bash cuda-auto-tune/scripts/ncu_profile.sh "python your_cutedsl_kernel.py" report_v2

ステップ 4:再プロファイリングと検証(変更のたびに必須)

4.1 再プロファイリング
# Clear JIT caches first
rm -rf ~/.triton/cache            # Triton
rm -rf __pycache__/ .cache/       # CuTe DSL

# Profile updated version
bash cuda-auto-tune/scripts/ncu_profile.sh ./kernel_v2 report_v2
# or
bash cuda-auto-tune/scripts/ncu_profile.sh "python kernel_v2.py" report_v2
4.2 ベースラインとの比較
python3 cuda-auto-tune/scripts/ncu_analyse.py ncu_reports/report_v2.csv --diff ncu_reports/report_v1.csv
4.3 検証チェックリスト
チェック項目基準
実行時間は改善しましたか?gpu__time_duration.sum が減少
対象のボトルネックは改善しましたか?変更のきっかけとなった特定の指標が改善
新たなボトルネックはありませんか?差分レポートに新たな重大な検出結果がない
ハードウェアの上限に達していますか?SM スループット > 80% または DRAM スループット > 85% は、ピーク近くを意味します
4.4 反復記録のテンプレート

各反復を記録し、説明責任を果たします。

=== Iteration {N} ===
Change:  {what was changed and why}
NCU evidence: {metric}={before_value} -> {finding}
Report: report_v{N}.csv

Result:
  Duration: {before} us -> {after} us ({delta}%)
  Target metric: {metric}={before} -> {after}
  New findings: {any new issues introduced}

Decision: {CONTINUE to next bottleneck | STOP — at ceiling | ROLLBACK — regression}

クイックリファレンス:NCU の重要指標

指標NCU キー
実行時間gpu__time_duration.sum [us]
SM スループットsm__throughput.avg.pct_of_peak_sustained_elapsed [%]
メモリスループットgpu__compute_memory_throughput.avg.pct_of_peak_sustained_elapsed [%]
DRAM スループットgpu__dram_throughput.avg.pct_of_peak_sustained_elapsed [%]
L1 ヒット率l1tex__t_sector_hit_rate.pct [%]
L2 ヒット率lts__t_sector_hit_rate.pct [%]
ロードのコアレス化l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum / l1tex__t_requests_pipe_lsu_mem_global_op_ld.sum
バンクコンフリクトl1tex__data_bank_conflicts_pipe_lsu_mem_shared.sum
レジスタスピルl1tex__t_sectors_pipe_lsu_mem_local_op_st.sum [sector]
占有率sm__warps_active.avg.pct_of_peak_sustained_active [%]
ワープの実行可能性smsp__warps_eligible.avg.per_cycle_active [warp]
スレッドあたりのレジスタ数launch__registers_per_thread [register/thread]
ブロックあたりの共有メモリlaunch__shared_mem_per_block [Kbyte/block]

概要

このスキルでは、厳密な プロファイル → 分析 → 変更 → 検証 のサイクルを徹底します。 NCU データがなければ最適化は行いません。指標による根拠がなければコードは変更しません。 カーネルの種類(Native CUDA/CUTLASS/Triton/CuTe DSL)ごとに、NCU 指標と対応するアクションをまとめた専用のプレイブックを用意しています。 すべての変更を追跡し、再プロファイリングによって検証します。

コメント