Tested on real machine (cc-b2042074, BI-V100, IX-ML 3.2.3):
_moe_C.topk_softmax() → SUCCESS, correct output
Two fixes proven on hardware:
1. cuda_compat.h: WARP_SIZE=64 (BI-V100 warp is 64, not 32)
2. topk_softmax_kernels.cu: cub/block/block_reduce.cuh instead of cub/cub.cuh
(cub.cuh pulls radix_sort which has WARP_SIZE conflict)
Key finding: ixformer SDK on this base image does NOT have topk_softmax.
The ixformer::infer namespace from xllm's ixformer.h is for newer SDK.
We MUST compile our own _moe_C kernel — which now works.
Build flags (clang 16, ivcore10):
CUDA: -O3 -cl-fast-relaxed-math (NOT --use_fast_math)
C++: -O2 -std=c++17
Dockerfile simplified: 3 steps (was 6)
_custom_ops.py: _moe_C as Priority 0, in-place vllm API