我正在测试一个简单内核的最大线程数。我发现线程总数不能超过4096。代码如下:
#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;
}
我的测试环境:Tesla M2050 上的 CUDA 4.2.9。代码是用
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 内存操作用于阻止代码,以便显示内核的输出。