根据我的2D数据阵列安排线程时遇到了一些麻烦。
这是一个紧凑的数组,其中每个整数包含32位值[1000110001000000010000000000010]
表示事务,我需要逐行计数(我使用整数而不是位向量/位集)。数组的维度为1000*3125
。每行包含1万位值。
我需要计算每行设置为1的总位数,即。每行3125列。我应该如何安排线程/循环以获得最佳性能?
答案 0 :(得分:3)
您可以使用standard parallel reduction approach。您将在矩阵的每一行中进行一次平行缩减。唯一的区别是每个线程需要获取一个32位值并首先计算设置位数。
使用__popc()
intrinsic计算设置位很容易,它返回32位参数中设置的位数。
对于并行缩小部分,如果您正在寻找最快的性能,请使用CUB而不是自己编写。