Parallel processing 我最多可以有效地执行多少位的逐位操作?

Parallel processing 我最多可以有效地执行多少位的逐位操作?,parallel-processing,bit-manipulation,hardware-acceleration,Parallel Processing,Bit Manipulation,Hardware Acceleration,如果提供当代硬件,我想知道我可以有效地(例如在1个CPU周期内)执行逐位操作的位阵列的最大大小是多少。例如,对于64位处理器,我假设答案是64。这是真的吗?我能在GPU或者一些奇异的硬件上得到多少?如果我想构造一个简单的按位或按位运算的ASIC,我能走多远?1325 MHz的RX550可以以每秒893千兆整数的速率对整数进行按位运算。这意味着每秒28.5兆比特。将其除以时钟频率 21581位/周期此GPU中只有512个核,每个核进行32位整数计算意味着32*512=16384位/周期,但也有浮点

如果提供当代硬件,我想知道我可以有效地(例如在1个CPU周期内)执行逐位操作的位阵列的最大大小是多少。例如,对于64位处理器,我假设答案是64。这是真的吗?我能在GPU或者一些奇异的硬件上得到多少?如果我想构造一个简单的按位或按位运算的ASIC,我能走多远?

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

21581位/周期此GPU中只有512个核,每个核进行32位整数计算意味着32*512=16384位/周期,但也有浮点单位,必须用于模拟整数运算以达到21.6 kbit/周期,也许还有其他一些未知的单元在工作,比如64位内核可以帮助进行任何位操作

但当然,总有比CPU更高的延迟,若需要通过pci-e网桥获取数据,这将降至4GB/s,即每秒32G位。这比1个核心CPU慢。每一位完成多少计算很重要。如果它只是一个操作,那么发送到GPU将不会有多大帮助。如果它的每一位操作数超过50次,则应将其发送到GPU或FPGA

测试内核铅笔:

__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整数数组