gpgpu – なぜ人々はより専門的なチップではなく、高性能な計算のためにGPUを使うのでしょうか?

gpgpu gpu

私の理解では、GPUが一般的なコンピューティングに使われるようになったのは、GPUが計算能力の追加ソースであるからだと思います。また、CPUのような高速な演算はできませんが、コア数が多いので、CPUよりも並列処理に適しています。これは、グラフィック処理用のGPUを搭載したコンピュータをすでに所有しているが、グラフィックは必要なく、もう少し計算能力が欲しいという場合には意味がある。しかし、グラフィック処理にGPUを使うつもりはなく、特に演算能力を追加するためにGPUを購入する人がいることも理解しています。私には、これは次の例えに似ているように思えます

草を刈りたいのですが、芝刈り機が弱虫なんです。そこで、私は寝室に置いてあるボックスファンからケージを外し、刃を研ぐ。それをダクトテープで芝刈り機に貼り付けて、それなりの効果があることがわかりました。それから数年後、私は大手芝刈り業の購買担当者になりました。私には草刈り道具に費やす予算があります。芝刈り機を買う代わりに、箱型の扇風機をたくさん買いました。またしても、彼らは正常に動作しますが、私は私が使用することはありません余分な部品(ケージのような)のために支払わなければなりません。(この例えの目的のために、芝刈り機と箱型扇風機の値段は同じくらいだと仮定しなければなりません)

では、なぜGPUの処理能力はあっても、グラフィックスのオーバーヘッドはないチップやデバイスが市場に出てこないのでしょうか?いくつかの可能性のある説明が思いつく。そのうちのどれが正しいのか?

  • そのような代替案は、GPUがすでに立派なオプション(芝刈り機は存在しない、なぜこの完璧な箱型ファンを使わないのか)になっているときに開発するにはコストがかかりすぎるだろう
  • G」がグラフィックスの略であるという事実は、あくまでも用途を示しているだけであり、他の作業よりもグラフィックス処理に適したチップにするための努力を意味するものではありません(芝刈り機と箱型ファンは、突き詰めれば同じものであり、一方が他方と同じように機能するようにするための改造は必要ありません)
  • 現代のGPUは古代の前任者と同じ名前を持っていますが、最近のハイエンドのものは、特にグラフィックを処理するように設計されていません(現代のボックスファンは、古いものがそうではなかったとしても、ほとんどの場合、芝刈り機として機能するように設計されています)
  • それは、ほとんどの問題をグラフィック処理の言語に翻訳するのは簡単です(草は本当に高速にそれの上に空気を吹き付けてカットすることができます)

EDIT:

私の質問には答えが出ていますが、いくつかのコメントや回答を見ていると、自分の質問を明確にすべきだと感じています。私は、なぜ誰もが自分で計算したものを買わないのかを聞いているのではありません。明らかに、それはほとんどの場合、あまりにも高価なものになるでしょう

並列計算を高速に実行できるデバイスが求められているように見えるのを観察しただけです。そのために設計されたデバイスではなく、そのようなデバイスとして最適なのは、グラフィックス・プロセッシング・ユニットであるように思えるのはなぜだろうかと考えました

  106  None  2018-06-05


ベストアンサー

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


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

ここ10、2年の間に、GPUは固定機能のパイプライン(かなりグラフィックスのみ)から、プログラマブルなパイプライン(シェーダでカスタム命令を書くことができる)へと進化し、OpenCLのような、グラフィックスパイプラインを伴わずにシェーダコアに直接アクセスできる最新のAPIへと進化してきました

残りのグラフィックビットはマイナーなものです。これらはカードのコストの中では非常に小さな部分なので、それらを省いてもそれほど安くはないし、追加設計のコストが発生します。そのため、これは通常は行われません。ほとんどのGPUには、最高レベルのGPUを除いて、計算指向に相当するものはありませんし、それらは非常に高価です

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


基本的には、選択肢が出てきます

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

107  Bob  2018-06-05


私の好きな例え話

  • CPU。ポリマスの天才。一度に一つか二つのことができるが、それらのことは非常に複雑になることがある
  • GPU。低スキルのトンデモ労働者。それぞれが大きな問題をこなすことはできませんが、大量に処理することができます。あなたの質問に対しては、グラフィックのオーバーヘッドはありますが、私はそれがわずかだと思っています
  • ASIC/FPGA:企業。低スキルの労働者を大量に雇ったり、天才を数人雇ったり、低スキルの労働者と天才を組み合わせて雇うことができます

何を使うかは、コスト感応度やタスクの並列化の度合いなどに依存する。市場がどのように展開してきたかから、高度に並列化されたアプリケーションではGPUが最も適しており、電力と単価が第一の関心事であればCPUが最も適していると言えるでしょう

あなたの質問に直接: なぜASIC/FPGAよりもGPUなのか?一般的にコストです。今日のGPU価格が高騰していても、ASICを設計してニーズを満たすよりも、GPUを使用する方が(一般的には)まだ安い。@user912264さんが指摘しているように、ASIC/FPGAには有用な特定のタスクがある。もしあなたがユニークなタスクを持っていて、スケールから利益を得るならば、ASIC/FPGAを設計する価値があるかもしれません。実際、この目的のためにFPGAのデザインを設計/購入/ライセンスすることができます。これは、例えば高精細テレビのピクセルに電力を供給するために行われます

31  BobtheMagicMoose  2018-06-05


あなたの例えが悪い。この例えでは、大規模な芝刈りビジネスのために機器を購入するとき、あなたは良い芝刈り機があると仮定しています。コンピューティングの世界ではそうではありません

R&D のコストと、専用チップの性能向上の可能性は、1 つを作ることを正当化するには高すぎる可能性があります

とはいえ、私はNvidiaが汎用コンピューティング専用のGPUをいくつか出していることを知っていますが、それらにはビデオ出力がありませんでした

10  jstbnfdsrtah  2018-06-05


もちろん、エネルギー効率や計算速度を考えて、専用のチップを使うこともできます。ビットコインのマイニングの歴史をお話しましょう

  • ビットコインは新しい、オタクはCPUで採掘する
  • ビットコインはやや新しい、賢いオタクはGPUで採掘する
  • ビットコインは(ちょっとした)有名になり、人々はFPGAを買うようになりました
  • ビットコインは今では有名になりました(2013年)、初心者でもASIC(「特定用途向け集積回路」)を購入して効率よく採掘しています
  • ブロック報酬が下がる(定期的に)、古いASICでも儲からなくなってきた

だから、特化した「巨大電卓」ではなく、GPUを使う理由がない。経済的なインセンティブが大きくなればなるほど、ハードウェアは特化されていく。しかし、それらは設計がかなり難しく、一度に何千個も生産しないのであれば、製造することは不可能です。チップを設計することが実行可能でない場合は、最寄りのウォルマートからthoseのいずれかを購入することができます

TL;DR もちろんもっと特化したチップを使ってもいいですよ

9  MCCCS  2018-06-05


あなたの例えで説明したことは、まさに何が起こったかを表しています。あなたが扇風機を掴んで 草刈り機として使おうと羽根を研いでいたちょうどその時 研究者のグループが “おい、ここには素晴らしいマルチコア処理ユニットがあるぞ

結果は良好で、ボールは転がり始めた。GPUはグラフィックス専用機から汎用計算をサポートするようになり、最も過酷な状況を支援することができました

なぜなら、コンピュータに期待する最も計算量の多い操作はグラフィックだからです。ほんの数年前と比較して、今日のゲームの見え方は驚くほど進歩しています。これは、多くの努力と資金がGPUの開発に費やされてきたことを意味し、GPUがある種の汎用的な計算の高速化にも使用できるという事実が、GPUの人気に拍車をかけているのです

そこで結論から言うと、最初に提示された説明が最も正確です

  • そのような代替案は、GPUがすでに立派なオプションになっているのに、開発コストがかかりすぎるだろう

GPUはすでに存在していて、誰でも簡単に利用可能で、それが機能していました

8  Mario Chapa  2018-06-05


具体的には、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よりも複雑だが、それがGPUの本質だ。だからこそ、ランダムなCPUアルゴリズムをGPUに放り込んで高速化を期待することはできない。アルゴリズムがより多くの命令分岐を行えば行うほど、GPUには適していない

5  Rob  2018-06-05


ここの他の回答はかなり良いですね。私も2セントを投入します

CPUがこれほどまでに普及した理由の一つは、CPUが柔軟性に富んでいることです。無限の多様なタスクのためにそれらを再プログラムすることができます。最近では、製品を製造する企業にとって、同じタスクを行うためのカスタム回路を開発するよりも、小型のCPUやマイクロコントローラを何かに取り付けて、その機能をプログラムする方が安くて速いのです

他の人と同じデバイスを使うことで、その同じデバイス(または類似のデバイス)を使って問題を解決するための既知のソリューションを活用することができます。そして、プラットフォームが成熟するにつれて、あなたのソリューションは進化し、非常に成熟した最適化されたものになります。これらのデバイスでコーディングをしている人たちもまた、専門知識を身につけ、非常に優れた技術を身につけていきます

GPUに代わる新しいタイプのデバイスをゼロから作成するとしたら、最初に採用した人でさえ、実際にその使用方法を理解するまでに何年もかかるでしょう。ASICをCPUに接続した場合、どのようにしてそのデバイスに計算のオフロードを最適化するのでしょうか?

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

ワーキングアクセラレータを手に入れた後は、経済力が運命を決めることになります。市場の慣性は信じられないほどの力です。たとえ何かが素晴らしいアイデアであっても、この新しいデバイスを使用するためにあなたの作業ソリューションをリファクタリングすることは経済的に可能でしょうか?そうかもしれませんし、そうでないかもしれません

GPUはある種の問題に対して実際には恐ろしいもので、多くの人や企業が他のタイプのデバイスに取り組んでいます。しかし、GPUはすでに定着しているので、彼らのデバイスは経済的に成り立つようになるのでしょうか?そのうちわかると思います

編集:バスから降りたので、少し答えを広げてみました

注意すべき事例として、Intel Larrabeeプロジェクトがあります。これは、ソフトウェアでグラフィックスを行うことができる並列処理装置としてスタートしたもので、特化したグラフィックスハードウェアはありませんでした。私はこのプロジェクトで働いていた人と話をしましたが、失敗して中止になった主な理由は、(恐ろしい内部政治の他に)コンパイラで良いコードを生成できなかったからだと言っていました。もちろん、それは動作するコードを生成しましたが、製品の全体的なポイントが最大のパフォーマンスであるならば、かなり最適なコードを生成するコンパイラを持っていた方が良いでしょう。これは、新しいデバイスのハードウェアとソフトウェアの両方に深い専門知識がないことが大きな問題であるという私の以前のコメントにも通じるものです

Larrabeeデザインのいくつかの要素がXeon Phi/Intel MICに採用されました。この製品は実際に市場に出回った。科学的な計算やその他のHPCタイプの計算を並列化することに完全に集中していました。現在は商業的には失敗しているようだ。私がIntelで話をした別の人は、単にGPUとの価格/性能競争力がないだけだとほのめかしていた

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

アクセラレータやGPUに代わるもののための肥沃な土壌があると思われる場所の1つが、クラウドだ。Google、Amazon、Microsoftなどの大企業にはスケールメリットがあるため、代替計算スキームへの投資には価値がある。すでに誰かがGoogleのテンソル処理装置に言及している。マイクロソフトはBingやAzureのインフラ全体にFPGAなどを搭載している。Amazonも同じだ。時間とお金とエンジニアの涙の投資をスケールで相殺できるのであれば、絶対に理にかなっている

要約すると、特化は他の多くのこと(経済性、プラットフォームの成熟度、エンジニアリングの専門性など)と対立しています。特化はパフォーマンスを大幅に向上させることができますが、デバイスが適用できる範囲を狭めてしまいます。私の回答では、多くのネガティブな点に焦点を当てていますが、専門化には多くのメリットもあります。私が述べたように、多くのグループが非常に積極的に追求しています

すみません、もう一度編集します。私はあなたの最初の前提が間違っていると思います。私は、計算能力の追加ソースを探していたというよりも、人々が機会を認識していた場合だと考えています。グラフィックスプログラミングは非常に線形代数が多く、GPUは行列乗算やベクトル演算などの一般的な演算を効率的に実行できるように設計されています。科学的コンピューティングにも非常に一般的な操作です

GPUへの関心は、Intel/HP EPICプロジェクトが約束したことが大げさだったことに人々が気付き始めた頃から始まりました(90年代後半から2000年代初頭)。コンパイラの並列化には一般的な解決策がありませんでした。そのため、「どこでもっと処理能力を上げようか、GPUを試してみようか」と言うよりも、「並列計算が得意なものがあるので、これをもっと一般的にプログラム可能なものにできないか」ということだったのだと思います。関係者の多くは科学計算のコミュニティにいて、CrayやTeraマシンで実行できる並列Fortranコードをすでに持っていました(Tera MTAは128のハードウェアスレッドを持っていました)。両方向からの動きがあったのかもしれませんが、GPGPUの起源については、この方向からの言及しか聞いたことがありません

5  NerdPirate  2018-06-06


enter image description here

ASIC(カスタムシリコン)は非常に高速ですが、設計と製造には非常に高価です。ASICは目的に特化したものであり、CPUはコンピュータを「プログラム」することで、計算タスクをソフトウェアで実行できるようにした1つのアプローチでした。初期のCPUは、現場でチップをプログラミングすることで、多額のコストをかけずにASICのパワーを利用できるようにしました。このアプローチが成功したことで、現在使用している(非常に)高速なコンピュータが誕生しました

では、なぜGPUなのか?

90年代半ば、3DFXは、3Dレンダリングタスクが非常に特殊で、カスタムASICの方がCPUよりもはるかに優れたパフォーマンスを発揮することに気付きました。そこで3DFXは、3DレンダリングタスクをCPUからこのコプロセッサにオフロードするコンピュータ・コプロセッサを開発しました。競争と市場の需要により、GPUはCPUよりもはるかに高速に計算を実行できるようになり、「なぜCPUの代わりにGPUを使って数値を計算できないのか」という疑問が生じました。GPUメーカーは需要があり、より多くの収益を上げる方法があると考え、開発者が自社のハードウェアを使用できるようにプラットフォームを変更し始めました。しかし、ハードウェアハードウェアは非常に目的に特化していたため、GPUに何をさせるかには制限がありました。私はなぜここで具体的に入りません

では、なぜもっと目的別のシリコンがなかったのでしょうか?なぜグラフィックだけなのか?

2つの理由があります。1)価格。GPUは市場が良く、それを正当化することができましたが、当時でさえ、それは大きなリスクでした。3DFXが利益を上げられるかどうかは誰にも分からなかった(実際には利益を上げることができずに倒産してしまった)。GPU市場の規模が大きくなった今でも、競争相手は3社しかいません。2) CPUは、実際には命令拡張で「カスタムシリコン」のニーズに応えていた。MMXを思い起こしてみてください。これは、3DFXが高速化していた頃に、IntelがCPUでグラフィックスを高速化しようとしたものです。それ以来、x86命令セットは、これらすべてのカスタム拡張により、非常に大規模なものになりました。これらの拡張機能の多くは、当時は意味のあるものでしたが(MMXのように)、現在ではプロセッサ内のデッドウェイトとなっています。しかし、それらを削除することはできません。これはARMのセールスポイントの1つです。命令拡張はそれほど多くありませんが、これによりシリコンが小さくなり、製造コストが安くなります

カスタムシリコンのコストを下げることができれば大儲けできそうな気がします。これに取り組んでいる人はいないのかな?

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

FPGA の主な制限事項は、チップ上にどれだけのロジックを搭載できるかというシリコンサイズです。第二はクロック速度で、FPGAではホットスポット、リーク、クロストークなどを最適化するのが難しいからです。Intel は Altera と提携し、エンジニアがサーバーのコプロセッサとして「カスタム・シリコン」の利点を活用するために使用できる FPGA を提供しましたつまり、ある意味では来ているということだ

FPGAはCPUやGPUに取って代わられることはないのでしょうか?

おそらくすぐには無理だろう。最新のCPUやGPUはMASSIVEで、シリコンは熱的・電気的性能のために高度にチューニングされています。カスタムASICと同じようにFPGAを最適化することはできません。何か画期的な技術がない限り、CPUはFPGAとGPUコプロセッサを搭載したコンピュータのコアであり続けるでしょう

4  Robear  2018-06-09


例えば、ザイリンクスは、自社のFPGAを使用した178枚のPCI-eボードのリストを持っており、これらのボードの約3分の1は、1つまたは複数の強力なFPGAチップとオンボードのDDRメモリを多数搭載した「ナンバークリンチャー」です。また、高性能なコンピューティングタスクを目的とした高性能DSPボード(example)もある

GPUボードの人気は、より幅広い顧客層を狙っていることに起因していると思います。Nvidia CUDAで遊ぶために特別なハードウェアに投資する必要はないので、特別なハードウェアを必要とするタスクが発生したときには、すでにプログラミング方法を知っているという点で、Nvidia GPUは競争力を持っています

3  Dmitry Grigoryev  2018-06-07


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

一般的に、高性能な計算は計算時間に関係しています。その際、私は高性能コンピューティングクラスタのリンクを共有したいと思います

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

2  Cloud Cho  2018-06-05


タイトルとURLをコピーしました