Block会并行运行吗?

时间:2014-11-26 02:54:30

标签: cuda gpu

内核将在2D数组中搜索数字 5

例如,Array的尺寸为10x10 ,总元素= 10000,如果我除以4,则范围= 2500;

BlockIdx.x = 0然后它将搜索(i = 0; i <2500; i ++)

BlockIdx.x = 1然后它将搜索(i = 2500; i <5000; i ++)

BlockIdx.x = 2然后它将搜索(i = 5000; i&lt; 7500; i ++)

BlockIdx.x = 3然后它将搜索(i = 7500; i&lt; 10000; i ++)

Kernel Code 
__global__
void psearch(int *d_array)
{

int blockID = blockIdx.x;
int condition = (blockID+1)*(Range)

for(int i = blockID*(Range) ; i < condition; i++)
{
    if(d_array[i] == 5)
    {
        d_array[1] = 1992;
    }
}

如下所示,我用4块1个线程调用内核。

Kernel Call
psearch<<<4,1>>>(d_array);

我的问题是内核调用将调用每个1个线程的4个块,所以我可以说所有块都是并行运行的,因此并行搜索数组。

设备名称= Quadro FX 1800M

这个程序是出于学习目的,所以如果我犯了任何错误,如果有人能指出它们,我会很高兴的。

感谢您的考虑。

1 个答案:

答案 0 :(得分:1)

是的,它将并行运行,但与卡实际上能够做的相比,它会表现不佳。为了获得全部力量,你应该至少拥有:

  • 与流多处理器一样多的块(对于您的特定型号应该没问题)
  • 块中至少有32个线程,最好超过128个。

当您拥有数百或数千个线程时,GPU可以获得性能。对于GPU来说,4非常非常小。