有没有一种有效的方法来优化我的序列化代码?

2024-05-06

这个问题缺乏细节。因此,我决定创建另一个问题而不是编辑这个问题。新问题在这里:我可以并行化我的代码吗?还是不值得? https://stackoverflow.com/questions/17937438/can-i-parallelize-my-code-or-it-is-not-worth

我有一个在 CUDA 中运行的程序,其中一段代码在循环内运行(序列化,如下所示)。这段代码是在包含地址和/或 NULL 指针的数组中进行搜索。所有线程都执行下面的代码。

while (i < n) {
    if (array[i] != NULL) {
        return array[i];
    }
    i++;
}
return NULL;

Where n的大小是array并且数组位于共享内存中。我只对与 NULL(第一个匹配)不同的第一个地址感兴趣。

整个代码(我只发布了一段,整个代码很大)运行得很快,但是代码的“核心”(即重复较多的部分)是序列化的,如您所见。我想知道是否可以使用某些优化算法并行化这部分(搜索)。

就像我说的,程序已经在 CUDA 中(以及设备中的数组),因此它不会有从主机到设备的内存传输,反之亦然。

我的问题是:n不大。很难大于 8。

我尝试对其进行并行化,但我的“新”代码比上面的代码花费了更多时间。

我正在研究归约和最小运算,但我已经检查过它在以下情况下很有用:n is big.

那么,有什么建议吗?我可以有效地并行化它,即以较低的开销吗?


简单来说,GPGPU 代码的主要限制因素之一是内存管理。在大多数计算机中,将内存复制到设备 (GPU) 是一个缓慢的过程。

如图所示http://www.ncsa.illinois.edu/~kindr/papers/ppac09_paper.pdf http://www.ncsa.illinois.edu/~kindr/papers/ppac09_paper.pdf:

“获得有效的关键要求 GPU 子例程库的加速是最小化 主机和 GPU 之间的 I/O。”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有没有一种有效的方法来优化我的序列化代码? 的相关文章

随机推荐