跳到正文
cccskills
免费在 GitHub 公开

hip-rocm

Use when writing HIP kernels with hipcc, porting CUDA code through HIPIFY, profiling with rocprofv3, debugging with rocgdb, or optimizing for MI300X. Not for NVIDIA-side kernels: use cuda.

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(2)

  • SKILL.md6.8 KB
  • agents/openai.yaml211 B

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

HIP and ROCm

Contract

FieldBound contract
TriggerAMD GPU work: HIP kernel authoring, CUDA porting with HIPIFY, ROCm toolchain setup, rocprofv3 profiling, rocgdb debugging, or MI300X tuning.
AuthorityRead-only. The skill emits guidance, code, and commands; it writes no files. Nothing to roll back. No remote mutation.
Side effectGuidance, ported code samples, build commands, and tool invocations for the user to run.
DoneA build command targeting a named gfx arch, a port plan or review, and AMD-side profiling and debugging commands exist for the code in question.

Inputs

  1. Task (required): new HIP kernel, CUDA port, profiling, debugging, or tuning.
  2. GPU (required): rocminfo or rocm-smi output naming the device; MI300X is gfx942.
  3. ROCm version (required if not inferrable): hipcc --version. Grounded current stable: ROCm 10.0.0 (2026-08-26).
  4. CUDA source (required for ports): the .cu files and their CUDA toolkit usage.

Procedure

  1. Verify the stack. Install the ROCm packages for the distribution, then confirm:
rocminfo | head -30
hipconfig --version
hipcc --version
rocm-smi

Device access needs the user in the render (and usually video) group. Export HIP_PLATFORM=amd. Pick the arch per build with --offload-arch, not the deprecated AMDGPU_TARGETS variable. Done when: rocminfo lists the GPU and the arch string is recorded. 2. Write the kernel. HIP mirrors CUDA: same __global__, same builtins, same __syncthreads(), hipMalloc and hipMemcpy in place of the cuda calls:

// vector_add.hip
#include <hip/hip_runtime.h>

__global__ void vector_add(const float *a, const float *b, float *c, int n) {
    int i = blockIdx.x * blockDim.x + threadIdx.x;
    if (i < n)
        c[i] = a[i] + b[i];
}

int main(void) {
    const int n = 1 << 20;
    size_t bytes = n * sizeof(float);
    float *d_a, *d_b, *d_c;
    hipMalloc(&d_a, bytes);
    hipMalloc(&d_b, bytes);
    hipMalloc(&d_c, bytes);

    int threads = 256;
    int blocks = (n + threads - 1) / threads;
    hipLaunchKernelGGL(vector_add, dim3(blocks), dim3(threads), 0, 0,
                       d_a, d_b, d_c, n);
    hipDeviceSynchronize();

    hipFree(d_a); hipFree(d_b); hipFree(d_c);
    return 0;
}
hipcc -O3 --offload-arch=gfx942 -o vector_add vector_add.hip

hipLaunchKernelGGL is the portable form; hipcc also accepts the CUDA <<<blocks, threads>>> syntax. Check launches with hipGetLastError(). Done when: the kernel builds for the recorded arch and both error checks exist. 3. Port CUDA with HIPIFY. Assess before converting, convert in place, review the diff:

hipexamine-perl.sh cuda_project/          # report conversion scope
hipconvertinplace-perl.sh cuda_project/   # hipify-perl engine; text-level
hipconvertinplace.sh cuda_project/        # hipify-clang engine; AST-level, needs CUDA headers

Both wrappers keep a .prehip backup of each converted file. Single-file conversion runs hipify-perl file.cu > file.hip or hipify-clang -inplace main.cu. Core API mappings are one-for-one (cudaMalloc to hipMalloc, cudaMemcpyAsync to hipMemcpyAsync, cudaStream_t to hipStream_t). Expect manual work for cooperative groups and texture references. Done when: the code compiles under hipcc and every unconverted CUDAism is listed. 4. Select hipcc flags per purpose:

hipcc --offload-arch=gfx942 -O3 -o app main.hip                 # one arch
hipcc --offload-arch=gfx90a --offload-arch=gfx942 -o app main.hip  # fat binary
hipcc -g -O0 --offload-arch=gfx942 -o app_debug main.hip        # debug
hipcc -lrocblas -o app main.hip                                 # link rocBLAS

Done when: the build command names every target arch the fleet needs. 5. Profile with the ROCm profiler. Quick stats first, then metric collection:

rocprof --stats ./app
rocprofv3 --kernel-trace -- ./app

Read VALU utilization for compute activity, LDS bank conflict counters for shared memory stalls, and HBM throughput against the part's peak. Done when: each hot kernel has a named limiting resource. 6. Debug with rocgdb. Build with -g -O0, then use standard GDB commands; GPU waves appear in info threads as AMDGPU Wave target IDs:

rocgdb ./app_debug
(rocgdb) break vector_add
(rocgdb) run
(rocgdb) info threads        # host threads plus AMDGPU Wave entries
(rocgdb) thread 4            # focus one wave
(rocgdb) info agents         # devices in the session
(rocgdb) info dispatches     # kernel dispatch state
(rocgdb) print i

Done when: the faulting wave is identified and its variables are inspected. 7. Tune for MI300X with its hardware facts: 64-lane wavefronts, 64 KB of LDS per CU, and about 5.3 TB/s of HBM3e peak bandwidth:

LeverAction
Wavefront widthStart reduction shuffles at offset 32, not 16
LDSTile through the 64 KB budget; pad to break bank conflicts
BandwidthCoalesce every hot access; measure against the 5.3 TB/s figure
Matrix workrocBLAS or hipBLASLt for GEMM; MFMA intrinsics for custom kernels
Atomics-munsafe-fp-atomics relaxes atomic safety for speed; use only where the access pattern is provably safe
__device__ float wavefront_reduce_sum(float val) {
    // 64-lane wavefront: start at half width
    for (int offset = 32; offset > 0; offset >>= 1)
        val += __shfl_down(val, offset);
    return val;
}

Done when: block sizes are multiples of 64 and each tuning change names the hardware limit it addresses. 8. Map libraries by role: cuBLAS to rocBLAS or hipBLAS, cuDNN to MIOpen, NCCL to RCCL, Thrust to hipCUB, cuFFT to rocFFT. Done when: every NVIDIA library dependency has an AMD counterpart named.

Failure and recovery

Failure classBehavior
hipErrorNoDeviceDriver not loaded or no device permission. Check rocm-smi; add the user to render.
Wrong-arch binary--offload-arch does not match the device. Re-read rocminfo and rebuild.
Incomplete hipify portCUDA-specific APIs remain. Port cooperative groups and texture references by hand.
Slower than the CUDA reference64-lane wavefronts change reduction and block shape. Retune to multiples of 64 and re-measure.
HSA_STATUS_ERRORDevice busy or out of memory. Check rocm-smi --showmeminfo; shrink allocations.
rocprof writes nothingNo kernels launched. Verify hipGetLastError() after each launch.

Output

A build command for the recorded arch, the port plan or review with unconverted APIs listed, profiling commands with their reading guide, and debugging commands for the fault. Each claim names the ROCm release it assumes.

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Use when explaining System V AMD64, ARM AAPCS, RISC-V psABI, stack frames, variadic calls, or FFI register rules. Not for the Rust FFI binding layer: use rust-ffi.

中文简介正在准备中。当前显示原文说明。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when configuring ADC sampling time, DMA-driven ADC, calibration, or DAC channel setup on bare-metal MCUs. Not for the DMA stream itself: use dma-baremetal.

中文简介正在准备中。当前显示原文说明。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

af-xdp

免费

Use when creating AF_XDP sockets, configuring UMEM and XSK rings, writing an XDP redirect program, or choosing copy versus zero-copy mode. Not for full kernel bypass: use dpdk.

中文简介正在准备中。当前显示原文说明。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when a completed session needs an agent-environment retrospective. Not for an engineering retrospective from telemetry: use engineering-retrospective.

中文简介正在准备中。当前显示原文说明。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

Use when a redacted, trimmed agent transcript must be appended to a GitHub PR or issue body, with human approval and preview. Not for automated or model-initiated insertion.

中文简介正在准备中。当前显示原文说明。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

agents-md

免费

Use when a repo needs agent setup, AGENTS.md added or made lean, CLAUDE.md audited, or agent instructions scored or pruned. Not for remote, credential, publish, deploy, or irreversible changes.

中文简介正在准备中。当前显示原文说明。

OutlineDriven/odin-claude-plugin372026年9月29日 更新

查看 OutlineDriven 的全部技能

报告此技能的问题