私はヘテロジニアスコンピューティングの可能性を理論的に示しています。 CPUまたはGPUのいずれかでシリアルに実行される単一スレッド(非並列化可能)の有効性を比較する必要があります。シリアルCPUとGPUコード
GPU上で1つのスレッドを実行するのは意味がないので、奇妙な質問ですが、開発中のヒューリスティックにガイドライン比を実際に使用できます。
私はそれが簡単にテストできると知っていますが、私はCUDAとOpenCLのどちらでも実用的な経験はありません。私は急いでいます。
私はヘテロジニアスコンピューティングの可能性を理論的に示しています。 CPUまたはGPUのいずれかでシリアルに実行される単一スレッド(非並列化可能)の有効性を比較する必要があります。シリアルCPUとGPUコード
GPU上で1つのスレッドを実行するのは意味がないので、奇妙な質問ですが、開発中のヒューリスティックにガイドライン比を実際に使用できます。
私はそれが簡単にテストできると知っていますが、私はCUDAとOpenCLのどちらでも実用的な経験はありません。私は急いでいます。
GPU実行単位は順番になりがちであり(少なくともnVidia GPUの場合)、通常、単一スレッドのコンテキストでは4クロックにつき1命令しか得られません。これを現代のスーパスカラCPUと比較すると、クロックあたり1命令以上のスループットを得ることができ、CPUはクロックベースで4以上のファクターで勝ちます。 CPUのクロック周波数はGPUのクロックよりもはるかに高い傾向にあるので、CPUをGPUに比べて最大12倍以上にすると、クロック速度から3倍になる可能性があります。
NVidia Tesla GPUは、4ops /クロックでいくつかの操作を実行します。
GPUのメモリ帯域幅は、一般にCPU < - >メインRAMよりも速く、2d構造のためのいくつかの巧妙なキャッシング機能があります。
しかし、一般的にありません - あなたがする同じことを行う必要がない場合は> 256個の項目は、単一のGPUコアはCPUのそれよりも大きさも弱いです、プラスデータ転送のオーバーヘッドがありますCPU
を使用しています。 GPUが並列コードで勝利するのは、100sのコアで同時に実行されるスレッドの数です。この例を考えてみます。
for(int i=0; i<1000; i++)
a[i]= /*some value*/
スレッドを1つしか使用しない場合は、1000回反復する必要があります。 CPUは間違いなくGPUより非常に高速です。しかし、GPUの恩恵を受けるために、1000スレッドを作成し、それぞれの値をメモリaに対応する位置に挿入します。これにより、CPUよりもパフォーマンスが向上する可能性があります。
GPUが動作するクロックレート(1-2GHz)も考慮する必要があります。これはCPUに比べて非常に低いです。コードが並列でない場合、GPUの性能は実際には選択肢にはなりません。