如何理解“”一个块永远不会被多个MP分割。“?

时间:2012-09-24 18:38:22

标签: cuda

对于CUDA,我理解“一个块永远不会被多个MP分割。” (http://llpanorama.wordpress.com/2008/06/11/threads-and-blocks-and-grids-oh-my/)。

为了测试这个,我为内核分配了一个非常大的块大小:

__global__ void dummy()
{
}

int main()
{
        int N=21504*40000; //21504 is the total threads I found for my Tesla M2070
        dim3 grids(1,2);
        dim3 thres(N,N);
        dummy<<<grids,thres>>>();
        return 0;
}

但是,没有编译或运行时错误,也不确定发生了什么......

2 个答案:

答案 0 :(得分:2)

如果在虚拟&lt;&lt;&lt;&gt;&gt;&gt;之后添加cudaGetLastError()调用,你将得到一个CUDA启动失败错误(你可以使用cudaGetErrorString(err_code)将错误代码转换为字符串。)

答案 1 :(得分:0)

这些错误不是编译错误,您将在运行后遇到运行时错误。要理解这个句子,你应该了解这个架构。它被设计用于固定线程的通信,这些线程放置在一个MP(SM)的相同线程块通用共享存储器中。因此,他们都居住在同一个SM中,并且不会被派遣。