我運行了一些更新了浮點數組的CUDA代碼。我有一個包裝函數,就像這個問題How can I compile CUDA code then link it to a C++ project?中討論的函數一樣。在cuda代碼中循環
在我的CUDA功能創建一個像這樣循環......
int tid = threadIdx.x;
for(int i=0;i<X;i++)
{
//code here
}
現在的問題是,如果X等於100的值,一切都運行得很好,但如果X等於到1000000,我的向量沒有得到更新(幾乎就好像for循環內的代碼沒有得到執行)
現在在wrapper函數中,如果我在for循環中調用CUDA函數,它仍然可以正常工作,(但由於某種原因,比僅僅在CPU上完成相同處理的速度慢得多)...
for(int i=0;i<1000000;i++)
{
update<<<NumObjects,1>>>(dev_a, NumObjects);
}
有誰知道爲什麼我可以在包裝函數中循環一百萬次,但不是簡單地調用一次CUDA「更新」函數,然後在該函數內啓動一個百萬的循環?
[CUDA限制似乎已達到可能的重複,但是是什麼限制?](http://stackoverflow.com/questions/6913206/cuda-limit-seems-to-be-reached-but-what-限制是) – talonmies 2012-03-01 14:23:37
當你使用X的較大值時,你的內核是否可以執行?你在做錯誤檢查嗎?你應該。 X是編譯時常量還是#define?如果是這樣,你是否使用適當的編譯器標誌來檢查共享和常量內存要求以及寄存器數量?那麼您是否使用NVIDIA CUDA佔用率計算器來研究其後果?許多事情可能會持續下去。 – Patrick87 2012-03-01 16:35:48
謝謝帕特里克...... X只是一個變量,用於本文的目的。我通常用「1000000」等硬編碼值替換「x」。Talonmies有一個好帖子,我相信這就是爲什麼...... – Matthew 2012-03-01 21:35:29