在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