我最多可以在多少位上有效地执行按位运算?

On how many bits can I efficiently perform bitwise operations at most?

提供现代硬件,我想知道我可以有效地(例如在 1 CPU 周期内)执行按位运算的位数组的最大大小是多少。例如对于 64 位处理器,我假设答案只是 64。这是真的吗?我还能在 GPU 或一些奇特的硬件上获得多少?如果我想构建一个简单的按位或运算的 ASIC,我能走多远?

1325 MHz 的 RX550 可以以每秒 893 千兆整数的速率对整数进行按位运算。这意味着每秒 28.5 太比特。将其除以时钟频率,

21581 bits per cycle(这个 GPU 只有 512 个核心,每个做 32 位整数计算意味着 32*512=16384 bits per cycle 但也有浮点单元,这一定是用来模拟整数的每个周期达到 21.6 kbit 的操作,也许还有一些其他未知单元也在工作(例如 64 位内核帮助任何按位操作))

但当然总是有比 CPU 更高的延迟,如果数据需要通过 pci-e 桥接,这将下降到 4GB/s,这意味着每秒 32 GB。这比 1 个核心 CPU 慢。每位完成多少计算很重要。如果它只有 1 个操作,那么发送到 GPU 不会有太大帮助。如果它的每比特50+操作,你应该将它发送到GPU或FPGA。

测试内核(opencl):

__kernel void bitwise(__global int16 * data)
{ 
    int16 pData=data[get_global_id(0)];
    int16 pData2=pData&&1234123;
    for(int i=0;i<25;i++)
    {    
        pData|=(pData^55 && pData^120);
        pData2|=(pData2^55 && pData2^120);
    }
    data[get_global_id(0)]=pData&pData2;
}

测试缓冲区是一个 128M 整数数组。