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

Optimization 如何利用块/网格和线程/块?,optimization,parallel-processing,cuda,Optimization,Parallel Processing,Cuda,我正在尝试用CUDA加速这个数据库搜索应用程序,我正在与CUDA并行运行一个核心算法 在一个测试中,我在一个大小为5000的数字序列上并行运行该算法,每个网格有500个块,每个块有100个线程,然后以大约500毫秒的运行时间返回 然后我将数字序列的大小增加到8192,每个网格有128个块,每个块有64个线程,然后以某种方式返回,结果是350毫秒来运行算法 这将表明使用了多少块和线程以及它们之间的关系会影响性能 我的问题是如何确定块/网格和线程/块的数量 下面是我从标准设备查询程序获得的GPU规格

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

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

然后我将数字序列的大小增加到8192,每个网格有128个块,每个块有64个线程,然后以某种方式返回,结果是350毫秒来运行算法

这将表明使用了多少块和线程以及它们之间的关系会影响性能

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

下面是我从标准设备查询程序获得的GPU规格:
您应该测试它,因为它取决于您的特定内核。你必须做的一件事是使每个块的线程数是扭曲中线程数的倍数。之后,您可以将目标定为每个SM的高占用率,但这并不总是更高性能的同义词。结果表明,有时较低的占用率可以提供更好的性能。内存绑定内核通常从更高的占用率中获益更多,以隐藏内存延迟。计算绑定内核并不多。测试各种配置是最好的选择。

此外,请确保每个多处理器的工作量平衡——因此,使线程块数大约为多处理器数的倍数。这对于较小的网格更为重要。对于非常大的网格,每个多处理器一个块的差异并不重要。@seljuq70 fp32操作上费米体系结构的正确比率是4.5,ECC关闭,3.6,ECC打开。有人测试过它,或者NVIDIA在某处说了它,我错过了它?很高兴知道这两种方法。@fabrizioM特斯拉C1060怎么样,我也在研究它?还有,你从哪里得到的信息?