为何CUDA中__device__函数会生成CPU汇编代码?
为什么CUDA中标记为__device__的函数会生成CPU汇编代码?
编译器的编译逻辑与 fallback 机制
NVCC编译器基于主机端编译器(如GCC、Clang)搭建,编译时会同时处理主机和设备端代码。如果__device__函数没有被任何__global__核函数调用,编译器找不到它在设备端的使用场景,就会默认生成CPU汇编作为 fallback 版本。调试与兼容性的备份实现
即使只标记了__device__,部分编译器版本会自动生成该函数的主机端备份,方便开发者在CPU环境下做模拟调试,不用每次都依赖GPU设备。像示例里的简单函数foo,逻辑完全可以在CPU上等价执行,编译器很容易生成对应的CPU汇编。编译配置的影响
如果没有明确指定仅编译设备端代码(比如加上--device-c这类参数),NVCC会同时输出主机和设备端的编译产物,平台会把CPU汇编部分展示出来。
内容的提问来源于stack exchange,提问作者ggg
相关产品推荐
相关产品推荐

