소스 정보
- 저장소
- mindspore-ai/akg
- 최근 소스 활동
- 2026년 3월 28일 06:51
- 감지된 SKILL.md 언어
- 중국어
- 스타
- 259
- 포크
- 48
설치 방법
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
소스 파일 검토
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
메뉴
기본적으로 소스를 먼저 확인하는 Prompt가 선택됩니다. 직접 명령으로 전환하거나 로컬 사본을 다운로드할 수도 있습니다.
설치 여부를 결정하기 전에 SKILL.md와 SkillsMP에 표시된 보조 파일을 읽어 보세요.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
직접 명령은 검토 Prompt를 거치지 않습니다. 실행하기 전에 소스를 확인하세요.
npx skills add https://github.com/mindspore-ai/akg --skill tilelang-cuda-api명령은 한 줄로 유지됩니다. 복사하기 전에 가로로 스크롤해 전체 내용을 확인하세요.
로컬 사본을 원하시나요? SkillsMP에서 현재 제공할 수 있는 파일을 다운로드하세요.
SKILL.md 표시 중
SOC 직업 분류 기준
| name | tilelang-cuda-api |
| description | TileLang CUDA API 完整参考手册,适用于需要查阅具体 API 用法、了解函数参数含义的任意 TileLang CUDA 内核代码生成场景 |
| category | fundamental |
| version | 1.0.0 |
| metadata | {"backend":"cuda","dsl":"tilelang_cuda"} |
本文档提供 TileLang 核心 API 的详细参考,包括函数签名、参数说明和使用示例。
@tilelang.jit(out_idx=[-1])
def my_kernel(M, N, K, block_M, block_N, block_K):
@T.prim_func
def main(
A: T.Tensor((M, K), "float16"),
B: T.Tensor((K, N), "float16"),
C: T.Tensor((M, N), "float16"),
):
# 内核实现
pass
return main
out_idx - 指定输出张量的索引列表(如 [-1] 表示最后一个参数为输出)out_idx 后,运行内核时只需传入输入张量,输出由 TileLang 自动创建kernel = tilelang.compile(my_func, out_idx=[-1])
@tilelang.jit)with T.Kernel(T.ceildiv(N, block_N), T.ceildiv(M, block_M), threads=128) as (bx, by):
# bx, by 对应 blockIdx.x, blockIdx.y
pass
grid_x: 网格 X 维度大小grid_y: 网格 Y 维度大小(可选)threads: 每个线程块的线程数(bx, by)grid_size = T.ceildiv(N, block_N)
a, b - 被除数和除数A_shared = T.alloc_shared((block_M, block_K), "float16")
shape: 张量形状dtype: 数据类型C_local = T.alloc_fragment((block_M, block_N), "float")
shape: 张量形状dtype: 数据类型temp = T.alloc_local((1,), "float32")
shape: 张量形状dtype: 数据类型# 全局内存到共享内存
T.copy(A[by * block_M, ko * block_K], A_shared)
# 寄存器到全局内存
T.copy(C_local, C[by * block_M, bx * block_N])
src: 源数据(可以是全局内存切片或寄存器片段)dst: 目标数据T.clear(C_local)
tensor - 要清零的张量T.fill(buffer, -T.infinity("float"))
tensor: 目标张量value: 填充值for ko in T.Pipelined(T.ceildiv(K, block_K), num_stages=3):
T.copy(A[by * block_M, ko * block_K], A_shared)
T.gemm(A_shared, B_shared, C_local)
count: 循环次数num_stages: 流水线深度(通常 2-4 效果最好)# 单维度并行
for i in T.Parallel(block_M):
pass
# 多维度并行
for i, j in T.Parallel(block_M, block_N):
C_local[i, j] = A_shared[i, j] + B_shared[i, j]
for k in T.serial(block_K):
pass
count - 循环次数for k in T.vectorized(TILE_K):
A_local[k] = A[bk * BLOCK_K + tk * TILE_K + k]
count - 向量化长度# 基础矩阵乘法
T.gemm(A_shared, B_shared, C_local)
# 带转置的矩阵乘法
T.gemm(Q_shared, K_shared, acc_s, transpose_B=True)
# 指定 Warp 策略
T.gemm(A_shared, B_shared, C_local, policy=T.GemmWarpPolicy.FullRow)
A, B: 输入矩阵(通常为共享内存)C: 输出/累加器(通常为寄存器片段)transpose_B: 是否转置 B 矩阵policy: Warp 策略T.reduce_max(acc_s, scores_max, dim=1)
T.reduce_max(acc_s, scores_max, dim=1, clear=False)
input: 输入张量output: 输出张量dim: 归约维度clear: 是否先清零输出(默认 True)T.reduce_sum(acc_s, scores_sum, dim=1)
T.reduce_maxT.reduce_min(input_tensor, output_tensor, dim=axis)
T.reduce_mean(input_tensor, output_tensor, dim=axis)
T.exp(x) # 指数函数
T.exp2(x) # 以 2 为底的指数
T.log(x) # 自然对数
T.sqrt(x) # 平方根
T.rsqrt(x) # 平方根倒数
T.infinity(dtype) # 无穷大常量
result = T.if_then_else(A[idx] > 0, A[idx] + B[idx], A[idx] - B[idx])
for i in T.Parallel(block_M):
if i < N:
# 有条件的操作
pass
T.atomic_add(C_shared[tn], C_accum[0])
target: 目标内存位置value: 要添加的值for tn in T.Parallel(BLOCK_N):
# tn 对应 threadIdx.x
pass
# 可能导致问题,不推荐使用
tn = T.get_thread_binding(0) # threadIdx.x
tk = T.get_thread_binding(1) # threadIdx.y
T.sync_threads() # 所有线程都必须执行此操作
@T.macro
def Softmax(acc_s, acc_s_cast, scores_max, scores_sum):
T.reduce_max(acc_s, scores_max, dim=1)
for i, j in T.Parallel(block_M, block_N):
acc_s[i, j] = T.exp(acc_s[i, j] - scores_max[i])
T.reduce_sum(acc_s, scores_sum, dim=1)
T.copy(acc_s, acc_s_cast)
from tilelang.intrinsics import make_mma_swizzle_layout
T.annotate_layout({
A_shared: make_mma_swizzle_layout(A_shared),
B_shared: make_mma_swizzle_layout(B_shared),
})
T.use_swizzle(panel_size=10, enable=True)
result = A[i].astype("float") * B[i].astype("float")
normalized.astype("float16")
float16: 半精度浮点数float32: 单精度浮点数bfloat16: Brain Float 16int8: 8 位整数int32: 32 位整数float / float32: 单精度浮点数(推荐用于累加器).astype() 指定T.Parallel 并行化数据复制,利用 T.Pipelined 重叠操作T.gemm、T.reduce_sum 等优化原语,避免重复实现已有功能T.sync_threads() 会导致死锁T.get_thread_binding() 而非 T.Parallel()