1

最近、GPU はコンピューティングにおいて非常に強力であるとよく耳にしますが、ある疑問が頭に浮かびます: GPU を使用するよりも CPU を使用したほうが速く解決できる問題はありますか?

いくつか例を教えてください。

4

3 に答える 3

5

「GPU はコンピューティングにおいて非常に強力です!」はい!

しかし、GPU は「より高速な CPU」ではありません。次のように要約できます。

  • CPU には強力なコアがいくつかあります (GPU と比較すると強力です)。
  • GPUには弱いコアがたくさんあります(CPUと比較すると弱い)。

ここでは GPU をGPGPUと見なしています。グラフィックス パイプラインのため、実際には少し異なりますが、考え方は同じです。シェーダーは、ここで説明するように機能します。

GPU は基本的に「並列化可能なアルゴリズム」を計算するように設計されています。これは、決定されたタスクを解決するために、数百、数千、さらには数百万のスレッドを開く必要があるアルゴリズムを意味します!

いくつかの非常にダミーの例:

非並列アルゴリズム (CPU):

unsigned int X = 0;
unsigned int data[ 10000 ];

fillDataFromSomeWhereWithSomething( data );

for ( unsigned int i = 0; i < 10000; i++ )
{
    X += data[ i ] * data[ i ];
}

ループのサイクルごとXに、 の前の値に依存しますX。したがって、これについてスレッドを開くことは意味がありません! 流れは一つだけ!これには CPU を使用する必要があります。

並列化可能なアルゴリズム (GPU):

int X[ 10000 ] = { 0 };
unsigned int data[ 10000 ];

fillDataFromSomeWhereWithSomething( data );

for ( unsigned int i = 0; i < 10000; i++ )
{
    X[ i ] = data[ i ] * data[ i ];
}

ここで、 のすべての値についてX[ ? ]、結果は単純に のみに依存しiます。サイクルは独立しています!したがって、10000 をループする代わりに、GPU を使用して 10000 スレッドを開き、すべてのサイクルを並行して実行できます。

使い方?

dataCPU から GPUに入力をアップロードします。次に、カーネルと呼ばれる小さなプログラムで 10000 スレッドを実行するように GPU に指示します。すべてのカーネルには独自の出力があります。カーネルは以下のみを計算します:

X_i = data[ i ] * data[ i ];

( GPU内) は(CPU 上) にX_i関連しています。X[ i ]GPU が 10000 スレッドすべてを終了したら。結果は CPU にダウンロードされ、アレイX[]は目的の結果で更新されます。

重要:もちろん、これはダミーの例です。実際、特にこのアルゴリズムは非常に単純であるため、10000 を超えるループは実際には CPU にとって大した問題ではありません。GPU へのデータのアップロード/GPU からのデータのダウンロードには時間がかかります。だから価値があるに違いない!

答え

このすべてについて考えています。CPU と GPU にどちらのアルゴリズムが適しているかは、自分で調べることができます。もちろん、GPU との間のデータのダウンロード/アップロードのバランスを常に意識する必要があります。

于 2013-11-01T15:49:52.073 に答える
0

GPU は通常、GPU との間でデータを転送するためのコストを関連付けています。ほとんどデータ転送を伴わないと説明できる問題がいくつかありますが、多くの問題は GPU に転送する必要があるデータ セットから始まり、転送する必要がある結果がいくつかある場合が常にあります。

したがって、非常に小さな問題は GPU では意味がありません。

int C = A + B;

これがCA、およびBで行う必要がある唯一の作業である場合、データを転送するためのオーバーヘッドとコストが GPU を使用する利点を上回るため、GPU を使用する利点はほとんどありません (そして、この例には固有の並列処理がないためです)。

単一の GPU スレッドは最新の CPU スレッドよりも速くコードを実行しないため、ほとんどの場合、純粋にシーケンシャルな問題には GPU を使用してもメリットがありません。ただし、ほとんどの純粋な順次アルゴリズムは並列方式で再キャストでき、複数の独立したデータ要素で動作している場合は順次アルゴリズムでさえ単純に並列化できるため、ここで包括的に説明することはより困難です。

于 2013-11-01T14:18:02.420 に答える