4

私は数値積分にCUDAを使用している数学者です。私の理解では、各Nvidiaストリーミングマルチプロセッサには8つのCUDAコアがあります。したがって、私には、ブロックごとに8つを超えるスレッドを使用するメリットはないように思われます。ただし、コードを実行すると、ブロックあたり8スレッドではなく、ブロックあたり32スレッドを使用することでパフォーマンスが大幅に向上します。

また、12ブロック以上を使用すると大幅なゲインが得られることに気付きました(私のカードにはストリーミングマルチプロセッサが12個しかないにもかかわらず)。

これには理由がありますか?

4

3 に答える 3

8

talonmiesとchaohuangはコメントで良い情報を提供しているので、それを調べる必要があります(なぜこれらが答えではないのかわかりませんが、それが彼らの呼びかけです)。いずれにせよ、私はあなたが考慮していないかもしれない何かを説明するために省略された部分的な答えを提供します。

8つの制御スレッドと8つのプロセッサーがあるとしましょう。8つのスレッドすべてのすべての命令が1サイクルのみのオンチップ命令である場合、8つのスレッドすべてがサイクルで終了します(スレッドあたりの合計命令数nを想定)。n

nここで、制御の各スレッドが命令で構成されているとしましょう。rこれらの一部はオフチップメモリ​​命令であり、たとえば、完了するまでに100サイクルかかります。これらの8つのスレッドは[(1 - r) + 100r]n、完了するまでにサイクルがかかります。の場合r=0.1、これは前のケースの約11倍です。

ここで、16個のスレッドがあるとしましょう。遅い操作で8スレッドの最初のバッチがブロックされると、他のスレッドが実行できます。オンチップ命令を実行でき、オフチップ命令を開始できます。したがって2[(1 - r) + 100r]n、すべてのスレッドを完了するためにサイクルを必要とする代わりに、必要なのは。より少しだけである可能性があります[(1 - r) + 100r]n。基本的に、待機中のスレッドを他のスレッドとオーバーラップさせる余地があるため、無料でスレッドを追加できます。

これがGPUモデルの大きな強みです。長いレイテンシーを克服するための大規模な並列処理です。少しの作業を行うには長い時間がかかりますが、それ以上の作業を行うのにそれほど時間はかかりません。r占有率(レイテンシーを隠す準備ができている(スレッド内の)作業量に関連する)は、算術強度(上記の式に関連する)が高い場合のピークパフォーマンスにとってそれほど重要ではないことに注意してください。CUDA Occupancy Calculatorをいじって、さまざまなシナリオで説明した効果を確認することができます。

于 2012-07-01T23:07:47.277 に答える
3

簡単な答えは、レイテンシーの隠蔽です。

作業するコアと同じ数の作業ユニット(スレッドとブロック)しかなく、実行が完了するまでに数百クロックサイクルを必要とするメモリ操作にヒットした場合、GPUは他に作業するものがないため、コアはアイドル状態になりますメモリ操作が完了するまで。それは計算サイクルを浪費しています。

作業を行うためのコアよりも多くの作業単位を提供する場合、作業単位の1つが長待ち時間のメモリ操作にヒットすると、ハードウェアスケジューラは、他の作業単位をコアにスワップして、コアは、長時間のメモリ操作が完了する間、生産的な作業を行うために忙しくなります。スレッドまたはブロックが過剰になると、待ち時間の長いメモリ操作が混在している場合に、すべての計算サイクルを使用する機会が増えます。

于 2012-07-02T17:50:15.217 に答える
2

GPUに隠れているメモリレイテンシには基本的に2つの方法があります。

  1. 占有率の増加。これは、メモリの待ち時間を隠すために必要なスレッドよりも多くのスレッドがあることを意味します。
  2. スレッドごとの独立した操作の増加。これは、必要な並列処理でこれらのコアを占有します。

多数の要素を計算するために、この一連のコンピューター命令を検討してください。

a = b + c;
d = a + c;

2番目の命令は、最初の命令の結果が完了するのを待っているため、停止します。

8つのスレッドのみを使用する場合、これらのスレッドは待機しており、GPUコアはアイドリングしています。ただし、スレッドがさらにある場合、GPUは、現在のワープが待機している間に、他の要素の計算が計算されるようにスケジュールすることができます。そのため、スレッドの数を増やすと、パフォーマンスが向上します。CPUコアをより効率的に利用しています=)

これがお役に立てば幸いです〜

于 2012-07-24T02:42:24.037 に答える