使用 CUDA 13.4 时,Windows 编译失败:缺少 /Zc:preprocessor、/std:c++17 限定 (此外没有 sm_121 gencode)
作者: tuananhlfc创建于 2026年9月1日更新于 2026年9月17日
顿! 我试图在Windows上建立2.8.4的源头,并击中一些故障,全部在设置.py的Windows分支中. 它们只是构建配置——不需要内核,CUTLASS或主机码更改. 我把它们都修好了 可以打开公关 README说Windows"可能的工作从v2.3.2开始. 但是Windows编译仍然需要更多的测试",并邀请人们打开一个问题,所以在这里.
环境:Windows 11 ARM64,MSVC 14.51(ARM64主机与目标),CUDA 13.4,火炬2.15,CPython 3.13和3.14, sm 121 (GB10).
三个错误, 全部在构建配置 而不是内核:
**1. 没有sm 121' gencode.**cuda archs ()' 默认为;80;90;100;110;120''和 add cuda gencodes ()' 没有`121' 分支,因此没有为这个GPU发射任何东西。
**2. CUDA 13.x的CCCL头拒绝MSVC的传统预处理器. ** " .cu " 每站一次 这里:
cccl/cuda/std/ ccl/预处理器.h(20):致命错误 C1189:#error: MSVC/cl.exe with
传统的预处理器被使用.通过 " /Zc:预处理器 " 来 cl.exeWindows分支已经通过/Zc: cplus',只是没有/Zc:预处理器'。
3. `/std:c++17'被钉住,火炬2.15的枪头需要C++20:
c10/ util/StringUtil.h(171):出错 C7555:需要使用指定的初始化器,地点:
最小 “/std: c++20”
c10/ util/ 侵入 ptr.h( 775): 出错 C2039:"强- 命令":不是"std"的成员.(“src/softmax.h(76)”中还有“M LOG2E”未定义,只包含MSVC)
- 提供`USE MATH DEFINES ' 。 )
可能比ARM64角度更重要的一件事:只有(1)其实是 架构特异性。 (2) 和 (3) 他们似乎用同样的 CUDA 击出 Windows x64 和 火炬版本同样硬.
我会用这些打开公关 除非你觉得方法有问题 建筑经过了对FP32 SDPA参考物的正确性检查, 密集和花纹,前向和后向.
内容来源: Dao-AILab/flash-attention