2011-12-08 8 views
0

私はヘテロジニアスコンピューティングの可能性を理論的に示しています。 CPUまたはGPUのいずれかでシリアルに実行される単一スレッド(非並列化可能)の有効性を比較する必要があります。シリアルCPUとGPUコード

GPU上で1つのスレッドを実行するのは意味がないので、奇妙な質問ですが、開発中のヒューリスティックにガイドライン比を実際に使用できます。

私はそれが簡単にテストできると知っていますが、私はCUDAとOpenCLのどちらでも実用的な経験はありません。私は急いでいます。

答えて

4

GPU実行単位は順番になりがちであり(少なくともnVidia GPUの場合)、通常、単一スレッドのコンテキストでは4クロックにつき1命令しか得られません。これを現代のスーパスカラCPUと比較すると、クロックあたり1命令以上のスループットを得ることができ、CPUはクロックベースで4以上のファクターで勝ちます。 CPUのクロック周波数はGPUのクロックよりもはるかに高い傾向にあるので、CPUをGPUに比べて最大12倍以上にすると、クロック速度から3倍になる可能性があります。

1

NVidia Tesla GPUは、4ops /クロックでいくつかの操作を実行します。
GPUのメモリ帯域幅は、一般にCPU < - >メインRAMよりも速く、2d構造のためのいくつかの巧妙なキャッシング機能があります。

しかし、一般的にありません - あなたがする同じことを行う必要がない場合は> 256個の項目は、単一のGPUコアはCPUのそれよりも大きさも弱いです、プラスデータ転送のオーバーヘッドがありますCPU

2

を使用しています。 GPUが並列コードで勝利するのは、100sのコアで同時に実行されるスレッドの数です。この例を考えてみます。

for(int i=0; i<1000; i++) 
    a[i]= /*some value*/ 

スレッドを1つしか使用しない場合は、1000回反復する必要があります。 CPUは間違いなくGPUより非常に高速です。しかし、GPUの恩恵を受けるために、1000スレッドを作成し、それぞれの値をメモリaに対応する位置に挿入します。これにより、CPUよりもパフォーマンスが向上する可能性があります。

1

GPUが動作するクロックレート(1-2GHz)も考慮する必要があります。これはCPUに比べて非常に低いです。コードが並列でない場合、GPUの性能は実際には選択肢にはなりません。

関連する問題