提供现代硬件,我想知道我可以有效地(例如在1个CPU周期内)执行按位操作的位阵列的最大大小是多少。例如对于64位处理器,我认为答案只是64.这是真的吗?我可以在GPU或者一些奇特的硬件上获得多少?如果我想构建一个简单按位的ASIC,或者我能走多远?
答案 0 :(得分:1)
1325 MHz的RX550可以以每秒893千兆整数的速率对整数进行逐位运算。这意味着每秒28.5万亿比特。将其除以时钟频率,
每个周期21581位(此GPU中只有512个内核,每个执行32位整数计算意味着每个周期32 * 512 = 16384位,但也有浮点单位,必须使用它来模拟整数运算每个周期达到21.6 kbit,也许还有一些其他未知单元也在工作(例如64位内核有助于任何按位操作))
但是当然总是存在比CPU更高的延迟,如果需要通过pci-e桥接数据,这将降至4GB / s,这意味着每秒32千兆位。这比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整数数组。