0

CPUとGPUの違いについての私の理解は、GPUは汎用プロセッサではないため、ビデオカードに10個のGPUが含まれている場合、各GPUは実際に同じプログラムポインタを共有し、GPUの並列処理を最適化するには、各GPUが実際に同じコードを実行しています。

各GPUは物理的に並列で実行されているため、同期は同じカードで問題になりません。したがって、すべてが同時に完了する必要があります。

私の質問は、これが複数のカードでどのように機能するかということです。それらが動作する速度では、ハードウェアは実行時間にわずかな違いをもたらし、あるカードの1つのGPUでの計算が、別のカードの別のGPUでの同じ計算よりも速くまたは遅く終了する可能性がありますか?

ありがとう

4

2 に答える 2

3

各GPUは物理的に並列で実行されているため、同期は同じカードで問題になりません。したがって、すべてが同時に完了する必要があります。

本当じゃない。たとえば、メモリアクセスの待ち時間の違いにより、GPU上のさまざまなスレッドがさまざまな時間に完了する場合があります。そのため、OpenCLにはコマンドなどの同期プリミティブがありますbarrier。スレッドが正確に並行して実行されているとは決して想定できません。

同じことが複数のGPUにも当てはまります。それらが同期しているという保証はないため、作業を明示的に同期するには、clFinishなどのAPI呼び出しに依存する必要があります。

于 2012-04-26T18:27:25.680 に答える
2

GPUでスレッドがどのように機能するかについて混乱するかもしれません。最初に複数のGPUの問題に対処します。複数のGPUがプログラムポインタを共有することは決してないため、同時にカーネルを完成させることはほとんどありません。

単一のGPUでは、同じコンピューティングユニット(またはNVIDIAの用語ではSM)で実行され、同じワープ/波面の一部であるスレッドのみが同期して実行されることが保証されます。これを実際に当てにすることはできませんが、一部のデバイスでは、コンパイラがそれが当てはまると判断できます(worgroupのサイズが64にハードコードされている限り、特に一部のAMDデバイスについて考えています)。

いずれにせよ、@ vocaroが指摘したように、ローカルメモリにバリアを使用する必要があるのはそのためです。強調すると、同じGPUでも、スレッドはデバイス全体で並列に実行されているわけではなく、各計算ユニット内でのみ実行されています。

于 2012-04-26T20:32:12.373 に答える