Graphics Processing Unit(グラフィックス プロセッシング ユニット、略称はGPU)、画像処理装置(がぞうしょりそうち)は、コンピュータゲームに代表されるリアルタイム画像処理に特化した演算装置あるいはプロセッサである。グラフィックコントローラなどと呼ばれる、コンピュータが画面に表示する映像を描画するための処理を行うICから発展して登場した。NVIDIAがハードウェアT&Lを搭載したGeForce 256を世界初のGPUとして紹介した。特にリアルタイム3DCGなどに必要な、定形かつ大量の演算を並列にパイプライン処理するグラフィックスパイプライン性能を重視している。現在の高機能GPUは高速のビデオメモリ(VRAM)と接続され、頂点処理およびピクセル処理などの座標変換やグラフィックス陰影計算(シェーディング)に特化したプログラム可能な演算器(プログラマブルシェーダーユニット)を多数搭載している。プロセスルールの微細化が鈍化していることからムーアの法則は限界に達しつつあるが、設計が複雑で並列化の難しいCPUと比較して、個々の演算器の設計が単純で並列計算に特化したGPUは微細化の恩恵を得やすい。さらにHPC分野では、CPUよりも並列演算性能にすぐれたGPUのハードウェアを、より一般的な計算に活用する「GPGPU」が主流の方法になっており、そういった分野向けに映像出力端子を持たない専用製品や、深層学習ベースのAI向けに特化した演算器を搭載したハイエンド製品も現れている。

thumb|200px|NVIDIA製のGPU - GeForce 6600 GT

歴史

1970年代〜1980年代

コンシューマPC向けGPUの起源は1970年代から1980年代のグラフィックコントローラにさかのぼる。当時のグラフィックコントローラは、矩形や多角形の領域を単純に塗り潰したり、BitBlt(ビットブロック転送、ビット単位でのブロック転送)などにより、2次元画像に対して簡単な描画処理を行うだけであり、その機能と能力は限定的だった。

グラフィックコントローラの中には、いくつかの命令をディスプレイリストとしてまとめて実行したり、DMA転送を用いることでメインCPUの負荷を減らしたりするものもあった。このような専用のグラフィックコントローラを用いずに、DMAコントローラで処理したり、汎用CPUをグラフィック処理専用に割り当てたグラフィックサブシステムを充てるコンピュータも存在した。汎用的なグラフィックス・コプロセッサは古くから開発されてきたが、当時の技術的な制約から安価な製品では機能や性能に乏しく、また高機能なものは回路の規模が増大し非常に高価なものとならざるを得ず、結果的にパーソナルコンピュータへ広く採用されることはなかった。

1980年代から1990年代前半にかけてはBitBltをサポートするチップと、描画を高速化するチップは別々のチップとして実装されていたが、チップ処理技術が進化するとともに安価になり、VGAカードをはじめとするグラフィックカード上に実装され、普及していった。1987年のVGA発表とともにリリースされたIBMの8514グラフィックスシステムは、2Dの基本的な描画機能をサポートした最初のPC用グラフィックアクセラレータとなった。AmigaはビデオハードウエアにBlitterを搭載した最初のコンシューマ向けコンピュータであった。

1980年代後半から1990年代前半の日本国内で広く普及していたPCとしてPC-9800シリーズがあるが、同シリーズのグラフィックの描画に関連するチップにはGDCと、GRCG・EGCがある(CRTCなどもあるが、描画には関係しない)。GDCには直線・円弧・四角塗りつぶしなどの図形描画機能があり、この記事で扱っているタイプのLSIである。GDCは登場時点では比較的高機能・高性能であったが、CPUの性能向上によりその利点は薄くなっていった(そのため、当時の開発者でもそれを正確に把握していない者も多い)。GRCGは複数プレーンへの同時描画(98ではプレーンごとにセグメントアドレスを動かす必要があり面倒だった)や描画時のマスク操作などをハードウェアで行えるもので、EGCはGRCGの強化版(Enhanced Graphic Charger)である。EGCはEPSONが比較的後期まで追随しなかったことや、NECがハードウェアの仕様の公開に非積極的になった以降ということもあり、あまりよく知られていない。さらに、AGDC(Advanced 〜)やEEGC(あるいはE2GC)といったチップに至っては、非公開情報を集めた文献にもその名前以外には殆ど全く情報がない。

1990年代

1990年代に入ると、シリコングラフィックス (SGI) が自社のグラフィックワークステーション用のグラフィックライブラリとして開発・実装したがOpenGLに発展して標準化され、標準化されたグラフィックライブラリとそのAPIに対応したハードウェアアクセラレータ、という図式が登場する。

実装当初のIRIS GLはソフトウェアによるものであったが、SGIでは当初よりこのAPIをハードウェアによって高速処理させる (ハードウェアアクセラレーションを行う) ことを念頭に設計しており、程なくIRIS GLアクセラレータを搭載したワークステーションが登場する。ただし、当初のIRIS GLアクセラレータはまだ単体の半導体プロセッサではなく、グラフィックサブシステムは巨大な基板であった。

1990年代の初めごろ、Microsoft Windowsの普及とともに、グラフィックアクセラレータへのニーズが高まり、WindowsのグラフィックスAPIであるGDIに対応したグラフィックアクセラレータが開発された。

1991年にS3 Graphicsが開発した"S3 86C911"は、最初のワンチップ2Dグラフィック・アクセラレータであった。"86C911"という名は設計者がその速さを標榜するためポルシェ911にちなんで名付けた。86C911を皮切りとして数々のグラフィック・アクセラレータが発売された。

1995年には3DlabsがOpenGLアクセラレータのワンチップ化に成功し、低価格化と高パフォーマンス化が加速度的に進行し始める。また同年に登場したインテルのPentium Proプロセッサの処理能力は同時代のRISCプロセッサの領域に差し掛かっており、このCPUとワンチップ化によって価格を下げたOpenGLアクセラレータのセットは、それまでメーカーに高収益をもたらしていたグラフィックワークステーションというカテゴリーにローエンドから価格破壊を仕掛ける原動力となった。

1995年までには、あらゆる主要なPCグラフィックチップメーカーが2Dアクセラレータを開発し、とうとう汎用グラフィックス・コプロセッサは市場から消滅した。

1995年に3dfxによりVoodooという3Dアクセラレータが発売された。家庭用PCの性能上のボトルネックを考慮してゲーム用に最適化されたGlideというAPIも用意され、家庭用PC上で当時のアーケードゲームに匹敵する品質のグラフィックを実現した。Voodooシリーズは、1990年代後半の家庭用PCゲームの品質向上を牽引したシリーズとなった。

1995年にマイクロソフトがWindows 95とともに開発したゲーム作成及びマルチメディア再生用のAPI群DirectXではさらにグラフィック・アクセラレータの性能が強化された。DirectXのコンポートネントのひとつDirect3Dは3Dグラフィック処理のハードウェア化を想定したレンダリング・パイプラインを持っていた。

1997年当時のグラフィック・アクセラレータはレンダリングのみしかサポートしていなかったが、この頃からZバッファ、アルファブレンディング、フォグ、ステンシルバッファ、テクスチャマッピング、テクスチャフィルタリングなどの機能を次々搭載し、3Dグラフィック表示機能を競うようになった。DVD-Video再生支援機能を備えるチップも現れた。

VDP等の汎用グラフィック・プロセッサについては、カーナビ等の表示用に使用され新たな市場を形成している。90年代後半からは、携帯電話に多色表示がもちいられるようになり、その分野においても有用な市場を形成している。

一方、システムの低価格化を目的に、チップセットのノースブリッジにグラフィックコアの統合を行った、統合チップセットが1997年ころから登場し始める。1999年の「Intel 810」チップセットの登場で、低価格機には統合チップセットの使用が定着し始めた。

3DCGの中核とも言えるジオメトリエンジンは高コストが許容されるグラフィックワークステーションでは専用プロセッサとして搭載されていたが、PCでは長らくCPUが担う機能であった。しかし、ジオメトリエンジンの別名とも言えるハードウェアによる座標変換・陰影計算処理(; ハードウェアT&L)が1999年にPC向けにリリースされたDirectX 7にて標準化されMicrosoft releases DirectX 7.0 | Windows Server content from Windows IT Pro、またこのハードウェアT&Lを世界で初めて実装して製品化したNVIDIA GeForce 256を定義する言葉として「GPU」という名称が提唱されることとなった。ハードウェアT&Lの実装によって、NVIDIA社製品は他社製品と比較して突出した高性能を発揮するようになった。これ以後、ジオメトリエンジンとしての機能をCPUに任せる3dfx Voodooシリーズは目立って高性能とは言えなくなった。

2000年代

thumb|120px|right|3次元グラフィックスのパイプライン処理 DirectX 8世代では、グラフィックスパイプライン中の一部の処理をユーザープログラマーが自由に記述できるプログラマブルシェーダーが導入されるようになった。プログラマブルシェーダーは頂点シェーダー (Vertex Shader) とピクセルシェーダー (Pixel Shader) の2種類が用意され、頂点シェーダーは頂点座標や光源ベクトルの頂点単位での座標変換および頂点単位での陰影計算(シェーディング)を、ピクセルシェーダーはピクセル単位での陰影計算をそれぞれ担当する設計だった。特に従来の固定機能シェーダーではポリゴン単位(頂点単位)でしか陰影計算を実行できなかったのに対し、ピクセル単位での陰影計算もできるプログラマブルピクセルシェーダーの導入により、表現の自由度と解像度(精細度・品質)が飛躍的に向上した。ただし、シェーダープログラムの記述に使える言語は原始的なアセンブリ言語が基本であり、記述可能なプログラム長(命令数)もごく限られていたため、開発効率や再利用性などの面で課題を抱えていた。なお、頂点シェーダープログラムとピクセルシェーダープログラムを実行するハードウェアユニット(演算器)のことを、それぞれ頂点シェーダーおよびピクセルシェーダーとも呼んでいた。後にNVIDIAでCUDAを開発するIan Buckはこの最初の世代のプログラマブルシェーダーから既にGPGPUに着手しており、厳しい制約下ではあったもののレイトレーシングの高速化についての論文を発表している。

また、この世代になるとマルチテクスチャ、キューブマップ、アニソトロピック(異方性)フィルタ、ボリュームテクスチャなどが新たにサポートされ、HDRIによるレンダリングや動的な環境マッピングの生成が可能になった。動画の再生や圧縮にシェーダーを使う技術も搭載された (Intel Clear Video、PureVideo、AVIVO、Chromotion)。

DirectX 9世代になると、このプログラマブルシェーダーがさらに進化し、シェーダーのプログラムを書くための専用の高級言語であるCg、HLSL、GLSLなどが開発され、シェーダーを物理演算などゲームでの3Dグラフィック表示以外の演算に使うことも多くなった。Windows Vistaに搭載された機能のひとつ「Windows Aero」 (Desktop Window Manager) は画面表示にプログラマブルシェーダー(ピクセルシェーダー2.0)を利用するので、この世代のビデオチップが必須になっている(Windows Aero Glassを使用しなければDirectX 8世代以前のビデオチップでもWindows Vista自体は稼働する)。また、Mac OS XのCore ImageではOpenGLのプログラマブルシェーダーを利用して2Dグラフィックのフィルタ処理を行っている。

thumb|300px|left|GeForce 8800の内部構造統合シェーダーである「Streaming Processor」が128個搭載されている。これにより最大500GFLOPS超で処理する。

DirectX 10世代ではさらに自由度が増し、「シェーダーモデル4.0」 (SM 4.0) に基づくグラフィックスパイプラインが導入され、頂点シェーダーとピクセルシェーダーの間でジオメトリシェーダー (Geometry Shader) によるプリミティブ増減処理を行なえるようになった。ジオメトリシェーダーはOpenGL 3.2でも標準化されている。

グラフィックス描画処理では3次元空間を構成する表現のために三角形を色付けするピクセルシェーディング処理の負荷が、精細度や特殊処理などによって大きく変化するため、固定のハードウェアパイプライン構成ではボトルネックになることが多かった。この制約を解消するために、DirectX 10世代では演算ユニットを汎用化する統合型シェーダーアーキテクチャ (:en:unified shader architecture) によって固定のパイプラインの一部をより柔軟な構成に変更した。頂点シェーダーとジオメトリシェーダー、そしてピクセルシェーダーの機能をあわせもつ統合型シェーダー (Unified Shader) 【レビュー】初の統合型シェーダーアーキテクチャ「GeForce 8800シリーズ」を試す (1) 新アーキテクチャで登場したG80 | マイナビニュースを多数搭載して動的に処理を振り分けることによってプログラムの自由度と共にボトルネックを解消し、演算回路数の増加に比例した画像描画処理速度の向上を得た日経エレクトロニクス 2007/10/8 「プロセサはマルチ×マルチへ」。なお、この統合型シェーダーアーキテクチャによるハードウェアレベルでの汎用化が、GPUにおける汎用演算(GPGPU)の発展と普及を加速させていくことになる。

統合型シェーダーアーキテクチャを採用したNVIDIA GeForce 8シリーズではWindows / Mac OS X / Linux用の標準的な汎用Cコンパイラ環境 (CUDA) が提供され、一方ATI Radeon HD 2000シリーズではハードウェアに直接アクセスできる環境 () が、そしてRadeon HD 4000シリーズ以降ではATI Stream(Brook+言語と抽象化レイヤーであるCAL)によるアクセス手段が用意されているAMDのGPGPU戦略は新章へ - ATI Streamの展望、DirectX Compute Shaderの衝撃 (1) Radeon HD 4000シリーズでネイティブGPGPU | マイナビニュース。これにより科学技術計算やシミュレーション、画像認識、音声認識など、GPUの演算能力を汎用的な用途へ広く利用できるようになった(GPGPU)。また、特定のハードウェアベンダーやプラットフォームに依存しないOpenCLというヘテロジニアス計算環境向け標準規格に続き、米マイクロソフト社からDirectX 11 APIの一部としてGPGPU用APIであるDirectCompute(コンピュートシェーダー)がリリースされた(のちにDirectComputeをバックエンドとするGPGPU向けC++言語拡張・ライブラリとしてC++ AMPも登場したMicrosoftがGPGPU開発向けC++の拡張「C++ AMP」を発表 - 多和田新也(AFDSレポート)、PC Watch、Impress(2011年6月17日付配信、2012年3月24日閲覧))。DirectX 11のシェーダーモデル5.0では、前述のコンピュートシェーダーに加え、頂点シェーダーとジオメトリシェーダーの間に、ポリゴンの細分割・詳細化(サブディビジョンサーフェイス)をGPUで行なうテッセレーションシェーダー(ハルシェーダー、固定機能テッセレータ、ドメインシェーダー)が追加されたテッセレーションの概要。テッセレーションシェーダーはOpenGL 4.0、コンピュートシェーダーはOpenGL 4.3でも標準化されている。

なお、主にDirectXに最適化されたGeForceやRadeonなど3Dゲーム向け製品と異なり、業務用ワークステーションなど高い信頼性や耐久性が必要とされる業務用途に特化して設計されたNVIDIA Quadroシリーズ、およびAMD FireProシリーズが存在する。これら業務用製品はDirect3DよりもOpenGLおよびOpenGL対応アプリケーションに最適化されており、CAD、HPC、金融、CG映像、建築/設計、DTP、研究開発分野において採用されている。そのほか、NVIDIA TeslaシリーズやAMD FireStreamシリーズ(のちにAMD FireProに統合)といった、GPGPU専用製品も登場している。

2010年代~2020年代

主なCPUメーカーは、従来のCPU機能だけにとどまらず、1つのCPUチップ内に複数のCPUコア(マルチコア)を搭載すると同時に、画像出力専用回路としてGPUコアも統合した製品を提供するようになった。例えば、米AMDでは「AMD Fusion」構想において1つのダイ上に2つ以上のCPUとGPUを統合し現実路線へ修正されたAMDのFUSION - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2007年12月25日付配信、2012年3月24日閲覧)、米インテル社でもCore i5、Core i7、Core i3でのSandy Bridge世代から、同様の製品を提供しているIntelの次期CPU「Ivy Bridge(アイビーブリッジ)」を裸にする - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2012年3月2日付配信、2012年3月24日閲覧)Intel NehalemとAMD FUSION 両社のCPU+GPU統合の違い - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2007年10月11日付配信、2012年3月24日閲覧)CPUとGPUの境界がなくなる時代が始まる2009年のプロセッサ - 後藤弘茂のWeekly海外ニュース、PC Watch、Impress(2008年12月2日付配信、2012年3月24日閲覧)。なお、従来型のUMA、つまり単にCPUとGPUのチップを統合して物理メモリを共有するだけでは、CPUとGPUのメモリ空間が統一されることにはつながらない。HSAにおけるhUMAなどのように、CPUとGPUのメモリ空間を統一するためにメモリ一貫性を確保する仕組みが用意されることで初めて、CPU-GPU間のメモリ転送作業が不要となる。また、CPUとGPUの外部メモリが共用されるため、CPUチップの外部メモリバスにはCPUのアクセス帯域に加えてGPUのアクセス帯域も加わる。このため、仮にCPUチップに極めて高い性能のGPUを統合しても、統合チップのメモリアクセス帯域も相応に増強されないと、それがボトルネックとなって性能向上は望めない。

GPU用のメモリ規格として長らくDDR系およびGDDR系が採用されてきたが、2015年6月に発売されたAMD Radeon R9 Fury Xでは、新しい規格系統のHigh Bandwidth Memory (HBM) 5981_High_Bandwidth_Memory_HBM_FNL - High-Bandwidth-Memory-HBM.pdfが世界で初めて採用された【レビュー】初のHBM搭載ビデオカード「Radeon R9 Fury X」を試す - PC Watch これが“4096”の性能だ:“Fiji”と“HBM”の実力を「Radeon R9 Fury X」で知る (1/5) - ITmedia PC USER Hot Chips 27 - AMDの次世代GPU「Fury」 (1) HBMを採用したAMDのGPU「Radeon R9 Fury」 | マイナビニュース。しかし、高性能だが高価格なHBMの採用はコンシューマー用途では進まず、GDDR5の後継規格であるGDDR5XやGDDR6が採用されるようになっている。

2010年代後半にGPGPUという手法が広く普及したことで、HPC分野でもGPUを多用するようになった。特に深層学習(ディープラーニング)ベースのAI用途にGPUの需要が高まっている。VRAMに関しては費用対効果の面から、HPC用途ではたとえ高コストでも広帯域・大容量のHBM、ゲームなどのコンシューマー用途ではたとえ低帯域でも低コストのGDDRという棲み分けが起きている。

一方グラフィックスAPIに関しては、Mantleを皮切りとして、Metal、DirectX 12およびVulkanのように、ハードウェアにより近い制御を可能とするローレベル (low-level) APIが出現することとなった。ローレベルAPIはいずれもハードウェア抽象化レイヤーを薄くすることによるオーバーヘッドの低減や描画効率の向上を目的としており、またマルチコアCPUの活用を前提とした描画あるいは演算コマンドリストの非同期実行といった機能を備えている。また、GPUでリアルタイムレイトレーシングを実現する動きも加速しつつある。2009年にNVIDIA® OptiX アプリケーション・エンジン | NVIDIANVIDIA® OptiX Application Acceleration Engine | NVIDIAGTC - NVIDIA「OptiX」を解説、レイトレーシングはインタラクティブの時代へ (1) なぜ、今、レイトレーシングなのか | マイナビニュースが、2011年にのOpenRL4Gamer.net ― PowerVRのImaginationが“ハイエンドGPU”の設計に着手。ハイブリッドレンダリングハードウェア,そして新API「OpenRL」とは?が、そして2018年にマイクロソフトの (DXR) とAppleのMetal Ray Tracingが発表された。NVIDIA GeForce RTXシリーズはDXRのハードウェアアクセラレーションに対応する最初のGPUである。

2020年にはインテルが同社としては1998年に発売した「Intel 740」以来、22年ぶりの単体GPUである「iris Xe Max」を発売し、更に2022年にインテルはPC向けで同社初の本格的な単体GPUである「Intel Arc」を発売した。NVIDIAとAMDの2社がほぼ寡占しているPC向けの単体GPU市場にインテルが本格参戦する状況になった。実態としては最上位でもミドルクラスの性能であり、Resizable BAR 非対応のマシンでのパフォーマンスの大幅低下やドライバの完成度の低さやアイドル時の電力効率の低さなどで主要2社の製品に劣るものの、既に十分使える製品となっているため、主要2社に対するカウンターとしての存在感を示すことには成功したと言える。米中貿易戦争もあり中国でもGPUベンチャー企業が多数勃興している每天消失30家,为何这5家国产GPU公司活得很好?_腾讯新闻。2023年8月になると人工知能のGPUに対する需要が急増しGPUは供給不足に直面している。

GPUの構造

DirectX 10世代以降のGPUは統合型シェーダーアーキテクチャに基づいて設計されており、Intel GMAなどの一部を除きGPGPUにも対応している。

NVIDIA Fermiアーキテクチャの例

NVIDIAのGPUは、統合型シェーダーアーキテクチャを採用したGeForce 8 (G80) シリーズ以降、Warp単位(32ハードウェアスレッド)での並列処理実行が特徴となっているNVIDIA TESLA: A UNIFIED GRAPHICS AND COMPUTING ARCHITECTURE P.44 IEEE 2008年 ホワイトペーパー; NVIDIA の次世代 CUDA™コンピュートアーキテクチャ: Fermi™。NVIDIAのGT200アーキテクチャでは、単精度CUDAコア (SPCC) と倍精度ユニット (DPU) が分かれていたAn Introduction to Modern GPU Architecture P.44 NVIDIAが、Fermiでは単精度CUDAコア16個を2グループ組み合わせ、倍精度演算器16個と見立てて実行しているNVIDIA GPUの構造とCUDAスレッディングモデル。

ホストインターフェース GigaThreadスケジューラ グラフィックスプロセッシングクラスタ (GPC) ラスタライザ■後藤弘茂のWeekly海外ニュース■ DirectX 11でも強力なNVIDIAの新GPU「GF100」 PC Watch 2010年1月19日 ストリーミングマルチプロセッサ (SM) 命令キャッシュ (I-Cache) Warpスケジューラ 命令ディスパッチユニット レジスタファイル Uniformキャッシュ ジオメトリコントローラ ストリーミングマルチプロセッサコントローラ (SMC) CUDAコア ディスパッチポート 命令コントローラ 浮動小数点ユニット (FP Unit) 整数ユニット (INT Unit) 結果キュー LOAD/STOREユニット (LD/ST) 特殊関数ユニット (SFU) - 超越関数の実行を行なう 共有メモリ / L1キャッシュ テクスチャユニット テクスチャL1キャッシュ テッセレータ (PolyMorph Engine) 4Gamer.net ― NVIDIA,Fermi世代の次期GeForce「GF100」グラフィックスアーキテクチャを発表 相互接続ネットワーク (ROP) L2キャッシュGPU Computing Applications P.42 NVIDIA 2011年 メモリコントローラ

AMD GCNアーキテクチャの例 AMDのGPUは、Radeon HD 2000~HD 6000シリーズにおいてVLIWを採用していたが、HD 7000シリーズ以降では、グラフィックスだけでなくGPGPUでも性能を発揮できるようにするために、非VLIWなSIMDとスカラー演算ユニットにより構成されたGraphics Core Next (GCN) アーキテクチャを採用しているAMD's Graphics Core Next Preview: AMD's New GPU, Architected For Compute P.3 2011年12月21日。AMD GPUではWavefront単位(64ハードウェアスレッド)での並列処理実行が特徴となっている。

リクエスト調停 スカラーL1キャッシュ 命令L1キャッシュ コンピュートエンジン 非同期コンピュートエンジン (ACE) コンピュートシェーダー (CS) パイプ スケーラブルグラフィックスエンジン グラフィックス (GFX) コマンドプロセッサー (GCP) ワークディストリビュータ コンピュートシェーダー (CS) パイプ プリミティブパイプ ハイオーダーサーフィス (HOS)AMD GRAPHIC CORE NEXT P.39 AMD 2011年7月 テッセレート ジオメトリ ピクセルパイプ スキャンコンバーション レンダーバックエンド (RB) コンピュートユニット (CU) / 統合シェーダーコア 命令フェッチ (IF) 調停