GPUはリアルタイム画像処理向けのデータ並列計算とパイプライン処理に特化した命令発行形態を持ち、またGPUとメインメモリ間の帯域幅は通例狭いことが多いものの、GPUと直結されるVRAM間には十分広い帯域幅を備えていることから、補助的なベクトル計算機の一種とも言える。GPGPUは、GPUが持つこの特性を活かした汎用的なストリーム・プロセッシングの一形態である。GPUを主体として計算機システムを構成した場合、専用設計のスーパーコンピュータと比較して導入・運用のコストが圧倒的に安くなることから、HPCの分野で特に多くの注目を集めている応用技術でもある。概要[編集]この節は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(2015年3月)GPUは一般的に画像処理を専門とする演算装置であり、多くの場合、CPUと呼ばれる主演算装置の制御の下で用いられる動画信号生成専用の補助演算用ICである。動画像の実時間内での生成は高負荷な演算能力が要求されるが、その多くが定式化された単純な演算の繰り返しであるためハードウェア化に向いており、GPUを設計している数社からは、高速なメモリ・インタフェース機能と高い画像演算能力を備えたIC製品のシリーズがいくつもリリースされている。1990年代中盤以降は3D描画性能が劇的に向上し、それに伴いベクトル・行列演算を中心としたSIMD演算機の色彩が強くなってきた。2000年代に入ると、表現力の向上を求めて固定機能シェーダーからプログラマブルシェーダーへの移行が進み、演算の自由度・柔軟性(プログラマビリティ)が飛躍的に増した。そこでこれをグラフィックス・レンダリングのみならず、他の数値演算にも利用しようというのがGPGPUのコンセプトである。K80のようなデュアルGPUソリューションは除外されている。単精度で8TFLOPSをオーバーした一方で、CPUはサーバー向けでも単精度は1TFLOPS台に留まっている。バンド幅を広く備えるために、CPUと比べて性能比で安価かつ成長の伸び率が高い[5]。Watt)が高いのもGPUの特徴である。GPUの主な使途がゲーム(PCゲーム)と動画再生で、ゲームをしないユーザーにとって余り気味の資源ということもあって注目されている。10世代以降の製品となる)。GraphicsシリーズなどがGPGPUに対応している。FireStreamシリーズ)が挙げられ、こちらは科学技術分野のHPC市場向けにも投入されるなど、従来のベクトル計算機からの置き換えを視野に置いた製品展開が行なわれている。Stream)、そしてクロノス・グループによる標準規格「OpenCL」が現われ、GPGPU活用の幅が広がりつつある。バージョン11でGPUによる汎用演算用のステージであるコンピュートシェーダー(DirectCompute)を、またOpenGLはバージョン4.3で同様のコンピュートシェーダーを導入する[6]など、グラフィックスAPIのほうにも従来のグラフィックスパイプラインに加えてGPGPU機能を活用するための変化が現れつつある。AMP」や、PGIの「OpenACC」[7]など、DirectCompute/OpenCL/CUDAといったローレベルAPIをバックエンドとしながら、従来のC/C++やFortranにおけるOpenMPに近い高レベル並列プログラミング環境を提供するアクセラレータ系ライブラリ・言語拡張も出現している。特徴と課題[編集]GPUはメモリにシーケンシャルにアクセスし、かつ条件分岐の無い計算(演算密度の高い処理)に強い。そのような例に行列計算がある。苦手な物の代表として二分探索がある。二分探索は条件分岐だらけなうえ、メモリにランダムアクセスする。ポインタをたどる操作もメモリにランダムアクセスするため、連結リストや木構造なども苦手である。センターによると100倍遅い[8]。グラフ計算においては、例えば最短経路問題では、完全グラフのような密グラフに対しては高速に計算できるが、頂点から数本しか辺が出ていないような疎グラフに対しては遅い[9]。条件分岐[編集]GPUはシェーダープロセッサ(ストリームプロセッサ[10]、ストリーミングプロセッサ[11]とも)と呼ばれる演算ユニットを多数持ち、複数のシェーダープロセッサをまとめてクラスタとしている。これらの演算器に命令を与えるインストラクション・ユニットはクラスタごとに1台しか無く、クラスタを構成するシェーダープロセッサはそれぞれ異なるデータを与えられ、そのデータに対して同じ命令内容を一度に実行する。このようなSIMD型データ処理は3次元演算やマルチメディア処理に効果を発揮する一方で、命令中に条件分岐による分岐が入るとオーバーヘッドがかさみ、途端に効率を落としてしまう。今日のCPUでは、このようなペナルティを最小限にするためにプリフェッチ/プリデコードや投機実行/レジスタ・リネーミングといった機能を備えているが、GPUでは備えていない(限定的な条件付きで投機的実行を行なえるものもある。9.0c世代以降でようやく現実的になった[12][13])。シェーダープロセッサ間でデータをやりとりする場合、遠くのデータバスを経由することになり、それがボトルネックとなってしまう。一般のアプリケーションで条件分岐が存在しないものは珍しく、こういった制約によってGPUはオフィススイートのようなアプリケーションの実行には不向きである。GPGPUの発展にはいかに効率を落とさず条件分岐を行なうかというのが1つの課題となっている。原理的にはシンプルなアルゴリズム構造を持ったプログラムによって、並列データ処理に最適化することがGPGPUの特長を最大限引き出すことにつながるといえる。関しては様相が異なる。GPUが扱う多くの画像演算(特にリアルタイム3Dグラフィックス)では、整数演算や単精度の浮動小数点演算で足りてしまうために浮動小数点演算器は仮数部が24ビット程度とそれほど広くなく、単精度の演算器で倍精度の浮動小数点演算を行なうには、分割して幾度も演算器を使う必要があり、性能を大きく落とす要因となる。倍精度対応が必須とされる科学技術計算分野を含めたHPC向けに設計された製品では、倍精度専用の演算器を搭載・有効化しているものもある[18]。FireStream)を発売[20]した(ただし倍精度の理論演算性能は単精度の場合の1/5となる[21])。FireStreamを発売[22]することになった。FireStreamを発売している。倍精度に対応したが、単精度933GFLOPSに比べて倍精度は1/12の78GFLOPSとなっており[25]、倍精度演算性能が極端に低かった。[32]では倍精度の理論演算性能は単精度の場合の1/3となっている。2015年現在でも、GPUにおける倍精度演算に関してはHPC向けを除き、省電力性能やゲーミング性能を重視・維持するために必要最低限の性能しか用意されないことが多い。倍精度専用の演算ユニットでは単精度の演算を行なうことはできないため、単精度を優先するか、それとも倍精度を優先するかはチップ設計段階におけるトレードオフとなる。実際、NVIDIAのMaxwellアーキテクチャのGPUでは前世代に存在した倍精度演算器が省略され、単精度演算器を使って倍精度演算を行なうため、倍精度演算のピーク性能は単精度演算の1/32となる[33]。総合的には、依然としてGPUは倍精度の浮動小数点演算が不得意であると言える。754規格に準拠したものとなっている。メモリ[編集]この節は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(2015年3月)この節は大言壮語的な記述になっています。Wikipedia:大言壮語をしないを参考に修正して下さい。(2015年3月)この節は言葉を濁した曖昧な記述になっています。Wikipedia:言葉を濁さないを参考に修正してください。ノート]メモリバンド幅による接続で十分に対応しており、演算対象データの局所性が高いのでグラフィックスメモリと内部キャッシュによってデータの読み書き性能が向上すると同時に演算も途切れずに順次行える傾向が強い。基本的にGPUは、配列構造の単純なデータを半精度/単精度程度の浮動小数点演算によって順番に処理することで2次元の動画像データを実時間内に生成することに特化しているため、それ以外の用途ではあまり高い性能は期待できない。)を必要とするものや、演算の局所性が低いものではそれほど高い性能は得られない。やより広いメモリ空間に対応したものがあり、これらは広範な科学技術計算への利用が期待される。コンシューマー向けの画像処理分野ではほとんど必要とされないメモリの冗長機構であるECCがHPC分野では必須とされるため、ICを共用する場合に制約となる[39]。access、≒シーケンシャルアクセス)を行なうことで効率化・高速化できる[40]。GPUでは64のハードウェアスレッドを束ねるバッチ単位をWavefront[42]と呼んでいるが、これらのユニット内ではプロセッサが完全に同期して動作するため、バッチ単位ごとにまとめて連続領域にアクセス(コアレスアクセス)することで効率が良くなる。逆に言えば、バッチ単位内のスレッドがそれぞれ遠く離れたばらばらのアドレスにアクセスするような非コアレスアクセス(≒ランダムアクセス)は効率が悪くなる。GPGPUの本質は、大量の演算器によって実現されるハードウェアマルチスレッド集合を用いたデータ並列演算により性能を稼ぐ点にある。呼んでいるが、GPUでの演算は、複数のSMXに対して同一の命令を発行していき、各々のハードウェアスレッドに割り当てられたデータに対して並列的に演算を行なうスタイルとなる[43]。Warp単位内における各スレッドはすべて同一の命令を実行する(SIMT(英語版))[44]。NextといったGPUアーキテクチャにおいても同様である。memory、シェアードメモリ)の存在である。共有メモリは小容量だが高速で、ユーザープログラマーが明示的に管理できるキャッシュメモリ(≒L1キャッシュ)の仕組みを果たし、複数のコアでデータを共有・交換する目的に使用できる。AMPはタイル静的メモリ[46]という名称で、それぞれ同等機能を備えている。Fermi/Keplerマイクロアーキテクチャでは、1SMXあたり最大48KBの共有メモリを使用できるが[47]、外部にあるDRAMにキャッシュなしでアクセスする場合と比べて、共有メモリのレイテンシは(スレッド間のバンクコンフリクトがないかぎり)100倍小さくなる。そのため、複数のスレッドから参照されるデータの一時書き込み場所として共有メモリを活用することにより、高速な並列アルゴリズム(たとえば高速に総和を求める並列リダクションなど)や、GPUプログラミングにおける高速化に必要なコアレスアクセス(≒シーケンシャルアクセス)を実現することができるとNVIDIAは説明している[48]。最大でも48KBしかない共有メモリというハードウェア制約がアルゴリズムの幅に制限をかけるため、共有メモリの存在はGPUプログラミングの難しさにもつながってしまう。共有メモリに読み書きする際、スレッド間の同期をとるための処理もプログラマーが明示的に記述する必要がある。Express規格は、CPU-システムメモリ間やGPU-ビデオメモリ間と比べてはるかに帯域幅が狭く、安易にGPGPUを導入しようとするとデータ転送がボトルネックとなって逆に性能の低下を招いてしまう可能性もありうる[52]。[54]などの解決策が模索されている。開発およびチューニングの難しさと移植性[編集]2015年現在、GPGPU対応プログラムの開発環境・APIとして代表的なものはCUDA、OpenCL、およびDirectComputeであり、GPGPU黎明期の開発環境に比べればはるかに開発しやすくなっている[55]ものの、依然としてアクセラレーターとなるハードウェアを意識したGPGPU特有のプログラミング知識が不可欠である。用いたソフトウェア開発とは次元の異なる難しさがあり、導入のハードルが高い。規定しているだけであり、CUDAよりもさらにローレベルの抽象度である。いった規格も徐々に整備されつつある[56]。CPU上で動作するプログラムは組み込み環境を除き、ライブラリも含めて高レベルに洗練された開発環境が整っていることが多い。C++、Java、C#言語などの代表的な高級言語では、単純な連続メモリの配列構造だけでなく、リンクリスト・二分探索木・ハッシュテーブルといった基本的なデータ構造はプログラミング言語標準ライブラリで提供されていることがほとんどだが、GPUプログラミングの場合は高速に処理できないという理由から[要出典]基本的には配列構造しか用意されていない。Jensen博士によると、複雑なデータ構造をGPU上で扱おうとするとCPUよりもはるかに困難となる場合が多いと評されている[57]。CではC++テンプレートのようなジェネリックプログラミング機能がサポートされないため、生産性が低い。AMP実装の同等ライブラリBolt[62]が存在するが、両者に互換性はない。GPUで演算した結果をCPUで読み出して利用する場合、従来アーキテクチャではGPUメモリからCPUメモリへのデータ転送が必要となる。その逆もまた然りである。したCPU-GPU間のメモリ転送にかかる処理時間およびプログラミング上の手間が、性能のボトルネックやソフトウェア開発の難しさにつながるという問題も抱えている。これは物理的にメモリが分離されているディスクリートGPUとCPUによる構成だけでなく、従来型のオンボードグラフィックスやCPU内蔵GPUといった、物理メモリを共有する構成においても同様である。機能が用意されてはいるが、あくまでメモリ空間のアドレッシングを仮想化して転送処理を自動化するだけの仕組みであり、アプリケーションプログラマーが明示的に転送処理を記述してチューニング・最適化する場合と比べてパフォーマンス上の問題もある[65]。いった解決策が模索されている。Oneなど)専用という制約がある。一方でOpenCLは、GPUだけでなく対応するあらゆるハードウェア・あらゆるプラットフォームへ展開できる高い移植性を持っているが、性能に関するポータビリティは必ずしも確保・保証されず、場合によってはデバイスやチップごとにコードをチューニングする必要がある[67][68][69]。適合分野[編集]GPGPUで性能が向上するアプリケーションの例として、下記が挙げられる。(ニューラルネットワークなど行列計算によるもの)ディープラーニング最適化問題(DRAMにコアレスアクセスするもの)実際の演算内容としては、行列演算、配列のリダクション、およびフーリエ変換などが挙げられる。2900で行っている実証試験として、GPUのパワーを使ってセキュリティソフトによる大まかなセキュリティチェックを行う機能を開発している。これによりCPUへの負担を減らすことができるとしている[5]。一方で、大量の条件分岐が伴う創薬研究や遺伝子解析のような用途にはスカラー計算機が適しており、ベクトル計算機やGPGPUベースの計算機には向かないとされている[70]。実用ソフトウェアの登場[編集]GPGPU技術の話題は、コンピュータ(特に資源やスペースの制約が強いパーソナルコンピュータ)の進化において2000年代中盤までのトレンドであり課題であった。デモンストレーションばかりが先行し、実際に活用できるソフトウェアが発売されることはなかった。Streamに対応した[75]。MediacoderのCUDAエンコーダが挙げられる。おいてGPGPUを正式にサポートした[要出典]。CS5はOpenCLベースで開発されており、ほとんどすべての機能において[要出典]GPGPUによる演算を行うことができる。本来GPUは画像処理を得意とするため、画像処理を主体とする同社のアプリケーションへの適性は高い。OptiX(英語版)を採用している[79]。その他にも、V-Rayなど、レイトレーシングのアクセラレータとしてGPUを活用しているレンダラーが存在する[80]。CUDAによるGPUレンダリングが可能となっている。バージョン2.6時点ではOpenCLによるGPUレンダリングも試験的に実装が進められている[84]。対応も進みつつあり、中堅クラスのスーパーコンピュータの演算装置としても普及しつつある。このように、学術・研究目的や産業用途以外にも、一般的なプロダクション向け・コンシューマー向けに関してもGPGPU技術を利用したソフトウェアが続々と登場しており、ようやくGPGPUを本格的に活用できる環境が整ってきたといえる。万能に処理をこなすCPUと比較して、GPUはピーキーな特性を持ち、ソフトウェア開発においてはパイプライン処理や並列計算等の知識だけでなく、ハードウェア仕様およびAPIの知識も必要になるため、未だにGPGPU活用のノウハウが一般化したとは言い難い。HPCシステムズはすべての研究開発者に計算力を提供します。ESは据え置き型ゲーム機と同等以上に。NVIDIA,Keplerベースの新世代Teslaを発表。2015年10月28日閲覧。2015年11月26日閲覧。「Skylake-K」とはいかなるCPUなのか。見えてきたAMDの次世代GPUアーキテクチャ。Pro」の最新版「CS4」アクセラレーションをサポート。2010年8月18日閲覧。Pro」を,NVIDIAは360度ビデオ用SDKをアピール。(日時は個人設定で未設定ならばUTC)。表示-継承ライセンスの下で利用可能です。追加の条件が適用される場合があります。詳細は利用規約を参照してください。Cookieに関する声明モバイルビュ。