GPGPU

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

GPGPU(General-purpose computing on graphics processing units; GPUによる汎目的計算)とは、GPUの演算資源を画像処理以外の目的に応用する技術のことである。

概要[編集]

GPUは一般的に画像処理を専門とする演算装置であり、多くの場合、CPUと呼ばれる主演算装置の制御の下で用いられる動画信号生成専用の補助演算用ICである。動画像の実時間内での生成は高負荷な演算能力が要求されるが、その多くが定式化された単純な演算の繰り返しであるためハードウェア化に向いており、GPUを製造している半導体メーカー数社からは、高速なメモリ・インターフェース機能と高い画像演算能力を備えたIC製品のシリーズがいくつも製造・販売されている。

特に90年代中盤以降は3D描画性能が劇的に向上し、それに伴いベクトル・行列演算を中心としたSIMD演算機の色彩が強くなってきた。2000年代に入ると、表現力の向上を求めて固定機能シェーダーからプログラマブルシェーダーへの移行が進み、演算の自由度・柔軟性(プログラマビリティ)が飛躍的に増した。そこでこれをグラフィックス・レンダリングのみならず、他の数値演算にも利用しようというのがGPGPUのコンセプトである。

GPUの浮動小数点演算能力は2010年頃に2000GFLOPSをオーバーした一方で、CPUの浮動小数点演算能力は頭打ち状態にあり、2013年時点で500GFLOPS台に留まっている。GPUは構成が単純であるために浮動小数点演算での効率がよく、GPU専用にローカル接続されたメモリIC (VRAM) とのメモリバンド幅を広く備えるために、CPUと比べて性能比で安価かつ成長の伸び率が高い[1]。またGPUの主な使途がゲーム(PCゲーム)と動画再生で、ゲームをしないユーザーにとって余り気味の資源ということもあって注目されている。

ハードウェア内部構造自体が汎用性を増したDirectX 10世代の統合型シェーダーアーキテクチャGPUの登場以降、NVIDIAによるGPGPU専用の統合開発環境「CUDA」や、AMDの「AMD Stream」(旧称ATI Stream)が現われ、GPGPU活用の幅が広がりつつある。AMD社は自社GPU製品「AMD FireStream[2]をNVIDIAに先んじて倍精度浮動小数点演算HPC向けに市場に投入し、またNVIDIAは自社のGPU「G80」をベースにしたHPC向けGPGPU「Tesla」を投入するなど、従来のベクトル計算機からの置き換えを視野に置いた市場展開を行なっている。

なお、DirectX (Direct3D) はバージョン11でGPUによる汎用演算用のステージであるコンピュートシェーダー(DirectCompute)を、またOpenGLはバージョン4.3で同様のコンピュートシェーダーを導入する[3]など、グラフィックスAPIのほうにも従来のパイプラインに加えてGPGPU機能を活用するための変化が現れつつある。

特徴と課題[編集]

条件分岐[編集]

GPUはシェーダープロセッサ(ストリームプロセッサ[4]、ストリーミングプロセッサ[5]とも)と呼ばれる演算ユニットを多数持ち、複数のシェーダープロセッサをまとめてクラスタとしている。これらの演算器に命令を与えるインストラクション・ユニットはクラスタごとに1台しか無く、クラスタを構成するシェーダープロセッサはそれぞれ異なるデータを与えられ、そのデータに対して同じ命令内容を一度に実行する。このようなSIMD型データ処理は3次元演算やマルチメディア処理に効果を発揮する一方で、命令中に条件分岐による分岐が入るとオーバーヘッドがかさみ、途端に効率を落としてしまう。今日のCPUでは、このようなペナルティを最小限にするためにプリフェッチ/プリデコードや投機実行/レジスタ・リネーミングといった機能を備えているが、GPUでは備えていない(限定的な条件付きで投機的実行を行なえるものもある。GPUでの動的分岐はDirectX 9.0c世代以降でようやく現実的になった[6][7])。また、シェーダープロセッサ間でデータをやりとりする場合、遠くのデータバスを経由することになり、それがボトルネックとなってしまう。

一般のアプリケーションで条件分岐が存在しないものは珍しく、こういった制約によってGPUはオフィス・スイートのようなアプリケーションの実行には不向きである。GPGPUの発展にはいかに効率を落とさず条件分岐を行うかというのが1つの課題となっている。原理的にはシンプルなアルゴリズム構造を持ったプログラムによって、並列データ処理に最適化することがGPGPUの特長を最大限引き出すことにつながるといえる。

浮動小数点演算とローカルメモリ[編集]

AMD2006年R5xxコアを使用した単精度浮動小数点演算向けの第一世代AMD FireStreamを発売、続いて2007年R6xxコアを使用した倍精度浮動小数点演算向け第二世代AMD FireStream を発売、また2008年に発売されたRADEON HD 4850は1チップでは世界初の1TFLOPSを達成し、このRADEON HD 4850にも使用されたR7xxコアを使用して低価格かつ高性能を売りに倍精度浮動小数点演算HPC分野向けに第三世代AMD FireStreamを発売する事になった。2010年には、さらに高性能化した第四世代AMD FireStreamを発売している。 NVIDIA2010年に発売された NVIDIA Tesla 20 シリーズ[8]から倍精度も単精度の半分の速度で実行できるようになったが、依然としてGPUは倍精度の浮動小数点演算が不得意である。GPUが扱う多くの画像演算では、整数演算や単精度の浮動小数点演算で足りてしまうために浮動小数点演算器は仮数部が24ビット程度とそれほど広くなく、倍精度の浮動小数点演算を行うには分割して幾度も演算器を使う必要がある。

メモリ環境についても、演算入力は少数の格子点データと幾分大きなテクスチャ・データだけであり、演算出力は画像1枚程度の大きさのピクセルごとに3色[疑問点 ]のデータを保持しながら順次それらを送り出すだけで済むため、相応に大きな外部の半導体メモリとかなり広いメモリバンド幅による接続で十分に対応しており、演算対象データの局所性が高いのでローカルメモリと内部キャッシュによってデータの読み書き性能が向上すると同時に演算も途切れずに順次行える傾向が強い。

基本的にGPUは、配列構造の単純なデータを半精度/単精度程度の浮動小数点演算によって順番に処理することで2次元の動画像データを実時間内に生成することに特化しているため、それ以外の用途ではあまり高い性能は期待できない。リアルタイム画像処理専用ICの流用では、科学技術計算でも倍精度以上の浮動小数点演算(拡張倍精度・四倍精度など)を必要とするものや、演算の局所性が低いものではそれほど高い性能は得られない。リアルタイム画像処理専用ではなく、GPUから派生して新たに開発されたGPGPU用のICでは、倍精度浮動小数点演算やより広いメモリ空間に対応したものがあり、これらは広範な科学技術計算への利用が期待される。なお、コンシューマー向けの画像処理分野ではほとんど必要とされないメモリーの冗長機構であるECCHPC分野では必須とされるため、ICを共用する場合に制約となる[9]

開発およびチューニングの難しさと移植性[編集]

2015年現在、GPGPU対応プログラムの開発環境・APIとして代表的なものはCUDAOpenCLおよびDirectComputeであり、GPGPU黎明期の開発環境に比べればはるかに開発しやすくなっているものの、依然としてアクセラレーターとなるハードウェアを意識したGPGPU特有のプログラミング知識が不可欠である。また、規格によってある程度標準化・抽象化されているとはいえ、いずれもデバイスとの通信を行なうローレベルのAPIを使いこなさなければならないなど、通常のC/C++Fortran言語を用いたソフトウェア開発とは次元の異なる難しさがあり、導入のハードルが高い。この点に関しては、アクセラレーターの存在を抽象化し、従来のCPUベース並列プログラミング用の共通規格OpenMPに近い高レベルプログラミング環境を提供するOpenACC英語版C++ AMPといった規格も徐々に整備されつつある[10]

CPU上で動作するプログラムは組み込み環境を除き、ライブラリも含めて高レベルに洗練された開発環境が整っていることが多い。例えば単純な連続メモリの配列構造だけでなく、リンクリスト二分探索木ハッシュテーブルといった基本的なデータ構造はプログラミング言語標準ライブラリで提供されていることがほとんどだが、GPUプログラミングの場合は基本的に配列構造しか用意されていない。また、複雑なデータ構造をGPU上で扱おうとすると、CPUよりもはるかに困難となる場合が多い[11]

その他、コンピュータのマザーボードとディスクリートGPUを接続するPCI-Express規格は、CPU-システムメモリ間やGPU-ビデオメモリ間の帯域幅と比べてはるかに狭く、安易にGPGPUを導入しようとするとメモリ転送がボトルネックとなって逆に性能の低下を招いてしまう可能性もありうる。この点に関しては、NVIDIAが開発を進めているNVLink[12]や、AMDが推進しているHSA (Heterogeneous System Architecture英語版)[13] といった解決策が模索されている。

GPGPUプログラムの移植性に関しては、CUDAはNVIDIAハードウェア専用であり、またDirectComputeはMicrosoftプラットフォーム(Microsoft WindowsXbox Oneなど)専用という制約がある。一方でOpenCLは、GPUだけでなく対応するあらゆるハードウェア・あらゆるプラットフォームへ展開できる高い移植性を持っているが、性能に関するポータビリティは必ずしも確保・保証されず、場合によってはデバイスやチップごとにコードをチューニングする必要がある[14] [15] [16]

適合分野[編集]

GPGPUで性能が向上するアプリケーションとしては、

演算としては、

などが期待されている[17]

実用ソフトウェアの登場[編集]

GPGPU技術の話題は、コンピュータ(特に資源やスペースの制約が強いパーソナルコンピュータ)の進化において近年[いつ?]のトレンドであり課題であった。しかし、デモンストレーションばかりが先行し、実際に活用できるソフトウェアが発売されることがなかった。そもそも、CUDAやOpenCLなどの汎用APIや、それらに対応するDirectX 10世代の統合アーキテクチャGPUが出現するまでは、GPGPU開発環境は制約の強いリアルタイムグラフィックス向けAPIを直接利用したものであり、ハードルも高く、決して開発効率や再利用性が良いとは言えなかった[18]

2008年秋から、S3がGPUを利用したGPGPU用写真修正ソフトウェア「S3FotoPro」を発表[2]、また動画編集加工ソフトでは動画エンコードソフトの代表格であるTMPGEncがCUDAに対応した[3]ことを皮切りに、CyberlinkPowerDirector 7がCUDAとATI Streamに対応した[4]。さらに、2009年にはSuper LoiLoScope (Pixel Shader 2.0を活用) が発売[5]CyberlinkMediaShow Espresso (CUDAとATI Streamに対応) を発売している。GPGPUを利用した無料で利用可能な動画エンコードソフトとして、AMDのATI AVIVO (完全無料) やNvidiaのBadaboom (30日間無料体験版) 、MediacoderのCUDAエンコーダがあげられる。

Adobe社は2010年5月28日に発売[19]したCreative Suite 5 (CS5) においてGPGPUを正式にサポートした。CS5はOpenCLベースで開発されており、ほとんどすべての機能において[要出典]GPGPUによる演算を行うことができる。本来GPUは画像処理を得意とするため、画像処理を主体とする同社のアプリケーションへの適性は高い。また、After Effects CCでは、レイトレーシングエンジンにNVIDIA OptiX英語版を採用している[20]。その他にも、V-Rayなど、レイトレーシングのアクセラレータとしてGPUを活用しているレンダラーが存在する[21]

オープンソースの統合型3DCG作成ソフトウェアBlenderでは、GIレンダリングエンジンであるCyclesにおいてNVIDIA CUDAによるGPUレンダリングが可能となっている。なお、バージョン2.6時点ではOpenCLによるGPUレンダリングも試験的に実装が進められている[22]。また、Autodesk 3ds Maxサブスクリプションなどに搭載されている物理ベースのGIレンダリングエンジンであるNVIDIA Irayでは、CUDAベースのGPUアクセラレーションが行なわれる[23] [24] [25]

その他、ネットワーク上の仮想通貨ビットコインの採掘処理にもGPUが使われている[26]

このように、学術・研究目的以外にも、一般的なプロダクション向け・コンシューマー向けに関してもGPGPU技術を利用したソフトウェアが続々と登場しており、ようやくGPGPUを本格的に活用できる環境が整ってきたといえる。

脚注[編集]

[ヘルプ]
  1. ^ GPGPUのキラーアプリケーションは「グラフィックス」 - @IT
  2. ^ FireStream - 製品情報
  3. ^ 4Gamer.net ― OpenGLはDirectX 11を超え,OpenGL ESは据え置き型ゲーム機と同等以上に。Khronosの最新動向レポート
  4. ^ 【レビュー】549ドルのGeForce GTX TITAN対抗馬「Radeon R9 290X」をベンチマーク - PC Watch
  5. ^ 【4Gamer.net】[特集]「GeForce 8800」のポイントをブロックダイアグラムから探る
  6. ^ 【4Gamer.net】 - 西川善司の3Dゲームエクスタシー - ATI, Radeon X1000シリーズ発表でSM3.0世代に突入
  7. ^ 【後藤弘茂のWeekly海外ニュース】GTCの目玉の1つ「Tegra 4/4i」のCPUアーキテクチャ
  8. ^ Tesla C2050 / C2070 GPUコンピューティングプロセッサ
  9. ^ ハイブリッドアーキテクチャでスパコン市場に挑むNVIDIA - 後藤弘茂のWeekly海外ニュース(PC Watch, Impress社、2012年4月16日配信、2012年4月16日閲覧)
  10. ^ 4Gamer.net ― 見えてきたAMDの次世代GPUアーキテクチャ。なぜAMDはVLIWを捨てるのか
  11. ^ レンダリング手法について-CPU or GPU? | KeyShot™総合サイト
  12. ^ 【後藤弘茂のWeekly海外ニュース】NVIDIAの次期GPU「Pascal」の概要 - PC Watch
  13. ^ 【後藤弘茂のWeekly海外ニュース】AMD、新GPU「Tonga」がHSAの最終形であることを明らかに - PC Watch
  14. ^ » コンパイラ、そしてもっと:アクセラレーター・プログラミング
  15. ^ KAKEN - GPUによるFFT計算の自動チューニング手法の研究(22680002) - 2011年度研究実績報告書
  16. ^ GPUとXeon Phi、どちらが計算処理アクセラレータに最適か? - 実際の実行性能を比較するワークショップを首都大学東京が開催 (4) アクセラレータの課題と問題点が語られたパネルディスカッション | マイナビニュース
  17. ^ 変わった例ではカスペルスキー・ラボが現在Radeon HD 2900で行っている実証試験として、GPUのパワーを使ってセキュリティソフトによる大まかなセキュリティチェックを行う機能を開発している。これによりCPUへの負担を減らすことができるとしている[1]
  18. ^ "これからの並列計算のためのGPGPU連載講座(I) GPUとGPGPUの歴史と特徴", 東京大学情報基盤センター, 大島聡史
  19. ^ ZDNet Japan Staff (2010年4月12日). “アドビ、クリエイティブ製品の最新版「CS5」を5月28日に一斉発売”. CNET Japan. 2010年8月18日閲覧。
  20. ^ GPU changes (for CUDA and OpenGL) in After Effects CC (12.1) | After Effects region of interest
  21. ^ GPUレイトレーシング | NVIDIA
  22. ^ Doc:JA/2.6/Manual/Render/Cycles/GPU Rendering - BlenderWiki
  23. ^ NVIDIA iray | NVIDIA
  24. ^ NVIDIA iray - Design Rendering with CUDA Parallel Processing | NVIDIA
  25. ^ NVIDIA Advanced Rendering: NVIDIA Iray
  26. ^ Bitcoinマイニングはまさに軍拡競争、素人お断りの現状とは? - GIGAZINE

関連項目[編集]