对位级操作的建议

时间:2012-07-04 15:22:53

标签: optimization cuda bit-manipulation gpu

我目前正在开发一个项目,涉及对比较,屏蔽和移位等数据的大量位操作。基本上我需要搜索8kbytes之间的比特流 - 长度为32kbytes,用于20到40bytes之间的位模式。

是否有人知道在CUDA中优化此类操作的一般资源?

1 个答案:

答案 0 :(得分:1)

关于如何使用CUDA进行文本搜索,至少有几个问题。也就是说,在长字节串中查找短字节串的实例。这与您想要做的类似。也就是说,字节串搜索非常类似于位串搜索,其中字节串中的位数只能是8的倍数,并且算法仅检查每8位的匹配。在SO上搜索CUDA字符串搜索或匹配,看看是否可以找到它们。

我不知道有任何一般资源,但我会尝试这样的事情:

首先准备每个搜索位串的8个版本。每个位串移位不同的位数。还要准备开始和结束面具:

start
01111111 
00111111 
...
00000001

end
10000000
11000000
...
11111110

然后,基本上,使用不同的位串和掩码执行字节串搜索。

如果您使用的计算能力> = 2.0,则将移位的位串存储在全局内存中。开始和结束掩码可能只是程序中的常量。

然后,对于每个字节位置,启动8个线程,每个线程检查8个移位位串的不同版本与长位串(现在将其视为字节串)。在每个块中,启动足够的线程来检查,例如,32个字节,这样每个块的线程总数变为32 * 8 = 256.L1缓存应该能够保存每个块的移位位串,所以你的表现很好。