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

cuda-debugging — скилл для Claude Code: отладка CUDA-ядер

Ведёт агента по отладке CUDA: cuda-gdb, Compute Sanitizer, дампы GPU и разбор ошибок 700/702. Пригодится, когда ядро падает или даёт неверный результат.

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

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

Скилл описывает порядок действий при отладке CUDA-программ. Сборка для отладки идёт через nvcc -G -g -O0, а для сантайзеров хватает -lineinfo -g -O2 — без -G cuda-gdb не встанет на точку останова в ядре, это первое, на чём спотыкаются.

Дальше идут автоматические проверки: compute-sanitizer --tool memcheck ловит выход за границы и утечки, racecheck — гонки в shared и global памяти, initcheck — чтение неинициализированной памяти, synccheck — потерянные __syncthreads. Для интерактивной сессии есть cuda-gdb: info cuda kernels, cuda thread (0,0,0), пошаговое выполнение внутри ядра. Отдельный раздел — device-side printf с оговоркой про размер буфера и cudaDeviceSynchronize().

Есть таблица кодов ошибок: 700 cudaErrorIllegalAddress, 701 cudaErrorLaunchOutOfResources, 702 cudaErrorLaunchTimeout, 719 cudaErrorLaunchFailure. Плюс разбор core dump через CUDA_ENABLE_COREDUMP_ON_EXCEPTION и дерево решений «падает или врёт». В конце — заметки про CUDA_VISIBLE_DEVICES и MIG.

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

  • поймать выход за границы глобальной памяти в ядре
  • разобраться с ошибкой 700 или 702 при запуске
  • найти гонку между варпами в shared памяти
  • пройти по коду ядра в cuda-gdb построчно
  • прочитать GPU core dump после падения

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

  • Собери проект с -G -g -O0 и прогони compute-sanitizer --tool memcheck, покажи, где выход за границы
  • Ядро падает с ошибкой 700, помоги разобраться через cuda-gdb
  • Прогони racecheck и synccheck по этому ядру и объясни отчёт

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

1Через Skills CLI (Vercel)

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

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

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

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

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

Вопросы о cuda-debugging

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

Выполни npx skills add mohitmishra786/low-level-dev-skills --skill cuda-debugging -a claude-code. После этого файл скилла лежит в ~/.claude/skills/cuda-debugging/SKILL.md.

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

Задаёт агенту порядок отладки CUDA: сборка с -G, прогон Compute Sanitizer, сессия в cuda-gdb, разбор device printf, кодов ошибок и core dump.

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

cuda-gdb и NVIDIA Compute Sanitizer. Для пошаговой отладки ядро надо собрать с флагом -G, иначе точка останова в ядре не сработает.

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

SKILL.md · MIT
---
name: cuda-debugging
description: CUDA debugging skill for GPU program correctness. Use when debugging with cuda-gdb, running NVIDIA Compute Sanitizer memcheck/racecheck, analyzing GPU core dumps, or interpreting CUDA error codes 700/702. Activates on queries about cuda-gdb, compute-sanitizer, illegal memory access, launch timeout, or device printf.
---

# CUDA Debugging

## Purpose

Guide agents through debugging CUDA programs with cuda-gdb for interactive GPU thread inspection, NVIDIA Compute Sanitizer for automated memory and race detection, GPU core dump analysis, device-side `printf`, and triaging common CUDA runtime error codes.

## When to Use

- `cudaErrorIllegalAddress` (700) or segmentation fault on device
- Intermittent correctness failures in multi-threaded GPU code
- Debugging race conditions between warps or between host and device
- Stepping through kernel code line-by-line with cuda-gdb
- Validating uninitialized memory reads with initcheck
- Kernel hang or `cudaErrorLaunchTimeout` (702)

## Workflow

### 1. Build for debugging

```bash
# Debug build — disables optimizations, enables device debug
nvcc -G -g -O0 -arch=sm_80 -o app_debug main.cu

# Sanitizer-friendly build (lineinfo helps reports)
nvcc -lineinfo -g -O2 -arch=sm_80 -o app_san main.cu
```

`-G` is required for cuda-gdb source-level stepping. Sanitizers work with optimized builds but `-G` gives clearer line numbers.

### 2. Compute Sanitizer — automated checks

```bash
# Memory errors (OOB, misaligned, leak)
compute-sanitizer --tool memcheck ./app_san

# Shared memory and global memory races
compute-sanitizer --tool racecheck ./app_san

# Uninitialized memory reads
compute-sanitizer --tool initcheck ./app_san

# Synchronization errors (missing __syncthreads)
compute-sanitizer --tool synccheck ./app_san

# Verbose with source correlation
compute-sanitizer --tool memcheck --show-reachable=yes --log-file san.log ./app_san
```

Typical memcheck output:

```
======== Invalid __global__ write of size 4
========     at 0x1a0 in vector_add(vector_add.cu:12)
========     by thread (0,0,0) in block (0,0,0)
======== Address 0x7f... is out of bounds
```

### 3. cuda-gdb interactive session

```bash
# Launch under cuda-gdb
cuda-gdb ./app_debug

# Or attach to running process
cuda-gdb -p <pid>
```

Essential commands:

```gdb
# Break at kernel entry
(cuda-gdb) break vector_add
(cuda-gdb) run

# Focus on GPU threads
(cuda-gdb) info cuda kernels
(cuda-gdb) cuda kernel 0
(cuda-gdb) cuda thread (0,0,0)   # block (x,y,z), thread (x,y,z)

# Inspect device memory
(cuda-gdb) print data[i]
(cuda-gdb) x/10f d_ptr

# Step in kernel
(cuda-gdb) cuda step
(cuda-gdb) cuda next

# All threads in block
(cuda-gdb) info cuda threads
(cuda-gdb) cuda thread (0,0,5)
```

### 4. Device printf

```c
__global__ void debug_kernel(float *data, int n) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < n) {
        if (i < 5)  // limit output
            printf("thread %d: data[%d] = %f\n", i, i, data[i]);
        data[i] *= 2.0f;
    }
}
```

```bash
# Buffer size for printf (default may truncate)
cuda-gdb) set cuda printf_buffer_size 16777216
```

Flush with `cudaDeviceSynchronize()` before checking output. Excessive printf from all threads will overwhelm the buffer.

### 5. Error code triage

| Code | Name | Common cause |
|------|------|--------------|
| 700 | `cudaErrorIllegalAddress` | OOB access, use-after-free, bad pointer |
| 701 | `cudaErrorLaunchOutOfResources` | Too much shared mem or registers per block |
| 702 | `cudaErrorLaunchTimeout` | Infinite loop, TDR watchdog (Windows/default Linux) |
| 719 | `cudaErrorLaunchFailure` | Assert in kernel, stack overflow |

```c
// Always check after launch
kernel<<<grid, block>>>(args);
cudaError_t err = cudaGetLastError();
if (err != cudaSuccess)
    fprintf(stderr, "launch: %s\n", cudaGetErrorString(err));
cudaDeviceSynchronize();
err = cudaGetLastError();
if (err != cudaSuccess)
    fprintf(stderr, "exec: %s\n", cudaGetErrorString(err));
```

### 6. GPU core dumps

```bash
# Enable coredump (driver 450+)
export CUDA_ENABLE_COREDUMP_ON_EXCEPTION=1
export CUDA_COREDUMP_FILE=/tmp/cuda_coredump_%h.%p

./app_san   # crash generates dump

# Analyze with cuda-gdb
cuda-gdb ./app_san /tmp/cuda_coredump_hostname.pid
(cuda-gdb) cuda coredump load /tmp/cuda_coredump_hostname.pid
(cuda-gdb) bt
(cuda-gdb) info cuda kernels
```

### 7. Debugging decision tree

```
Crash or wrong results?
├── Consistent wrong values → logic bug; use printf or cuda-gdb
├── Intermittent / depends on size → OOB or race
│   ├── compute-sanitizer --tool memcheck
│   └── compute-sanitizer --tool racecheck
├── Hang / timeout 702 → infinite loop or barrier mismatch
│   └── synccheck; audit __syncthreads paths
└── Works in debug (-G), fails in release → uninitialized mem or race
    └── initcheck + racecheck on release build
```

### 8. Multi-GPU and MIG notes

```bash
# Isolate GPU
CUDA_VISIBLE_DEVICES=0 compute-sanitizer --tool memcheck ./app

# MIG instances appear as separate devices
nvidia-smi -L
```

## Common Problems

| Symptom | Cause | Fix |
|---------|-------|-----|
| cuda-gdb can't break in kernel | Built without `-G` | Rebuild with `nvcc -G -g -O0` |
| Sanitizer reports no errors but crash persists | Async error delayed | Add `cudaDeviceSynchronize()` after kernel |
| `printf` shows nothing | Buffer full or no sync | Limit prints; increase buffer; sync |
| racecheck false positive on atomics | Non-atomic RMW | Use `atomicAdd`/`atomicCAS` |
| Attach fails | Process not in CUDA context | Break after first `cudaMalloc` |
| TDR timeout on Windows | Long-running kernel | Split kernel; `cudaDeviceSetLimit` or regedit TDR |

## Related Skills

- `skills/gpu/cuda` — kernel patterns, memory hierarchy, launch config
- `skills/gpu/cuda-profiling` — performance after correctness is verified
- `skills/gpu/gpu-memory-model` — understanding races and coalescing
- `skills/debuggers/gdb` — host-side GDB commands shared with cuda-gdb
- `skills/runtimes/sanitizers` — ASan/TSan concepts for host code
- `skills/kernel/kernel-debugging` — kgdb/kprobes for driver-level issues

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

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

Всё по теме «ИИ и ML» →
cuda sanjeed5 Правило задаёт Cursor стиль работы с CUDA C++: проверка ошибок API, разделение host и device кода, оптимизация ядер. Пригодится, если пишете GPU-код и устали от молчаливых падений. ★ 3 579звёзд репо 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установок mojo-gpu-fundamentals modular Инструкция для ИИ-агентов по низкоуровневой разработке на Mojo под GPU NVIDIA, AMD и Apple silicon. Избавляет модель от попыток вставлять синтаксис CUDA. CX Codex +1 2 600установок agent-introspection-debugging affaan-m Задаёт структурированный сценарий самоотладки агента при зацикливании инструментов, переполнении контекста или сбоях среды. Помогает найти причину вместо слепых повторов. CX Codex +1 4 700установок

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

cuda Помогает агенту писать и оптимизировать CUDA-ядра: иерархия потоков, разделяемая память, потоки, флаги nvcc и Thrust. CX Codex +1 320установок kernel-debugging-advanced Скилл для трассировки ядра Linux: ftrace, trace-cmd, perf, kprobes, kgdb и разбор vmcore. Пригодится, когда драйвер тормозит без явной ошибки. CX Codex +1 317установок cuda-profiling Ведёт агента по профилированию CUDA-приложений: таймлайн в Nsight Systems, метрики ядер в Nsight Compute, разбор roofline и узких мест. CX Codex +1 316установок 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установок kernel-debugging Ведёт агента по отладке ядра Linux: kgdb, kdb, ftrace, kprobes, dyndbg и разбор kdump через crash. Пригодится, когда паника ядра или драйвер молчит. CX Codex +1 302установок

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

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