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]

CUDA FortranThe Portland Group (PGI) から提供されている[27]Fortran 2003 を拡張している[28]

NVIDIAのCUDAコンパイラnvcc自体はLLVMベースであり、新しいプログラミング言語や新しいプロセッサのサポートを追加するコンパイラSDKも提供されている[29]
言語バインディング

C言語以外からCUDAを呼べるようにしたバインディングがある。

Java - ⇒JCuda(JCublas, JCufft, JCurand, JCusparse, JCusolver, JNvgraph, JCudpp, JNpp, JCudnn)

Python - PyCUDA

Perl - KappaCUDA、CUDA::Minimal

他にも、Ruby, Lua, MATLAB, IDL, Mathematica などもある。
CUDA-X

NVIDIAはCUDA上で構築したライブラリの総称をCUDA-Xと呼んでいる。以下のものが含まれる。[30]

数学

cuBLAS - BLASのライブラリ

cuFFT - 高速フーリエ変換

CUDA Math Library

cuRAND - 疑似乱数生成

cuSOLVER - LAPACKに対応

cuSPARSE - 疎行列

cuTENSOR - テンソル(多次元配列)

cuDSS - 疎行列の AX = B を解くライブラリ

AmgX


並列アルゴリズム

Thrust


計算機リソグラフィ

cuLitho


画像と動画

CV-CUDA

nvJPEG

NVIDIA Performance Primitives

NVIDIA Video Codec SDK

NVIDIA Optical Flow SDK


通信ライブラリ

NVSHMEM

NCCL


ディープラーニング

NVIDIA cuDNN

NVIDIA TensorRT

NVIDIA Riva

NVIDIA DeepStream SDK

NVIDIA DALI


OpenGL/Direct3D相互運用

CUDAにはOpenGLおよびDirect3D 9/10/11との連携を可能にする相互運用APIが用意されている。詳しくは ⇒CUDA Runtime API :: CUDA Toolkit Documentation - 3.10. OpenGL Interoperability, ⇒CUDA Runtime API :: CUDA Toolkit Documentation - 3.16. Direct3D 11 Interoperabilityなどを参照のこと。
開発ツール

CUDA ToolkitにはVisual Profilerと呼ばれるパフォーマンス計測ツールが付属し、アプリケーションにおけるGPUの処理時間などの情報を収集して、性能改善に役立てることができる[31]。CUDA Toolkit 7.5では命令レベルでのプロファイリングがサポートされた[32]。Nsight (旧称Parallel Nsight) と呼ばれる統合開発環境向けのアドインも提供されている。


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

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