CUDA
[Wikipedia|▼Menu]
.mw-parser-output .hatnote{margin:0.5em 0;padding:3px 2em;background-color:transparent;border-bottom:1px solid #a2a9b1;font-size:90%}

この項目では、コンピュータ関連技術について説明しています。"クーダ"と呼ばれることのあるアメリカ車については「プリムス・バラクーダ」をご覧ください。

CUDA開発元NVIDIA

最新版12.3 / 2023年10月20日 (6か月前) (2023-10-20)[1][2]
対応OSMicrosoft Windows, Linux, Android[3][4]
種別GPGPU
公式サイトCUDA Zone
テンプレートを表示

CUDA(Compute Unified Device Architecture:クーダ)とは、NVIDIAが開発・提供している、GPU向けの汎用並列コンピューティングプラットフォーム(並列コンピューティングアーキテクチャ)およびプログラミングモデルである[5][6][7]。専用のC/C++コンパイラ (nvcc) やライブラリ (API) などが提供されている。なおNVIDIA製GPUにおいては、OpenCL/DirectComputeなどの類似APIコールは、すべて共通のGPGPUプラットフォームであるCUDAを経由することになる[8]
概要CUDAの処理の流れ
1. メインメモリ(ホストメモリ)からデータをGPU用メモリ(デバイスメモリ)にコピーする。
2. CPUがGPUに対して処理を指示する。
3. GPUが必要なデータを取り込み各コアで並列実行する。
4. 結果をGPU用メモリからメインメモリにコピーする。
[9] [10]

もともとリアルタイムグラフィックス表示用途、特にゲームグラフィックス用途に特化したGPUを開発していたのがNVIDIAやATI (現AMD) であるが、プログラマブルシェーダーの発展によるプログラマビリティの向上を受け、その高い処理性能をグラフィックス以外にも活用できるようにするためにNVIDIAが開発した技術がCUDAである。このような汎用コンピューティング向けのGPU活用技術をGPGPU (General-Purpose computing on Graphics Processing Units) と呼ぶ。

GPU向けのプログラミング環境としてはHLSLGLSLNVIDIA Cgを用いたものもあるが、こちらはDirect3DもしくはOpenGLをバックエンドとするリアルタイムCG描画専用のプログラミング環境となっており、変数にGPU特有の型しか使えない(特に出力として用いるテクスチャメモリのフォーマットに制約が大きい)など汎用的なプログラムの記述は困難である。CUDAでは、HLSLやGLSLと異なり、よりC言語に近い構文および言語機能(ポインタなどを含む)を採用しており、またDirect3D/OpenGLといったバックエンドを使うことなくプログラムロジックを記述できるため、汎用コンピューティングに適している。

GPUはシンプルな演算ユニットを多数搭載しており、ピーク理論演算性能 (FLOPS) は同一価格帯のCPUをしのぐものもある。そのため、並列性や演算密度の高い処理を行なう場合、少数で複雑な構成を備えた同規模のCPUと比べて高い処理性能が出せる。その逆に複雑な分岐処理(演算密度の低い処理)はCPUと比較して苦手であり、またGPUへ入力データを供給する、あるいはGPUによる演算結果をCPU側へリードバックするには接続バス (PCI-Express) を通してデータを転送する必要があり、これがボトルネックとなりうる可能性もあるため、適用分野や問題を解くアルゴリズムを慎重に選ぶ必要がある[11]

また、CUDAで作成したプログラムを最大限最適化するためには、Warpや共有メモリなどのNVIDIA GPUデバイスアーキテクチャに関する深い知識も必要となる[12]

なお、CUDAの発表は2006年11月[13]、CUDA 1.0の提供開始は2007年7月[14]であり、後発のGPGPU関連技術にはOpenCL (1.0仕様公開は2008年[15]) やDirectCompute (DirectXコンピュートシェーダー。Windows 7/DirectX 11.0と同時に2009年に一般提供開始[16]) などが存在するが、それぞれ技術用語は異なるものの全体としてはCUDAに非常に似通った特徴を持つ。先発技術であるCUDAは、2014年時点で教育・研究機関での採用事例が多い[17]ほか、機械学習などの分野で産業界でも採用への取り組みが進んでいる[18]
対応言語

CUDA C はC言語C++の一部の構文のみ対応。C言語を拡張している。CUDA C/C++のソースコードの拡張子には通例.cuが使われ、ヘッダーの拡張子には.cuhが使われる[19]BLASインターフェイス経由でベクトル行列演算が可能(cuBLAS[20])。FFTライブラリ(cuFFT[21])も付属する。SDKとなるCUDA Toolkitには、CUDA実装によるC++向けのテンプレートベース並列アルゴリズムライブラリ「Thrust」も付属する[22]

なおCUDAバージョン7では、C++11規格のサポートが強化され、デバイスコードにおけるラムダ式の利用などが可能となっている[23] [24]。CUDAバージョン8では、機械学習向けのライブラリが強化され、Pascalアーキテクチャの固有機能を利用した拡張が多数追加された[25][26]


次ページ
記事の検索
おまかせリスト
▼オプションを表示
ブックマーク登録
mixiチェック!
Twitterに投稿
オプション/リンク一覧
話題のニュース
列車運行情報
暇つぶしWikipedia

Size:58 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)
担当:undef