这个问题缺乏细节。所以,我决定创建另一个问题,而不是编辑这个问题。新问题在这里:我可以并行化我的代码还是不值得?
我有一个在 CUDA 中运行的程序,其中一段代码在一个循环中运行(序列化,如下所示)。这段代码是在包含地址和/或 NULL 指针的数组中进行搜索。所有线程都在下面执行此代码。
while (i < n) {
if (array[i] != NULL) {
return array[i];
}
i++;
}
return NULL;
n
数组的大小在哪里array
,在共享内存中。我只对不同于 NULL(第一次匹配)的第一个地址感兴趣。
整个代码(我只贴了一段,整个代码很大)运行速度很快,但代码的“心脏”(即重复次数较多的部分)是序列化的,如您所见。我想知道我是否可以用一些优化算法并行化这部分(搜索)。
就像我说的,程序已经在 CUDA 中(以及设备中的数组),所以它不会有从主机到设备的内存传输,反之亦然。
我的问题是:n
不大。很难超过 8。
我试图并行化它,但我的“新”代码比上面的代码花费了更多的时间。
我正在研究减少和最小操作,但我已经检查过它在n
大时有用。
那么,有什么窍门吗?我可以有效地并行化它,即以低开销吗?