【问题标题】:Advice for bit level manipulation位级操作的建议
【发布时间】:2012-07-05 02:56:10
【问题描述】:

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

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

【问题讨论】:

    标签: optimization cuda bit-manipulation gpu


    【解决方案1】:

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

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

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

    start
    01111111 
    00111111 
    ...
    00000001
    
    end
    10000000
    11000000
    ...
    11111110
    

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-05
      • 1970-01-01
      • 2019-04-15
      • 2010-12-06
      • 2011-01-04
      • 2016-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多