web-dev-qa-db-ja.com

より専門的なチップではなく、高性能の計算にGPUを使うのはなぜでしょうか。

私が理解したところでは、GPUは一般的なコンピューティングにGPUを使用するようになりました。なぜなら、GPUはコンピューティング能力の追加の供給源だからです。また、各操作のCPUとしては高速ではありませんが、コアが多数あるため、CPUよりも並列処理に適しています。あなたがすでにグラフィック処理のためのGPUを持っているコンピュータをすでに所有しているが、あなたがグラフィックを必要としない、そしてもう少し計算能力が欲しいなら、これは理にかなっている。しかし、私は人々がGPUを特に購入することで、グラフィックスを処理することを意図していないことを理解しています。私には、これは次の例えに似ているようです。

芝刈り機が必要ですが、芝刈り機は弱虫です。だから私は自分の寝室に置いている箱のファンからケージを取り外して刃を研ぎます。私はそれを私の芝刈り機にテープで固定しました、そして私はそれが適度にうまくいくとわかります。数年後、私は大規模な芝生手入れ業の購買担当者になりました。私は草刈り用具に費やすためにかなりの予算を持っています。芝刈り機を買う代わりに、たくさんのボックスファンを買います。繰り返しますが、それらは問題なく動作しますが、私は使用できなくなる余分な部品(ケージなど)の支払いをする必要があります。 (この例えのために、私達は芝刈り機と箱入りの扇風機が同じくらいかかると仮定しなければならない)

では、なぜGPUの処理能力を持ち、グラフィックのオーバーヘッドを持たないチップやデバイスの市場がないのでしょうか。いくつか考えられる説明があります。どれが正しいのでしょうか。

  • そのような代替手段は、GPUがすでに良い選択肢である場合には開発するには費用がかかりすぎるでしょう(芝刈り機は存在しません、なぜこの完璧な箱詰めファンを使わないのですか?).
  • 'G'がグラフィックスを意味するという事実は意図された用途のみを意味し、チップをグラフィックス処理に他の種類の作業よりもよく適合させることに努力が払われることを実際には意味しません。もう一方のように機能するように変更する必要はありません。
  • 現代のGPUは古代の前任者と同じ名前を持っていますが、最近ではハイエンドのものは特にグラフィックスを処理するようには設計されていません。
  • ほとんどすべての問題をグラフィック処理の言語に翻訳するのは簡単です(草の上に空気を吹き付けることで草を刈ることができます)。

編集:

私の質問は答えられましたが、いくつかのコメントと答えに基づいて、私は自分の質問を明確にすべきだと思います。私はなぜ誰もが自分自身の計算を買わないのか尋ねていません。明らかにそれはほとんどの場合高価すぎるでしょう。

私は、並列計算を迅速に実行できるデバイスに対する需要があるように思われることを単に観察しました。この目的のために設計された装置とは対照的に、なぜそのような最適な装置がグラフィック処理装置であると思われるのか疑問に思いました。

105
Alex S

それは本当にあなたのすべての説明の組み合わせです。より安くて簡単で、すでに存在していて、デザインは純粋なグラフィックから離れました。


最近のGPUは、主に ストリームプロセッサ とグラフィックハードウェア(およびビデオのエンコードとデコードなどの固定機能アクセラレータ)を追加したものと見なすことができます。 GPGPU 最近のプログラミングでは、この目的のために特別に設計されたAPI(OpenCL、Nvidia CUDA、AMD APP)が使用されています。

過去10、20年の間に、GPUは固定機能パイプライン(ほとんどグラフィックのみ)からプログラマブルパイプライン( シェーダ へと進化しました。付属のグラフィックスパイプラインなしでシェーダコアへの直接アクセスを提供するOpenCLのようなより近代的なAPIへの命令)。

残りのグラフィックビットはマイナーです。それらはカードのコストのほんの一部なので、それらを除外するのはそれほど大幅には安くないので、追加のデザインのコストが発生します。そのため、これは通常行われていません。最上位層を除いて、ほとんどのGPUと同等のコンピューティング指向のものはありません。これらはかなり高価です。

通常の「ゲーム」GPUは非常に一般的に使用されています。規模の経済性と比較的単純なことから、安価で使い始めるのが簡単になるからです。それはグラフィックプログラミングからGPGPUを使って他のプログラムを加速することへのかなり簡単な道です。他のオプションとは異なり、より新しくより高速の製品が入手可能になったため、ハードウェアのアップグレードも簡単です。


基本的に、選択肢は次のとおりです。

  • 分岐とシーケンシャルコードに最適な汎用CPU
  • 通常の "ゲーミング" GPU
  • 計算指向のGPU、例えば Nvidia TeslaRadeon Instinct これらはグラフィック出力をまったくサポートしていません。だから、GPUはちょっとした誤称です。ただし、それらは通常のGPUと同様のGPUコアを使用しており、OpenCL/CUDA/APPコードは多かれ少なかれ直接移植可能です。
  • FPGAは、まったく異なるプログラミングモデルを使用しており、非常にコストがかかる傾向があります。これは参入に対する重大な障壁が存在するところです。ワークロードによっては、GPUよりも必ずしも高速ではありません。
  • ASIC、カスタム設計回路(ハードウェア)これは非常に非常に高価で、極端な規模(少なくとも何千ものユニットについて話しています)でしか価値がなくなり、プログラムを変更する必要がなくなると確信している場合にだけです。それらは現実の世界ではほとんど実現可能ではありません。また、テクノロジが進歩するたびに、全体を再設計してテストする必要があります。CPUやGPUの場合のように新しいプロセッサを交換することはできません。
109
Bob

私のお気に入りのアナロジー:

  • CPU:ポリマスの天才。一度に1つか2つのことができますが、それらのことは非常に複雑になる可能性があります。
  • GPU:熟練度の低い労働者。それらのそれぞれはそれほど大きな問題をすることはできませんが、まとめて言えばたくさんのことをやり遂げることができます。あなたの質問には、はい、いくつかのグラフィックのオーバーヘッドがありますが、私はそれが限界だと思います。
  • ASIC/FPGA:会社です。あなたは、1トンの低技能労働者または2、3の天才、または低技能労働者と天才の組み合わせを雇うことができます。

何を使用するかは、コスト感度、タスクの並列化の程度、およびその他の要因によって異なります。市場がどのように機能してきたかにより、GPUは最も高度な並列アプリケーションに最適であり、CPUは電力と単価が最大の関心事である場合に最適な選択肢です。

直接あなたの質問に答えます:なぜASIC/FPGA上のGPUか。通常は費用がかかります。今日の高まっているGPUの価格でさえ、あなたのニーズを満たすためにASICを設計するよりもGPUを使う方が(一般的に)安いです。 @ user912264が指摘しているように、ASIC/FPGAに役立つ可能性のある特定のタスクがあります。あなたがユニークな仕事を持っていて、あなたが規模の恩恵を受けるならば、それはそれがASIC/FPGAを設計する価値があるかもしれません。実際、この目的のためにFPGAデザインをデザイン/購入/ライセンスすることができます。これは、例えば高品位テレビのピクセルに電力を供給するために行われます。

32

あなたのアナロジーは悪いです。同様に、あなたが大規模な芝生の手入れ業務のために機器を購入するとき、あなたは利用可能な良い芝刈り機があると仮定しますと仮定します。これはコンピューティングの世界ではそうではありません - GPUはすぐに利用できる最高のツールです。

特殊化されたチップの研究開発費と可能なパフォーマンスの向上は、それを作ることを正当化するには高すぎる可能性があります。

とは言っても、私はNvidiaが特に汎用コンピューティングのためにいくつかのGPUを出しているのを知っています - それらはビデオ出力を持っていませんでした。

10
jstbnfdsrtah

もちろん、エネルギー効率または計算速度のいずれかのために、特殊なチップを使用することができます。ビットコイン採掘の歴史をお話しましょう。

  • Bitcoinは新しく、オタクは彼らのCPUを使っている。
  • Bitcoinはやや新しい、スマートオタクが彼らのGPUを使っている。
  • ビットコインは(ちょっと)有名になりました、人々はFPGAを購入します。
  • Bitcoinは今や有名になり(2013年)、初心者でも効率的に採掘するためにASIC( "Application Specific Integrated Circuit")を購入します。
  • ブロックの報酬が(定期的に)低下し、古いASICでさえももう収益がありません。

そう、いいえ、特別な「巨大電卓」の代わりにGPUを使用する理由はありません。経済的なインセンティブが大きいほど、ハードウェアはより専門的になります。しかし、一度に何千も生産していないと、設計が非常に難しく、製造するのが不可能です。それがチップを設計することが実行可能でないならば、あなたは最も近いWalmartから それら のうちの1つを購入することができます。

TL; DRもちろん、もっと特殊なチップを使うこともできます。

9
MCCCS

あなたがあなたのたとえで説明するのはまさに起こったことです。扇風機をつかんで芝刈り機として使うことを試みるためにブレードを研ぎだしたように、研究者たちは「ちょっと、ここにはかなりいいマルチコアプロセッシングユニットがあるので、それを汎用計算に使ってみよう! ".

結果は良く、ボールは転がり始めました。 GPUは、最も要求の厳しい状況を支援するための汎用計算をサポートするために、グラフィック専用デバイスから採用されました。

とにかく私たちがコンピュータに期待する最も計算的に要求の厳しい操作はグラフィックスだからです。ほんの数年前のゲームと比較して、今日のゲームの外観が驚くほど進歩したことを見るのに十分なものです。これは、GPUの開発に多大な労力とお金が費やされたこと、そしてそれらがあるクラスの汎用計算を高速化するために使用できるという事実(つまり、非常に並列)が、彼らの人気に加わったことを意味します。

結論として、最初に説明したのが最も正確です。

  • そのような代替手段は、GPUがすでにすばらしい選択肢であるときに開発するには高すぎるでしょう。

GPUはすでにそこにあり、誰もがすぐに利用できるようになっています。

8
Mario Chapa

特に、GPUは「タスク並列処理」の意味での「コア」ではありません。ほとんどの場合、それは「データ並列処理」の形式です。 SIMDは「単一命令複数データ」です。これが意味することはあなたがこれをしないということです:

for parallel i in range(0,1024): c[i] = a[i] * b[i]

これは、1024個の命令ポインタがすべて異なる速度で進行する別々のタスクを実行していることを意味します。 SIMD、または「ベクトルコンピューティング」は、次のように、配列全体で一斉に命令を実行します。

c = a * b

「ループ」は、命令の外側ではなく、「*」および「=」の命令内にあります。上記では、1024個の要素すべてに対して同時に、それらすべてに対するSAME命令ポインタでこれを行います。 a、b、cに3つの巨大なレジスタがあるようなものです。 SIMDコードは非常に制約されており、過度に「分岐」していない問題に対してのみ有効に機能します。

現実的な場合では、これらのSIMD値は1024項目ほど大きくありません。 int32のギャングを束ねた変数を想像してください。あなたは乗算を考えて、実際の機械語命令として割り当てることができます。

int32_x64 c; int32_x64 b; int32_x64 a; c = b * a;

実際のGPUはSIMDよりも複雑ですが、それがそれらの本質です。これが、ランダムCPUアルゴリズムをGPUに投入して高速化を期待できない理由です。アルゴリズムが分岐する命令が多いほど、GPUには適していません。

5
Rob

ここに他の答えはかなり良いです。私は2セントも投げます。

CPUが非常に普及してきた1つの理由は、CPUが柔軟であることです。あなたは無限の様々なタスクのためにそれらを再プログラムすることができます。最近では、同じタスクを実行するためのカスタム回路を開発するよりも、小さなCPUやマイクロコントローラを何かに組み込んでその機能をプログラムする製品を製造している企業にとっては、安価で速いのです。

他のデバイスと同じデバイスを使用することで、同じデバイス(または類似のデバイス)を使用しているときの問題に対する既知の解決策を利用できます。プラットフォームが成熟するにつれて、ソリューションは進化し​​、非常に成熟し最適化されます。これらのデバイスをコーディングしている人々も専門知識を得て、彼らの技術に非常に精通しています。

GPUの代わりに、新しいデバイスタイプを最初から作成するのであれば、最も初期の採用者でも実際にそれを使用する方法を習得するのに数年かかることがあります。あなたのCPUにASICを付けた場合、どのようにしてそのデバイスへのオフロード計算を最適化しますか?

コンピュータアーキテクチャーのコミュニティは数年間このアイデアに溢れていました(明らかにそれは以前に人気がありましたが、最近ルネサンスを見ました)。これらの「アクセラレータ」(それらの用語)はさまざまな程度の再プログラム可能性を持っています。問題は、アクセラレータが対応できる問題の範囲をどの程度厳密に定義しているかということです。私はオペアンプ付きのアナログ回路を使って微分方程式を計算するアクセラレータを作っている人たちと話をしました。素晴らしいアイデアだが、非常に狭い範囲です。

加速器を使用した後は、経済的な力によって運命が決まります。市場の慣性は素晴らしい力です。何かが素晴らしいアイデアであっても、この新しいデバイスを使用するためにあなたの実用的な解決策をリファクタリングすることは経済的に実行可能ですか?多分そうでないかもしれません。

GPUは実際にはある種の問題には恐ろしいので、多くの人々/会社が他の種類のデバイスに取り組んでいます。しかし、GPUはすでにそのように定着しているので、それらのデバイスは経済的に実行可能になるでしょうか?私たちは見るでしょうね。

編集:私の答えを少し拡張して、今私はバスを降りている。

注意を要するケーススタディは、Intel Larrabeeプロジェクトです。それはソフトウェアでグラフィックスを行うことができる並列処理装置として始まりました。特殊なグラフィックハードウェアはありませんでした。私はそのプロジェクトに取り組んだ誰かと話しました、そして彼らがそれが失敗してキャンセルされたと言った主な理由は(恐ろしい内政を除いて)彼らがコンパイラにそれのための良いコードを生成させることができなかったからです。もちろん、それは実用的なコードを生成しました、しかしあなたの製品の全体的なポイントが最高のパフォーマンスであるならば、あなたはかなり最適なコードを生成するコンパイラを持っているほうが良いです。これは、新しいデバイスがハードウェアとソフトウェアの両方に深い専門知識を欠いていることが大きな問題であるという以前のコメントに戻ります。

Larrabeeデザインのいくつかの要素がXeon Phi/Intel MICに組み込まれました。この製品は実際にそれを市場に出しました。科学的および他のHPCタイプの計算の並列化に完全に焦点が当てられていました。今は商業的な失敗であるように見えます。私がIntelで話をしたもう一人の人は、彼らがただ価格/性能競争力がGPUと競合していなかったことを意味しました。

FPGAアクセラレータ用のコードを自動的に生成できるように、人々はFPGAの論理合成をコンパイラに統合しようとしました。彼らはそれほどうまくいきません。

アクセラレータにとって本当に肥沃な土壌、あるいはGPUに代わる他の場所であると思われる場所の1つがクラウドです。グーグル、アマゾン、マイクロソフトのようなこれらの大企業に存在する規模の経済は、価値のある代替計算スキームへの投資を行います。誰かがすでにグーグルのテンソル処理装置に言及した。マイクロソフトは、BingおよびAzureのインフラストラクチャ全体にFPGAおよびその他のものを用意しています。 Amazonと同じ物語。スケールが時間、お金、およびエンジニアの涙への投資を相殺できる場合、それは絶対に理にかなっています。

要約すると、特殊化は他の多くのもの(経済学、プラットフォームの成熟度、エンジニアリングの専門知識など)と相反します。スペシャライゼーションはパフォーマンスを大幅に向上させることができますが、それはあなたのデバイスが適用可能な範囲を狭めます。私の答えは、多くのマイナス面に焦点を当てていましたが、専門化にも多くのメリットがあります。それは絶対に追求され調査されるべきです、そして私が述べたように多くのグループがそれをかなり積極的に追求しています。

すみません、もう一度編集してください。私はあなたの最初の前提が間違っていると思います。私は、それが余分な計算能力の源を探すケースではなく、より多くの人々が機会を認めるケースであると信じています。グラフィックスプログラミングは非常に線形代数が多く、GPUは行列乗算やベクトル演算などの一般的な演算を効率的に実行するように設計されています。科学演算にも非常に一般的な演算。

GPUへの関心は、Intel/HP EPICプロジェクトによって約束された約束が非常に誇張されていることが認識されるようになったように始まりました(90年代後半から2000年代前半)。コンパイラの並列化に対する一般的な解決策はありませんでした。 「どこでもっと処理能力があるのか​​、GPUを試すことができる」というよりは、「並列計算に適したものがあるので、これをより一般的にプログラム可能にすることができる」と言った方がましだ。関係している人々の多くは科学計算のコミュニティにいました、彼らはすでに彼らがCrayかTeraマシン(Tera MTAに128のハードウェアスレッドを持っていた)で走ることができる並列Fortranコードを持っていました。おそらく両方向からの動きがありましたが、私はこの方向からのGPGPUの起源についての言及だけを聞いたことがあります。

5
NerdPirate

enter image description here

ASIC(カスタムシリコン)は非常に高速ですが、設計と製造には非常に費用がかかります。 ASICはかつては目的に特化したものでした、そしてCPUはコンピュータが「プログラムされる」ことを可能にしたアプローチの1つでした。初期のCPUは、現場でチップをプログラムすることによって、多大なコストをかけずにASICの能力を利用する能力を人々に与えました。このアプローチはSOが成功し、今使っている(非常に)速いコンピュータを生み出しました。

では、なぜGPUなのですか?

90年代半ば、3DFXは3Dレンダリングタスクが非常に特殊なので、カスタムのASICがCPUよりもはるかに優れたパフォーマンスを発揮することを認識していました。彼らは、CPUからこのコプロセッサに3Dレンダリングタスクをオフロードするコンピュータコプロセッサを作成しました。これを「GPU」と呼びました。競争と市場の要求により、この分野では、GPUがCPUよりもはるかに高速に計算を実行するようになったため、「なぜCPUではなくGPUを使用して数値を絞り込めないのですか」という疑問が生じました。 GPU製造業者はより多くのお金を稼ぐための需要と方法を見たので、彼らは開発者が彼らのハードウェアを使うことができるように彼らのプラットフォームを変え始めました。しかし、ハードウェアハードウェアは非常に目的固有のものであったため、GPUに要求できることには制限がありました。その理由についてはここでは説明しません。

それでは、なぜもっと目的別のシリコンがなかったのでしょうか。なぜJUSTグラフィックスなのか

2つの理由:1)価格。 GPUは良い市場を持っていて、それを正当化することができますが、それでも当時はそれは大きなリスクでした。 3DFXが利益を上げることができるかどうかは誰にもわかりませんでした(実際には不可能であり、機能しなくなりました)。今でも、GPU市場の規模を考えると、競合企業は3社しかありません。 2)CPUは、実際には命令拡張を含む「カスタムシリコン」のニーズを満たしていました。 MMXに戻って考えてください - これは実際には3DFXがスピードを増していたときにCPUのグラフィックを高速化しようとするIntelの試みでした。それ以来、x86の命令セットは、これらすべてのカスタム拡張機能を使用して非常に巨大になりました。これらの拡張機能の多くは(MMXのように)当時は意味を成していましたが、現在のプロセッサではほとんど自重です。ただし、それらを削除することはできません。既存のソフトウェアが破損するためです。それは実際にはARM - ARMのセールスポイントのひとつですが、命令セットが削除されています。命令拡張はそれほど多くありませんが、これによってシリコンが小さくなり、製造コストが安くなります。

カスタムシリコンのコストを下げることができれば、あなたはたくさんのお金を稼ぐことができるように私には思えます。誰もこれに取り組んでいませんか?

FPGAと呼ばれるフィールドプログラマブルゲートアレイという技術があり、それはコンピューティングの初期の頃から出回っています。それは本質的にあなたがソフトウェアを使って「現場で」デザインできるマイクロチップです。これは非常にクールなテクノロジですが、チップをプログラム可能にするために必要なすべての構造が大量のシリコンを占有し、チップをはるかに低いクロック速度で動作させます。あなたがチップ上に十分なシリコンを持っていて、そしてタスクを効果的に並列化することができるならば、FPGAはCPUより速いかもしれません。しかし、それらはあなたがそれらに置くことができる論理量に制限があります。最も高価なFPGA以外はすべて、初期のBitcoinマイニングではGPUよりも低速でしたが、それらのASIC対応品では、GPUマイニングの収益性が事実上なくなりました。他の暗号通貨では、並列化できない特定のアルゴリズムが使用されているため、FPGAとASICは、コストを正当化するのにCPUやGPUよりも優れていません。

FPGAの最大の限界はシリコンサイズです - チップにどれだけのロジックを収めることができますか? 2つ目はクロック速度です。これは、ホットスポット、リーク、およびクロストークなどの要素をFPGAで最適化するのが難しいためです。より新しい製造方法はこれらの問題を最小にしました、そして Intelはアルテラと協力してFPGA を提供します。サーバーのコプロセッサとしてだから、ある意味では来ています。

FPGAはCPUやGPUに取って代わるのですか?

おそらくいつでもそうではないでしょう。最新のCPUとGPUはMASSIVEで、熱的性能と電気的性能を重視して調整されたシリコンです。カスタムASICと同じ方法でFPGAを最適化することはできません。画期的な技術を除けば、CPUはFPGAとGPUコプロセッサを搭載したコンピュータの中核を維持するでしょう。

4
Robear

確かに、高速コンピューティングのための専門のボードがあります。ザイリンクスは、FPGAを使用した178枚のPCI-eボードの リスト を用意しています。これらのボードの約3分の1は、1つまたは複数の強力なFPGAを備えた「ナンバークリンチャ」です。チップと多くのオンボードDDRメモリ。高性能コンピューティングタスクを目的とした高性能DSPボード( の例 )もあります。

GPUボードの人気は、より幅広い顧客グループを目指すことからきていると思います。 Nvidia CUDAで遊ぶために特別なハードウェアに投資する必要はないので、特別なハードウェアを必要とするタスクがある時までに、Nvidia GPUはあなたがそれらをどのようにプログラムするかをすでに知っているという点で競争力があります。

3

高性能計算をどのように定義するかによって、あなたの質問に対する答えは変わると思います。

一般に、高性能計算は計算時間に関連しています。その場合は、 高性能コンピューティングクラスター のリンクを共有したいです。

リンクはGPUの使用理由で指定されています。グリッドコンピューティングのための計算を行うためのグラフィックスカード(またはむしろそれらのGPU)の使用は、精度が低いにもかかわらず、CPUを使用するよりもはるかに経済的である。

2
Cloud Cho