我正在測試簡單內核的最大線程數是多少。我發現線程總數不能超過4096。代碼如下:特斯拉M2050上CUDA內核的最大線程數
#include <stdio.h>
#define N 100
__global__ void test(){
printf("%d %d\n", blockIdx.x, threadIdx.x);
}
int main(void){
double *p;
size_t size=N*sizeof(double);
cudaMalloc(&p, size);
test<<<64,128>>>();
//test<<<64,128>>>();
cudaFree(p);
return 0;
}
我的測試環境:CUDA 4.2.9特斯拉M2050。代碼編譯爲
nvcc -arch=sm_20 test.cu
在檢查輸出是什麼時,我發現有些組合缺失。運行命令
./a.out|wc -l
我總是得到4096當我檢查CC2.0,我只能找到的x,y,z尺寸上(1024,1024,512)和最大塊數的最大數目每個塊的線程數爲1024.並且對內核的調用(<<<64,128>>>
或<<<128,64>>>
)都在限制之內。任何想法?
注意:CUDA內存操作在那裏阻塞代碼,以便顯示內核的輸出。
device printf documentation is [here](http://docs.nvidia.com/cuda/cuda-c-programming-guide/index.html#formatted-output)。 – 2013-04-09 05:01:22
感謝talonmies和羅伯特。 – user2196452 2013-04-09 05:17:42