К основному содержанию
скилл CX Codex

cuda-profiling — скилл для Claude Code: профилирование CUDA-ядер

Ведёт агента по профилированию CUDA-приложений: таймлайн в Nsight Systems, метрики ядер в Nsight Compute, разбор roofline и узких мест.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add mohitmishra786/low-level-dev-skills --skill cuda-profiling -a claude-code
Открыть на GitHub

Что делает cuda-profiling

Скилл помогает разобраться, почему CUDA-ядро работает медленнее, чем ожидалось. Агент подсказывает, какой инструмент взять: nsys для общей картины CPU+GPU, ncu для метрик конкретного ядра. Дальше идёт разбор — упирается ли ядро в пропускную способность памяти или в вычисления.

Внутри описан рабочий порядок: сначала собрать приложение с -lineinfo, потом снять таймлайн, затем углубиться в горячее ядро через ncu --kernel-name. Есть разметка фаз через NVTX-диапазоны, набор метрик для CI и таблица типичных сбоев. Например, ERR_NVGPUCTRPERM возникает из-за прав на профилирование — придётся запускать с sudo или снять ограничение через NVreg_RestrictProfilingToAdminUsers=0. Это стоит проверить до того, как гонять длинные прогоны.

Скилл опирается на Nsight Systems и Nsight Compute от NVIDIA, так что без установленного CUDA Toolkit и этих утилит он бесполезен. Для разбора загрузки SM и лимитов по регистрам или shared memory есть отдельные команды ncu.

Какие задачи решает

  • найти узкое место в CUDA-ядре, которое работает медленнее ожидаемого
  • сравнить варианты ядра с разным размером блока и тайлингом
  • собрать проверку регрессий производительности в CI через метрики ncu
  • разметить фазы приложения NVTX-диапазонами для таймлайна
  • понять, упирается ядро в память или в вычисления

Примеры запросов агенту

  • профилируй моё CUDA-ядро через nsys и покажи, где провалы между запусками
  • сними метрики ncu для ядра matmul_tiled и скажи, memory-bound оно или compute-bound
  • добавь NVTX-диапазоны вокруг копирования H2D и запуска ядра

Как установить cuda-profiling

1Через Skills CLI (Vercel)

npx skills add mohitmishra786/low-level-dev-skills --skill cuda-profiling -a claude-code

2Вручную: положить файлы

~/.claude/skills/cuda-profiling/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/cuda-profiling/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о cuda-profiling

Как установить cuda-profiling в Claude?

Выполните npx skills add mohitmishra786/low-level-dev-skills --skill cuda-profiling -a claude-code. Скилл появится в ~/.claude/skills/cuda-profiling/SKILL.md.

Что делает cuda-profiling?

Проводит агента по профилированию CUDA: таймлайн в Nsight Systems, метрики ядер в Nsight Compute, разбор roofline-модели и диагностика memory-bound против compute-bound.

Что нужно для работы скилла?

Nsight Systems и Nsight Compute от NVIDIA. Для профилирования нужны права: при ошибке ERR_NVGPUCTRPERM запускайте с sudo или снимите ограничение через NVreg_RestrictProfilingToAdminUsers=0.

Исходный текст

SKILL.md · MIT
---
name: cuda-profiling
description: CUDA profiling skill for NVIDIA GPU performance analysis. Use when profiling kernels with Nsight Systems or Nsight Compute, interpreting roofline models, diagnosing memory-bound vs compute-bound kernels, or annotating code with NVTX ranges. Activates on queries about Nsight, NCU, ncu CLI, GPU roofline, occupancy metrics, or CUDA profiling workflow.
---

# CUDA Profiling

## Purpose

Guide agents through profiling CUDA applications with Nsight Systems (timeline-level) and Nsight Compute (kernel-level metrics), using the NCU CLI for automated metric collection, interpreting roofline models, and diagnosing whether kernels are memory-bound or compute-bound.

## When to Use

- A CUDA kernel is slower than expected and you need bottleneck identification
- Comparing kernel variants (tiling strategies, block sizes)
- Building CI performance regression checks with `ncu` metrics
- Correlating CPU and GPU activity in multi-stream pipelines
- Annotating application phases with NVTX for timeline visibility
- Interpreting occupancy, memory throughput, and SM utilization metrics

## Workflow

### 1. Choose profiling tool

```
What do you need?
├── System-wide timeline (CPU+GPU+CUDA API) → Nsight Systems (nsys)
├── Per-kernel deep metrics (occupancy, memory) → Nsight Compute (ncu)
└── Quick metric from CLI in CI → ncu --metrics ...
```

### 2. Nsight Systems — timeline profiling

```bash
# Profile entire application
nsys profile --trace=cuda,nvtx,osrt --output=report ./my_cuda_app

# Open report
nsys-ui report.nsys-rep

# CLI summary
nsys stats report.nsys-rep
```

What to look for in the timeline:
- Gaps between kernel launches (CPU bottleneck or sync points)
- `cudaDeviceSynchronize` stalls
- Overlap between H2D copies and kernel execution across streams
- CUDA API call overhead

```bash
# Capture with CUDA graph info
nsys profile --capture-range=cudaProfilerApi ./my_cuda_app
```

### 3. NVTX range annotations

```cpp
#include <nvtx3/nvToolsExt.h>

void pipeline(void) {
    nvtxRangePushA("H2D copy");
    cudaMemcpyAsync(d_in, h_in, size, cudaMemcpyHostToDevice, stream);
    nvtxRangePop();

    nvtxRangePushA("kernel");
    my_kernel<<<grid, block, 0, stream>>>(d_in, d_out, n);
    nvtxRangePop();

    nvtxRangePushA("D2H copy");
    cudaMemcpyAsync(h_out, d_out, size, cudaMemcpyDeviceToHost, stream);
    nvtxRangePop();
}
```

Compile with `-lnvToolsExt` or link nvtx3 header-only. Ranges appear as colored bands in Nsight Systems.

### 4. Nsight Compute — kernel analysis

```bash
# Profile all kernels, save report
ncu -o kernel_report ./my_cuda_app

# Profile specific kernel by name
ncu --kernel-name regex:matmul_tiled ./my_cuda_app

# Launch UI
ncu-ui kernel_report.ncu-rep
```

Key sections in NCU report:
- **Speed of Light**: SM throughput vs memory throughput vs peak
- **Occupancy**: Active warps vs hardware limit
- **Memory Workload Analysis**: L1/L2 hit rates, coalescing efficiency
- **Warp State Statistics**: Stall reasons (memory, barrier, dispatch)

### 5. NCU CLI metrics

```bash
# Essential metrics set
ncu --metrics \
  sm__throughput.avg.pct_of_peak_sustained_elapsed,\
  dram__throughput.avg.pct_of_peak_sustained_elapsed,\
  sm__warps_active.avg.pct_of_peak_sustained_active,\
  l1tex__t_sectors_pipe_lsu_mem_global_op_ld.sum,\
  smsp__sass_thread_inst_executed_op_ffma_pred_on.sum \
  ./my_cuda_app

# CSV export for CI
ncu --csv --metrics dram__bytes_read.sum,dram__bytes_write.sum ./my_cuda_app

# Set kernel replay mode for accurate counters
ncu --kernel-replay-mode application ./my_cuda_app
```

### 6. Memory-bound vs compute-bound diagnosis

```
Roofline interpretation
├── dram__throughput near peak AND sm__throughput low → memory-bound
│   └── Fix: coalescing, shared mem tiling, reduce traffic
├── sm__throughput near peak AND dram low → compute-bound
│   └── Fix: tensor cores, loop unrolling, ILP
└── Both low → launch config, occupancy, or sync overhead
```

Roofline model (conceptual):

```
Performance (GFLOP/s)
    |     /\  compute roof
    |    /  \
    |   /    \____ memory roof (bandwidth-limited region)
    |  /
    +------------------ Arithmetic Intensity (FLOP/byte)
```

Measure arithmetic intensity: `smsp__sass_thread_inst_executed_op_ffma_pred_on.sum * 2 / dram__bytes.sum`

### 7. Occupancy analysis

```bash
ncu --metrics sm__warps_active.avg.pct_of_peak_sustained_active,\
launch__occupancy_limit_registers,\
launch__occupancy_limit_shared_mem,\
launch__occupancy_limit_block_size \
./my_cuda_app
```

| Limiting factor | Typical fix |
|-----------------|-------------|
| Registers | `-maxrregcount`, simplify kernel |
| Shared memory | Reduce tile size, split phases |
| Block size | Try 128 or 256 instead of 512+ |

### 8. Profiling workflow checklist

```bash
# 1. Build with line info (not -G unless debugging)
nvcc -lineinfo -O3 -arch=sm_80 -o app main.cu

# 2. Timeline first
nsys profile --trace=cuda,nvtx -o timeline ./app

# 3. Deep dive on hot kernel
ncu --kernel-name regex:hot_kernel --set full ./app

# 4. Compare before/after
ncu --csv --metrics sm__throughput.avg.pct_of_peak_sustained_elapsed ./app_v1 > v1.csv
ncu --csv --metrics sm__throughput.avg.pct_of_peak_sustained_elapsed ./app_v2 > v2.csv
```

## Common Problems

| Symptom | Cause | Fix |
|---------|-------|-----|
| `ERR_NVGPUCTRPERM` | Insufficient profiling permissions | Run with sudo or set `NVreg_RestrictProfilingToAdminUsers=0` |
| All metrics show zero | Profiling disabled or wrong GPU | Check `CUDA_VISIBLE_DEVICES`; use `--target-processes all` |
| NCU report empty | Kernel too short or not launched | Increase workload; verify `cudaGetLastError()` |
| Huge profiling overhead | Full metric sets on many kernels | Use `--kernel-name` filter; `--launch-skip` |
| Timeline shows no overlap | Single default stream | Create multiple streams; use async copies |
| Occupancy looks fine but kernel slow | Memory latency not hidden | Check memory coalescing; increase active warps |

## Related Skills

- `skills/gpu/cuda` — kernel writing, occupancy tuning, nvcc flags
- `skills/gpu/gpu-memory-model` — coalescing, bank conflicts, SIMT model
- `skills/gpu/cuda-debugging` — correctness before performance tuning
- `skills/profilers/intel-vtune-amd-uprof` — CPU-side roofline and hotspot analysis
- `skills/profilers/flamegraphs` — CPU flamegraphs complementary to nsys timeline
- `skills/profilers/hardware-counters` — general perf stat concepts

© mohitmishra786 · MIT · mohitmishra786/low-level-dev-skills

Похожие скиллы

Всё по теме «ИИ и ML» →
cuda sanjeed5 Правило задаёт Cursor стиль работы с CUDA C++: проверка ошибок API, разделение host и device кода, оптимизация ядер. Пригодится, если пишете GPU-код и устали от молчаливых падений. ★ 3 579звёзд репо system-profile wanshuiyin Профилирует скрипты, процессы, память и GPU с помощью системных утилит и точечной инъекции замеров в код. Помогает найти узкие места в обучении моделей или пайплайнах. CX Codex +1 474установок cuopt-install NVIDIA cuOpt Team Помогает развернуть NVIDIA cuOpt для Python, C или REST-сервера через pip, conda и Docker, а также проверить готовность среды. Пригодится при настройке GPU-оптимизации маршрутов. CX Codex +1 2 500установок nemo-mbridge-perf-cpu-offloading NVIDIA Скилл помогает включить и проверить выгрузку данных на CPU в Megatron Bridge: активации по слоям и состояния оптимизатора через HybridDeviceOptimizer. CX Codex +1 1 800установок gpu-server-management devops-skills Скилл ведёт агента по установке драйверов NVIDIA, CUDA и Docker с GPU, делит A100/H100 через MIG и настраивает мониторинг. CX Codex +1 331установок profile-model modular Профилирует модели MAX, чтобы проверить загрузку GPU и найти самые долгие GPU-ядра. Нужен при медленном инференсе или разборе трассировки. CX Codex +1 1 200установок

Из того же набора62

abi-and-calling-conventions Скилл для ИИ-агента, который разбирает правила ABI: какие регистры держат аргументы, как выравнивается стек, что ломается в FFI. CX Codex +1 342установок linux-kernel-architecture Даёт агенту карту ядра Linux: порядок загрузки, крупные подсистемы, уровни initcall и места, где искать код в linux.git. CX Codex +1 333установок cuda Помогает агенту писать и оптимизировать CUDA-ядра: иерархия потоков, разделяемая память, потоки, флаги nvcc и Thrust. CX Codex +1 320установок kernel-debugging-advanced Скилл для трассировки ядра Linux: ftrace, trace-cmd, perf, kprobes, kgdb и разбор vmcore. Пригодится, когда драйвер тормозит без явной ошибки. CX Codex +1 317установок datasheet-and-refmanual-reading Учит агента читать даташиты и reference manual микроконтроллеров: где искать карту регистров, биты, дерево тактирования и errata. CX Codex +1 314установок cpu-pipelines-and-hazards Объясняет стадии конвейера CPU, конфликты данных и управления, проброс и простои. Пригодится, когда непонятно, почему горячий цикл тормозит. CX Codex +1 311установок qemu-kvm Ведёт агента по запуску виртуальных машин на QEMU с ускорением KVM: флаги, virtio-устройства, проброс VFIO и загрузка своих ядер. CX Codex +1 304установок bus-drivers-i2c-spi Помогает писать клиентские драйверы Linux для датчиков и PMIC на шинах I2C и SPI: регистрация, regmap, привязка к device tree. CX Codex +1 304установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой