不同的线程块定义

时间:2013-01-27 12:53:31

标签: matlab cuda gpu

我正在使用matlab中的PTX调用CUDA内核,在VS 2010上测试代码时是这样的:

int TPB = 256; 
int BPG = (Nx + TPB -1 ) / TPB;
dim3 blk(TPB,TPB,1);
dim3 grid(BPG ,BPG,1);
grad<<< grid,blk>>>(dev_y,dev_x,dev_b,dev_t,Nx,Ny);

尝试在matlab中使用相同的配置

TPB = 16; 
BPG = floor((Nx + TPB -1 ) / TPB);
grad = parallel.gpu.CUDAKernel('reg.ptx','reg.cu','grad');
grad.ThreadBlockSize=[TPB TPB 1];
grad.GridSize = [BPG BPG];

知道每个块超过512个线程,这是我的TESLA C1060的允许数量,我是对的

Invalid size input to kernel ThreadBlockSize. You must provide a vector of up to 3 positive   integers whose product is <= 512. The maximum value in each dimension is: [512,512,64].

任何解释为什么它在VS 2010上正确运行而没有像MATLAB中发生的那样的错误?

1 个答案:

答案 0 :(得分:0)

在grad&lt;&lt;&gt;&gt;&gt;之后,C ++代码段没有检查错误。 MATLAB包装器有额外的错误检查。启动配置超出范围。在&lt;&lt;&lt;&gt;&gt;&gt;之后调用cudaGetLastError将报告启动配置错误。