0

現代的なハードウェアを提供していますが、私は効率的に(例えば1CPUサイクルで)perfromビット単位の操作が可能なビット配列の最大サイズを知りたいと思います。たとえば、64ビットプロセッサの場合、私は答えが64であると仮定します。これは本当ですか? GPUやエキゾチックなハードウェアをどれだけ得ることができますか?単純にビット単位でASICを構築したいのですが、どこまで得ることができますか?多くのビットで効率よくビット単位の操作を効率的に実行できますか?

答えて

1

1325 MHzでのRX550は、1秒あたり893ギガの整数でビット演算を整数で行うことができます。これは28.5テラビット/秒を意味します。これをクロック周波数に分割して、

サイクルあたり21581ビット(このGPUには512コアしかなく、それぞれ32ビット整数計算を実行する32×512 = 16384ビット/サイクルですが、浮動小数点ユニットもあります。サイクルごとに21.6キロビットに達するために整数演算をエミュレートするために使用されているかもしれませんが、他の未知の単位もあります(ビット単位の演算を助ける64ビットコアなど)。

しかし、 pci-eブリッジを介してデータを取得する必要がある場合、これは4GB /秒に低下します。これは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整数配列です。

関連する問題