CUDA编程:按行逐位计数

时间:2014-06-05 12:17:14

标签: cuda bit-manipulation

根据我的2D数据阵列安排线程时遇到了一些麻烦。

这是一个紧凑的数组,其中每个整数包含32位值[1000110001000000010000000000010]表示事务,我需要逐行计数(我使用整数而不是位向量/位集)。数组的维度为1000*3125。每行包含1万位值。

我需要计算每行设置为1的总位数,即。每行3125列。我应该如何安排线程/循环以获得最佳性能?

1 个答案:

答案 0 :(得分:3)

您可以使用standard parallel reduction approach。您将在矩阵的每一行中进行一次平行缩减。唯一的区别是每个线程需要获取一个32位值并首先计算设置位数。

使用__popc() intrinsic计算设置位很容易,它返回32位参数中设置的位数。

对于并行缩小部分,如果您正在寻找最快的性能,请使用CUB而不是自己编写。