2

我目前正在从事一个涉及大量数据位级操作的项目,例如比较、屏蔽和移位。本质上,我需要在 8kbytes - 32kbytes 长的比特流中搜索 20 - 40bytes 长的比特模式。

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

4

1 回答 1

1

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

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

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

start
01111111 
00111111 
...
00000001

end
10000000
11000000
...
11111110

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

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

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

于 2012-07-04T16:36:24.403 回答