SOC 職業分類に基づく
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
直接コマンドでは確認用 Prompt が省略されます。実行前にソースを確認してください。
npx skills add https://github.com/mindspore-ai/akg --skill cuda-c-apiコマンドは1行のまま表示されます。コピー前に横へスクロールして全体を確認してください。
ローカルで確認しますか?SkillsMP が現在取得できるファイルをダウンロードできます。
SKILL.md を表示中
矩阵乘法矩阵乘法 A[M, K] @ B[K, N] = C[M, N]中,大K维度矩阵乘法(K>>M,N)优化:针对M/N较小但K极大(如M=N=256,K=131072)的场景,Split-K切分K维度并行化、Workspace+Reduce替代全局同步,实现显著性能提升
Triton Ascend hard API restrictions and forbidden syntax. MUST-follow rules that apply to every kernel: forbidden control flow (return/break/continue/lambda/while), tensor slice/index restrictions, scalar conversion rules, BLOCK_SIZE upper bound. Violating any of these produces a compile or runtime error on Ascend.
Triton Ascend 性能优化通用策略: BLOCK_SIZE 选择 (1024-2048 for elementwise, must be <65536), grid configuration (use VEC_CORE_NUM / CUBE_CORE_NUM, 2D/3D grid for matmul / conv / reduce, 1D grid + inner loop for elementwise / pointwise), 256B alignment for memory transfers, autotune block-size patterns, fp16 / fp32 precision conversion. Bind via keywords like matmul, elementwise, reduce, block_size, grid, autotune, alignment, fp16, fp32, tile, interleaved-loop, cube-core, vec-core.
| name | cuda-c-api |
| description | CUDA C 编程接口完整参考手册 |
| category | fundamental |
| version | 1.0.0 |
| metadata | {"backend":"cuda","dsl":"cuda_c"} |
本文档提供 CUDA C 核心编程接口的详细参考,包括函数签名、参数说明和使用示例。
__global__ void kernel_function(参数列表);
<<<>>> 语法启动void__device__ float device_function(参数列表);
__device__ 或 __global__ 函数调用__host__ void host_function(参数列表);
__host__ __device__ float utility_function(float x);
__shared__ float shared_memory[256];
__constant__ float constant_data[64];
cudaMemcpyToSymbol 从主机端设置extern __shared__ float dynamic_shared[];
kernel<<<grid, block, shared_mem_bytes>>>(args)kernel_name<<<grid_size, block_size>>>(参数列表);
kernel_name<<<grid_size, block_size, shared_mem_bytes>>>(参数列表);
kernel_name<<<grid_size, block_size, shared_mem_bytes, stream>>>(参数列表);
int 或 dim3)int 或 dim3)dim3 grid_size(blocks_x, blocks_y, blocks_z);
dim3 block_size(threads_x, threads_y, threads_z);
int bx = blockIdx.x; // X 方向块索引
int by = blockIdx.y; // Y 方向块索引
int bz = blockIdx.z; // Z 方向块索引
uint3int tx = threadIdx.x; // X 方向线程索引
int ty = threadIdx.y; // Y 方向线程索引
int tz = threadIdx.z; // Z 方向线程索引
uint3int bdx = blockDim.x; // X 方向线程数
int bdy = blockDim.y; // Y 方向线程数
int bdz = blockDim.z; // Z 方向线程数
dim3int gdx = gridDim.x; // X 方向块数
int gdy = gridDim.y; // Y 方向块数
int gdz = gridDim.z; // Z 方向块数
dim3float* d_data;
cudaMalloc(&d_data, n * sizeof(float));
cudaError_t 错误状态码cudaFree(d_data);
cudaError_t 错误状态码// 主机 → 设备
cudaMemcpy(d_data, h_data, size, cudaMemcpyHostToDevice);
// 设备 → 主机
cudaMemcpy(h_data, d_data, size, cudaMemcpyDeviceToHost);
// 设备 → 设备
cudaMemcpy(d_dst, d_src, size, cudaMemcpyDeviceToDevice);
cudaError_t 错误状态码cudaMemcpyHostToDevice: H2DcudaMemcpyDeviceToHost: D2HcudaMemcpyDeviceToDevice: D2DcudaMemset(d_data, 0, n * sizeof(float));
__syncthreads();
__threadfence();
__threadfence_block();
atomicAdd(&output[0], local_sum);
int, unsigned int, float, double(Compute Capability 6.0+)atomicMax(&max_val, local_max);
atomicMin(&min_val, local_min);
int, unsigned intint old = atomicCAS(&target, expected, desired);
float old = atomicExch(&target, new_value);
float max_val = fmaxf(a, b); // 最大值
float min_val = fminf(a, b); // 最小值
float abs_val = fabsf(x); // 绝对值
float sqrt_val = sqrtf(x); // 平方根
float rsqrt_val = rsqrtf(x); // 平方根倒数
float exp_val = expf(x); // 指数
float log_val = logf(x); // 自然对数
float pow_val = powf(base, exp); // 幂运算
float ceil_val = ceilf(x); // 向上取整
float floor_val = floorf(x); // 向下取整
float fast_exp = __expf(x); // 快速指数
float fast_log = __logf(x); // 快速对数
float fast_sin = __sinf(x); // 快速正弦
float fast_cos = __cosf(x); // 快速余弦
float fast_pow = __powf(b, e); // 快速幂运算
float f = __int2float_rn(i); // int → float(最近舍入)
int i = __float2int_rn(f); // float → int(最近舍入)
// Warp 内数据交换
float val = __shfl_sync(0xFFFFFFFF, src_val, src_lane);
// Warp 内归约
float val = __shfl_down_sync(0xFFFFFFFF, src_val, offset);
// 在 CUDA 源代码中使用 PyTorch 接口
torch::Tensor my_op(torch::Tensor input) {
auto size = input.numel();
auto output = torch::zeros_like(input);
int block_size = 256;
int num_blocks = (size + block_size - 1) / block_size;
my_kernel<<<num_blocks, block_size>>>(
input.data_ptr<float>(),
output.data_ptr<float>(),
size
);
return output;
}
input.numel() // 元素总数
input.size(dim) // 指定维度大小
input.data_ptr<float>() // 获取数据指针
torch::zeros_like(input) // 创建同形状零张量
torch::empty_like(input) // 创建同形状未初始化张量
__expf 等加速__syncthreads() 同步