Files
project_6/docs/PORTING_ASSESSMENT.md
claude ec140f3605 docs: complete porting assessment — 5 repos, 2660 build targets, ivcore10 compatibility
cat'd every source:
  - CCCL c/parallel/src/reduce.cu: NVRTC JIT (cannot port directly)
  - CCCL c/parallel.v2/src/reduce.cu: hostjit/libnvcc (cannot port directly)
  - CUB block/warp headers: pure header-only (CAN compile with corex)
  - CUTLASS SM70 SIMT GEMM: CAN port (example 24 grouped_gemm)
  - FlashAttention: SM80 Tensor Core (cannot port), but layer_norm is SIMT
  - FLA: pure Triton (needs corex Triton verification)
  - xllm ILU: all already ported

Key finding: CCCL c/parallel depends on nvrtc JIT — must bypass with AOT compilation
using CUB header-only API + corex clang --cuda-gpu-arch=ivcore10
2026-08-14 08:17:25 +00:00

10 KiB
Raw Permalink Blame History

BI-V100 移植评估:全仓库编译目标清单

架构差异

NVIDIA V100 Iluvatar BI-V100
架构标识 sm_70 ivcore10
编译器 nvcc / clang --cuda-gpu-arch=sm_70 corex clang/16 --cuda-gpu-arch=ivcore10
运行时编译 nvrtc + nvjitlink 不支持
Driver API cuLibraryLoadData / cuLibraryGetKernel 不支持
Tensor Core HMMA (SM70) 不支持
Warp size 32 32 (确认)
SMEM 96KB (configurable) 48KB
L2 Cache 6MB 不同
SMs 80 16
CUB block-level header-only 可通过 corex clang 编译
CUB device-level via nvrtc JIT 需要 AOT 替代方案

1. NVIDIA/CCCL (10,083 files)

1.1 c/parallel SHARED LIBRARY — cccl.c.parallel.so

状态: 不能直接移植

12 个算法全部依赖 NVRTC JIT 编译。每个 .cu 通过 nvrtc_translation_unit 生成源码,-arch=sm_XX 编译,cuLibraryLoadData 加载。

算法 源文件 行数 NVRTC 依赖 移植方案
reduce reduce.cu 783 nvrtc × 30 AOT: 直接调用 cub::DeviceReduce with corex
scan scan.cu 943 nvrtc × 25 AOT: cub::DeviceScan
radix_sort radix_sort.cu 947 nvrtc × 24 AOT: cub::DeviceRadixSort
merge_sort merge_sort.cu 763 nvrtc × 25 AOT: cub::DeviceMergeSort
transform transform.cu 1014 nvrtc × 38 AOT: cub::DeviceTransform
select_if three_way_partition.cu 697 nvrtc × 29 AOT: cub::DeviceSelect
histogram histogram.cu 858 nvrtc × 18 AOT: cub::DeviceHistogram
segmented_reduce segmented_reduce.cu 655 nvrtc × 26 AOT: cub::DeviceSegmentedReduce
segmented_sort segmented_sort.cu 1306 nvrtc × 40 AOT: cub::DeviceSegmentedSort
binary_search binary_search.cu 547 nvrtc × 8 AOT: cub::DeviceBinarySearch
unique_by_key unique_by_key.cu 768 nvrtc × 19 AOT: cub::DeviceUniqueByKey
for for.cu 426 nvrtc × 15 AOT: cub::DeviceFor

移植策略: 不搬 c/parallel而是直接用 CUB header-only API 写 AOT .cu 文件,用 corex clang 编译成 .so。每个算法 = 一组固定类型特化。

1.2 c/parallel.v2 SHARED LIBRARY

状态: 不能直接移植 (依赖 hostjit/libnvcc)

v2 用嵌入式 clang 做 JIT不用 nvrtc。理论上可以用 corex clang 替换 libnvcc 的 clang但改造量大。

1.3 CUB block/warp/thread 原语 (header-only)

状态: 可直接使用

类别 文件数 说明
block primitives 25 .cuh BlockReduce, BlockScan, BlockSort, BlockLoad, BlockStore 等
warp primitives 17 .cuh WarpReduce, WarpScan, WarpSort 等
thread primitives 8 .cuh ThreadReduce, ThreadScan, ThreadSort 等
agent implementations 26 .cuh 每个 device algorithm 的 kernel 实现
dispatch kernels 17 .cuh kernel launch 模板
tuning policies 27 .cuh SM-specific 参数选择 (需适配 ivcore10)

移植策略: #include <cub/block/block_reduce.cuh> 直接在 corex .cu 中使用。tuning policy 需要为 ivcore10 写新的参数表。

1.4 CUB/Thrust benchmarks + examples

类别 数量 移植状态
CUB benchmarks 82 需适配 ivcore10 编译
CUB examples 18 需适配 ivcore10 编译
Thrust examples 60 需适配 ivcore10 编译
Thrust benchmarks 75 需适配 ivcore10 编译
cudax examples 68 依赖 cudax runtime暂不移植
libcudacxx benchmarks 62 需适配 ivcore10 编译

2. NVIDIA/CUTLASS (7,787 files)

2.1 核心 GEMM 库 (header-only)

状态: ⚠️ 部分可移植

SM 架构 文件数 BI-V100 兼容
SM70 (Volta SIMT) ~20 需验证 ivcore10 兼容性
SM75 (Turing) ~30 ⚠️ 部分 (SIMT mode)
SM80 (Ampere Tensor) ~200 需要 HMMA
SM90 (Hopper) ~300
SM100/120 (Blackwell) ~200

2.2 Grouped GEMM (MoE 核心)

Example 文件 SM 要求 移植状态
24_gemm_grouped gemm_grouped.cu SM70+ SIMT 可移植
57_hopper_grouped_gemm SM90
64_ada_fp8_gemm_grouped SM89
92_blackwell_moe_gemm SM100

移植策略: example 24 (SIMT grouped GEMM) 是唯一能在 BI-V100 跑的。搬过来,接口适配到 xllm group_gemm。

2.3 编译目标汇总

类别 数量
Example executables 164 .cu
Test executables 862 .cu
Include headers 785
SM70 兼容子集 ~20 examples + ~50 tests

3. Dao-AILab/flash-attention (606 .cu files)

3.1 flash_attn_2_cuda.so

状态: 不能直接移植 (SM80+ Tensor Core)

所有 kernel 使用 cute::MMA_Atom<SM80_16x8x16_F16F16F16F16_TN> — 依赖 Ampere Tensor Core。

Kernel 类别 .cu 数量 SM 要求
SM80 fwd 48 Tensor Core
SM80 bwd 24 Tensor Core
SM80 fwd_split 48 Tensor Core
SM80 fwd_split_align 42 Tensor Core
Hopper (SM90+) 453

3.2 可用的算法模板

文件 行数 价值
flash_fwd_kernel.h 1301 attention 算法流程 (Q×K softmax V)
softmax.h 189 online softmax 实现
kernel_traits.h 344 SMEM/register 分配策略
mask.h 214 causal mask 实现
rotary.h 153 RoPE in-kernel 实现

移植策略: 不搬 .cu kernel依赖 Tensor Core搬算法模板头文件基于 CUB block primitives 重写 SIMT attention kernel for ivcore10。或者直接用 ixformer base image 的 ixinfer_flash_attn_unpad_with_block_tables(已编译好)。

3.3 Layer Norm kernels

类别 .cu 数量 SM 要求
ln_fwd 14 (256~8192 width) 纯 SIMT
ln_bwd 14 纯 SIMT
ln_parallel_fwd 14 纯 SIMT
ln_parallel_bwd 14 纯 SIMT

移植策略: Layer norm kernel 是纯 SIMT不依赖 Tensor Core。可直接用 corex clang 编译。hidden_size=5120 对应 ln_fwd_5120.cu。


4. jd-opensource/xllm (全平台推理引擎)

4.1 ILU (BI-V100) 专用代码

状态: 已在项目中 (upstream_ref + ex_engine)

文件 行数 作用 状态
ilu/activation.cpp 32 silu_and_mul → ixformer::infer 已搬
ilu/norm.cpp 50 rms_norm → ixformer::infer 已搬
ilu/rope.cpp 31 rotary_embedding → ixformer::infer 已搬
ilu/attention.cpp 162 prefill + decode → ixformer::infer 已搬
ilu/fused_moe.cpp 99 topk + expand + combine → ixformer::infer 已搬
ilu/group_gemm.cpp 39 group_gemm → ixformer::infer 已搬
ilu/matmul.cpp 73 linear → ixformer::infer 已搬
ilu/ixformer.h 147 完整 ixformer::infer API 声明 已搬
ilu/ilu_ops_api.h 153 xllm kernel 层 API 已搬
ilu/utils.h 62 工具函数 已搬
layers/ilu/fused_moe.cpp 806 完整 MoE 7步 pipeline 已搬
layers/ilu/attention.cpp 189 attention layer 封装 已搬

4.2 CUDA kernels (SM-agnostic)

文件 行数 SM 限制 状态
activation.cu 188 已搬
norm.cu 600 需 cub::BlockReduce 已搬
rope.cu 258 已搬
block_copy.cu 209 已搬
reshape_paged_cache.cu 101 已搬
moe/moe_topk_softmax_kernels.cuh 867 已搬
moe/moe_compute_index.cu 155 已搬
moe/moe_combine.cu 105 已搬
moe/moe_fused_topk.cu 59 已搬

4.3 CUDA kernels (SM80+ only)

文件 行数 SM 限制 移植方案
fused_qknorm_rope.cu 473 SM80 (__CUDA_ARCH__ >= 800) 拆出 SIMT 部分
fp8_quant_utils.cuh 239 SM89 (__CUDA_ARCH__ >= 890) 不适用
cutlass_w8a8/*.cu ~400 SM90/100/120 不适用

4.4 其他平台代码 (参考用)

平台 kernel 文件数 layer 文件数 说明
DCU (AMD ROCm) 14 12 GDN 完整实现可参考
MLU (Cambricon) 21 35 GDN + MoE 最完整
MUSA (Moore Threads) 14 12 GDN kernel 最近代
NPU (Ascend) 30+ 30+ tilelang GDN 可参考

5. fla-org/flash-linear-attention (349 Triton kernels)

5.1 GatedDeltaNet 专用 kernels

状态: ⚠️ 需验证 Triton 在 BI-V100 上是否工作

文件 @triton.jit 行数 说明
chunk_fwd.py 2 428 GDN 前向 chunk (核心)
fused_recurrent.py 2 478 GDN decode (单步)
wy_fast.py 4 351 WY representation
gate.py 6 344 gate cumsum

5.2 通用 Triton 算子

目录 kernel 数 说明
common/ 36 chunk_h, chunk_o, fused_recurrent (所有 linear attention 共享)
utils/ 44 cumsum, softmax, matmul, solve_tril
gated_delta_rule/ 14 GDN 专用
gdn2/ 12 GDN v2 (新版)
kda/ 24 Key-dependent attention
delta_rule/ 12 原始 delta rule
gla/ 18 Gated Linear Attention

5.3 Backend 分发

Backend SM 要求 说明
FlashQLA SM90+ 不适用 BI-V100
Triton (default) 任意 GPU ⚠️ 需验证 corex Triton
triton_ascend Ascend NPU 不适用

移植优先级

P0 — 直接可编译 (corex clang ivcore10)

  1. xllm CUDA kernels (9 files, 2542 lines) — 已搬,需在真机编译测试
  2. CUB block/warp headers — 已在 cccl_upstream/,可直接 #include
  3. ix_moe_bridge.so + ix_attn_bridge.so — pybind11 桥接 ixformer::infer

P1 — 需适配后可编 (改 SM 架构 + tuning 参数)

  1. FlashAttention layer_norm kernels (56 .cu) — 纯 SIMT改编译 flag
  2. CUTLASS SM70 SIMT GEMM (example 24 grouped_gemm) — MoE group_gemm 替代方案
  3. CUB tuning policies (27 .cuh) — 为 ivcore10 写参数表 (SMEM=48KB, SM=16)

P2 — 需要重写 (算法可用,硬件指令不兼容)

  1. FlashAttention fwd kernel — 基于算法模板用 CUB BlockReduce 重写 SIMT 版
  2. CCCL c/parallel AOT 版 — 绕过 NVRTC直接用 CUB device API + corex 编译
  3. FLA Triton GDN kernels — 需验证 Triton on corex 可行性

P3 — 不移植

  1. FlashAttention SM80+ Tensor Core kernels
  2. CUTLASS SM80/90/100/120 kernels
  3. CCCL nvrtc/nvjitlink 依赖代码
  4. xllm fp8/cutlass_w8a8 quantization kernels