ヘテロジニアス コンピューティング -- CUDA アーキテクチャ

1.CUDAとは何ですか?

  グラフィックス カード メーカーである NVIDIA が発売したコンピューティング プラットフォームである CUDA (Compute Unified Device Architecture) は、GPU が複雑なコンピューティングの問題を解決できるようにする汎用の並列コンピューティング アーキテクチャです。率直に言うと、ニューラル ネットワークや画像処理アルゴリズムなど、CPU 上でハードに実行されるプログラムを GPU を使用して並列化できます。GPU と高い並列処理により、これらのアルゴリズムの実行速度を大幅に向上させることができます。

2. CPU および CUDA アーキテクチャ

  プロセッサの構造には、遅延とスループットという 2 つの指標を頻繁に考慮する必要があります。レイテンシは命令の発行から最終結果が返されるまでの時間間隔を指し、スループットは単位時間当たりに処理される命令の数を指します。CPU の主なタスクは計算と制御であるため、設計コンセプトは遅延指向のカーネルとなり、GPU の主なタスクは並列処理であるため、設計コンセプトはスループット指向のカーネルになります。

(1)CPU

  CPU (Central Processing Unit) 中央処理装置は非常に大規模な集積回路であり、主な論理構造には、制御ユニット Control、演算ユニット ALU、キャッシュ メモリ (Cache) とデータ (Data)、制御と状態が含まれます。それらの間の接続を実現するのがバス (Bus) です。簡単に言うと、コンピューティングユニット、コントロールユニット、ストレージユニットです。
アーキテクチャ図は次のとおりです。
ここに画像の説明を挿入

  CPU はノイマン型アーキテクチャに従っており、その核心はプログラム/データを保存し、それらをシリアルに実行することです。したがって、CPU アーキテクチャは、ごく一部しか占有しない演算ユニット (ALU) に比べて、記憶ユニット (Cache) と制御ユニット (Control) を配置するために多くのスペースを必要とするため、CPU は大規模な影響を受けます。並列コンピューティング: 制限はロジック制御の処理に比較的優れています。CPU は大量のデータを並列計算する能力を実現できませんが、GPU は実現できます。

(2)GPU

  GPU (Graphics Processing Unit)、つまりグラフィックス プロセッサは、多数の計算ユニットで構成される大規模な並列計算アーキテクチャであり、従来は CPU から分離されて画像並列計算データを処理するように設計されています。同時に複数の並列コンピューティング タスクを設計します。GPU には基本的なコンピューティング ユニット、コントロール ユニット、ストレージ ユニットも含まれていますが、GPU のアーキテクチャは CPU のアーキテクチャとは大きく異なり、そのアーキテクチャ図を以下に示します。
ここに画像の説明を挿入

  CPU と比較すると、CPU チップ スペースの ALU は 20% 未満ですが、GPU チップ スペースの 80% 以上が ALU です。つまり、GPU にはデータの並列処理用にさらに多くの ALU が搭載されています。これが、GPU が強力な並列コンピューティング機能を備えている理由です。
ハードウェア アーキテクチャ分析の観点から見ると、CPU と GPU は非常によく似ています。どちらもメモリ、キャッシュ、ALU、CU を備え、多くのコアを備えています。非常に複雑な制御ロジック、分岐予測、アウトオブオーダー実行、マルチ-ステージパイプラインタスクなど GPU のコアは比較的軽量であり、並列プログラムのスループットを重視して、単純な制御ロジックでデータ並列タスクを最適化するために使用されます。
  簡単に言うと、CPU のコアはロジックとシリアル プログラムに重点を置いて複数の複雑なタスクを完了するのが得意で、GPU のコアは計算と並列処理に重点を置いて単純な制御ロジックでタスクを完了するのが得意です。

3. ヘテロジニアスコンピューティング

  いわゆるヘテロジニアス コンピューティングとは、CPU + GPU、または CPU + 他のデバイス (FPGA など) の協調コンピューティングを指します。通常、プログラムは CPU 上で計算されます。ただし、大量のデータを計算する必要がある場合、CPU は無力であるように見えます。では、計算速度の問題を解決する他の方法を見つけることはできないでしょうか? それがヘテロジニアスコンピューティングです。たとえば、CPU (中央処理装置)、GPU (グラフィック処理装置)、さらには APU (CPU と GPU の融合) などのコンピューティング デバイスの計算能力を使用して、システムの速度を向上させることができます。異種システムがますます一般的になり、そのような環境をサポートするコンピューティングへの注目が高まっています。
  現在、最も広く使用されているヘテロジニアス コンピューティングは、GPU を使用して高速化することです。すべての主流の GPU は統一されたアーキテクチャ ユニットを使用しており、プログラマブル ストリーム プロセッサの強力なラインナップを備えているため、単精度浮動小数点演算の点では CPU に大きく遅れをとっています。図に示すように、これは CPU+GPU ヘテロジニアス コンピューティングの概略図であり、GPU が主に並列コンピューティングを担当します。
ここに画像の説明を挿入

4. OpenCLとCUDAの関係

  NVIDIA の CUDA アーキテクチャは KHRONOS の OpenCL と競合しません。両者の関係は API と実行アーキテクチャの関係です。簡単な例を挙げると、私たちがよく知っている X86 アーキテクチャは CPU アーキテクチャであり、さまざまなプログラミング言語、 : アセンブリ言語、C 言語、およびその他の低レベルまたは高レベル言語は、X86 コンピューティング アーキテクチャに基づくプログラミング環境にすぎません。さて、CUDA アーキテクチャと OpenCL の関係は、X86 とプログラミング言語の関係と同じです。
  CUDA アーキテクチャは OpenCL のオペレーティング プラットフォームの 1 つであるため、誰が誰を置き換えるかは関係ありません。OpenCL は、CUDA アーキテクチャ用のプログラム可能な API を提供するだけです。
ここに画像の説明を挿入
原文参照
[1] http://t.zoukankan.com/liuyufei-p-13259264.html

おすすめ

転載: blog.csdn.net/qq_44924694/article/details/126202388