web-dev-qa-db-ja.com

数百のプロセッサを搭載したGPUについて混乱

Udacityの並列プログラミングコースについて学び始めたばかりですが、すでに少し混乱しています。ここでこのビデオセグメントで: https://youtu.be/gbj0oauFFI8?t=52s

平均的なGPUには数千のALUと数百のプロセッサがあると言われています。 「数百のプロセッサ」の部分に混乱しています。なんでそんなに多いの?一つだけじゃないの…? GPUはグラフィックプロセッサユニットの略です。 GPUはCPUのようなものではなく、1つのプロセッサに数千のALUが含まれていますが、特定のタスクに完全に特化していますか?これらの「プロセッサ」はどのように機能しますか?

私が間違っている場合、各プロセッサにはおそらく約10個のALUがあると思います(10 *百個のCPU = 1000個のALUのため)?これを確認できるように表示できるレイアウトはありますか?

ありがとうございました。

7
Arrow

最新のグラフィックプロセッサは非常に複雑なデバイスであり、何千ものプロセッシングコアを持つことができます。 Nvidia GTX 97 たとえば、1664コアがあります。これらのコアは、連携して機能するバッチにグループ化されます。

Nvidiaカードの場合、コアは基盤となるアーキテクチャ( Kepler またはFermi)に応じて16または32のバッチにグループ化され、そのバッチの各コアは同じタスクを実行します。

ただし、バッチとコアの違いは重要です。バッチ内の各コアは同じタスクを実行する必要がありますが、そのデータセットは分離できるためです。

中央処理装置は大きく、大規模な意思決定とフロー制御が可能な高度に一般化された処理装置であるため、コア数はわずかです。グラフィックカードは、大量の制御およびスイッチングロジックを避け、膨大な数のタスクを並行して実行する機能を優先します。

それを証明するために写真を持っていることを主張する場合、下の画像( GTX 660Ti Direct CU II TOPレビュー から)は、ほぼ類似していて、それぞれ数百のコアを含む5つの緑色の領域を示しています1344個のアクティブコアが、15個の機能ブロックであると私に見えるものに分割されています。

enter image description here

よく見ると、各ブロックの側面に4セットの制御ロジックがあるように見えます。これは、表示されている15個の大きなブロックのそれぞれに4つのSMXユニットがあることを示しています。

これにより、15 * 4の処理ブロック(60)がそれぞれ32コアで合計1920コアになります。これらのバッチは、誤動作しているか、単に異なるパフォーマンスグループへの分離を容易にするために無効になります。これにより、正しい数のアクティブコアが得られます。

バッチがどのように一緒にマップされるかについての良い情報源は、Stack Overflowにあります: https://stackoverflow.com/questions/10460742/how-do-cuda-blocks-warps-threads-map-onto-cuda-コア

7
Mokubai

CPUは [〜#〜] sisd [〜#〜] 、GPUは [〜#〜] simd [〜#〜] です。

SISDは、Single Instruction、SingleDataの頭字語です。 CPUは、シーケンシャル操作の実行に優れています。これを実行し、そこに移動し、別の操作を実行し、両方を追加し、デバイスに書き込み、応答を読み取ります。それらは、1つまたは2つの値を取り、1つの値を返すほとんどの単純な操作を実行します。

SIMDは単一命令、複数データです。同じ操作が複数のデータセットで同時に実行されます。たとえば、128個の値Xを取ります1-バツ128、128個の値を取りますY1-Y128、対応する値をペアで乗算し、128の結果を返します。 SISDプロセッサは、一度に2つの数値しか乗算できないため、128命令(+メモリの読み取り/書き込み)を実行する必要があります。 SIMDプロセッサは、これを数ステップで実行します。レジスタに128個の数値しか収まらない場合は、1回でも実行できます。

SISD CPUは、ほとんどがシーケンシャルであるため、日常のコンピューティングに適していますが、グラフィックの処理、ビデオレンダリング、パスワードのクラッキング、ビットコインのマイニングなど、同様の方法で大量のデータを処理する必要があるタスクがいくつかあります。GPUを使用すると、すべてのデータを同じ方法で処理する必要がある場合は、コンピューティング。

さて、それは純粋な理論です。現実の世界では、通常のCPUはいくつかのSIMD命令( [〜#〜] sse [〜#〜] )を提供するため、通常のCPUで複数のデータをより効率的に実行できます。同時に、GPU内のすべてのALUはバッチにグループ化されているため、同じように動作する必要はありません( モクバイの答え を参照)。したがって、CPUは純粋にSISDではなく、GPUは純粋にSIMDではありません。

計算にGPUを使用することはいつ有益ですか?計算が本当に、本当に大規模に並列化できる場合。 GPUのメモリへの入力の書き込みには時間がかかり、結果の読み取りにも時間がかかることを考慮する必要があります。 GPUを離れる前に多くの計算を行う処理パイプラインを構築できると、最大のパフォーマンス向上を得ることができます。

11
gronostaj

CPUには1、2、4、6、8コア以上があります。同じように、GPUには数百から数千のGPUがあります。そのため、トップビデオカードのフロート処理能力はクアッドコアCPUの約80倍です。

違いは、それらがタイプ固有でクラスター化されていることです(上記の回答を参照)。タイプ固有とは、一般的な計算ではなく特定の計算を行うように設計されていることを意味します。標準ソフトウェアにCPUコアの代わりにGPUコアを使用させることは非常に困難です。ソフトウェアがこれほど優れているとしたら、CPUは役に立たなくなります。残念ながら、ビデオカードの真の処理能力に近づくことができるのは非常に特殊なものだけです。一部のハッシュ処理ソフトウェアはそれを行うことができます。

2
Overmind

グラフィカルデータは並列処理に最適です。 1024x1024ピクセルの画像を16x16のブロックに分割し、各コアにそのような小さなブロックを処理させます。結果をグループ化すると、結果は、これらのブロックを1つずつ処理する1つのプロセッサと同じです。

これが機能するための条件は、1つのコアの結果が他のコアの結果に影響を与えないこと、およびその逆であるということです。このようなものは、列Cのセルが列A + Bの値を合計するExcelシートでも機能する可能性があります。C1= A1 + B1、C2 = A2 + B2、および行1と2は互いに独立しています。

グラフィックデータ処理は非常に特殊なタスクであり、この種のタスク専用のプロセッサを設計できます。これは、ビットコインのマイニングなどの他のタスクにも使用できます。また、1つの大きなプロセッサを使用する代わりに、多数のコアを並べて使用することで、処理ユニットをより効率的にすることができるようです。より効率的とは、高速であるだけでなく、処理コアの20%のみが必要な場合に、残りをシャットダウンできるという利点もあります。これはエネルギー効率に優れています。

免責事項:上記の例は技術的に正しくない場合があります。原則を示すだけではありません。実際のデータ処理はもっと複雑になると思います。

2
SPRBRN

主な答えは、それらがより単純であるため、それらをたくさん詰め込むことができ、それらは1つのタスクを実行し、それは画面に断片を配置することでした。しかし、最近では、CPUのように本質的に一般的です。 cpusとgpusの主な理由は、cpuアーキテクチャがx86に基づいており、gpuのアーキテクチャがAMDGCNまたはNVIDIACUDAに基づいていることです。

読んでみてください http://www.anandtech.com/show/4455/amds-graphics-core-next-preview-AMD-architects-for-computehttp:// www。 anandtech.com/show/5699/nvidia-geforce-gtx-680-review/2

1
nwgat