在一个 .cu 文件中,我已经尝试在全局范围内(即不在函数中)执行以下操作:
如何在设备上定义C++常量/常表达式,如果可能的话?
注意1:由于美观原因以及实际情况中表达式更加复杂并涉及内部数据类型(不仅仅是double),所以#define不可行。因此,在每个CUDA线程中每次调用构造函数将会太昂贵。
注意2:我对__constant__的性能表示怀疑,因为它不是编译时常量,而更像使用cudaMemcpyToSymbol写入的变量。
__device__ static const double cdInf = HUGE_VAL / 4;
出现了nvcc错误:
error : dynamic initialization is not supported for __device__, __constant__ and __shared__ variables.
如何在设备上定义C++常量/常表达式,如果可能的话?
注意1:由于美观原因以及实际情况中表达式更加复杂并涉及内部数据类型(不仅仅是double),所以#define不可行。因此,在每个CUDA线程中每次调用构造函数将会太昂贵。
注意2:我对__constant__的性能表示怀疑,因为它不是编译时常量,而更像使用cudaMemcpyToSymbol写入的变量。
__constant__
和#define
上。难道没有一种方法可以像我的代码片段所示那样在设备上使用C++常量吗? - Serge Rogatch#DEFINE
和const
之外,还有其他替代方案。如果你的回答是“不需要”,那么我会在回答中提供几个替代方案... - einpoklum