CUDA Julia示例编译报错:__device__函数调用__host__函数不被允许
CUDA Julia集编译错误原因分析
错误核心原因
报错calling a __host__ function("cuComplex::cuComplex(float, float)") from a __device__ function("cuComplex::operator *") is not allowed的本质是CUDA执行空间的调用规则冲突:
- CUDA默认未标注的函数属于
__host__类型,只能在CPU主机端执行 - 被
__device__修饰的函数只能在GPU设备端执行 - 严格禁止从
__device__函数中调用__host__函数
你的代码中,cuComplex的构造函数没有添加任何执行空间修饰符,默认是__host__函数,但在被__device__修饰的operator*和operator+中,都通过return cuComplex(...)调用了这个构造函数,违反了跨空间调用的规则,因此触发编译错误。
修复方案
将cuComplex的构造函数显式标记为__device__(如果只需要在GPU端使用),或者同时标记为__host__ __device__(兼顾CPU和GPU端实例化):
修改后的构造函数代码:
__host__ __device__ cuComplex( float a, float b ) : r(a), i(b) {}
这样构造函数就能同时在主机端和设备端执行,operator*、operator+以及julia函数中的实例化操作都能合法调用它。
内容的提问来源于stack exchange,提问作者christian ortiz
相关产品推荐
相关产品推荐

