在CUDA中使用常量的最佳方式是哪种?在CUDA中使用常量
一种方式是在不断的内存来定义常量,如:
// CUDA global constants
__constant__ int M;
int main(void)
{
...
cudaMemcpyToSymbol("M", &M, sizeof(M));
...
}
的备选方法是使用C预处理:
#define M = ...
我认为定义与C预处理器常数速度要快得多。那么在CUDA设备上使用恒定内存的好处是什么?被在编译时已知
编译时已知的常量应该使用预处理器宏(即'#define')来定义。在其他情况下,'__constant__' [变量](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#constant)可能是CUDA程序员用来优化访问代码的一个选项不改变的计算变量。请注意,使用''M''来引用一个符号在cuda 5中不再有效。 – 2013-04-20 12:43:28
知道这两种可能性之间的运行时间差异是多么有趣。我是currenlty在一些cfd代码上工作,我想将参数作为选项传递给程序,因此有必要使用第一种方法。另一方面,如果我使用预处理器宏,这是不可能的。 – jrsm 2013-04-20 14:13:50
既然你的第二个例子不生成任何类型的机器代码,这不是一个明智的问题。您需要提出实际的运行时使用情况,以便对此问题有任何意义。对于将单个标量立即值初始加载到变量或寄存器中,第二种方法将始终更快。 – 2013-04-20 14:14:27