如何利用块/网格和线程/块?

时间:2011-07-17 21:11:30

标签: optimization parallel-processing cuda

我正在尝试使用CUDA加速这个数据库搜索应用程序,我正在努力与CUDA并行运行核心算法。

在一次测试中,我在大小为5000的数字序列上并行运行算法,每个网格有500个块,每个块有100个线程,并且返回时间大约为500毫秒。

然后我将数字序列的大小增加到8192,每个网格有128个块,每个块有64个线程,不知怎的回来,运行算法的结果为350毫秒。

这表明使用了多少块和线程以及它们如何相关会影响性能。

我的问题是如何确定块/网格和线程/块的数量?

下面我从标准设备查询程序中获取了GPU规格: enter image description here

1 个答案:

答案 0 :(得分:2)

您应该测试它,因为它取决于您的特定内核。您必须要做的一件事是使每个块的线程数成为warp中线程数的倍数。之后,您可以瞄准每个SM的高占用率,但这并不总是提高性能的代名词。有人表示,有时较低的入住率可以提供更好的表现。内存绑定内核通常从更高的占用率中获益更多,以隐藏内存延迟。计算绑定内核不是那么多。测试各种配置是最好的选择。