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 Fortran は The 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
他にも、Ruby, Lua, MATLAB, IDL, Mathematica などもある。 NVIDIAはCUDA上で構築したライブラリの総称をCUDA-Xと呼んでいる。以下のものが含まれる。[30] 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) と呼ばれる統合開発環境向けのアドインも提供されている。 ここでは従来のCPUベースのプログラミングとの比較ではなく、類似のGPGPU関連技術とCUDAとの比較を行なう。 CUDAはNVIDIAが独自に開発を進めているGPGPU技術であり、NVIDIA製のハードウェア性能を最大限引き出せるように設計されている[33]。CUDAを利用することで、NVIDIA製GPUに新しく実装されたハードウェア機能をいち早く活用することができる。例えばKepler世代以降のGPUで使用可能なWarpシャッフル命令を使用することで、共有メモリを介するよりもさらに高速な並列リダクションを実行することができる[34] [35]。CUDA同様の類似GPGPU技術として代表的なものはOpenCLやDirectComputeが挙げられるが、いずれもハードウェアアーキテクチャを標準化しベンダーの違いを吸収するAPI層であるため、CUDAと比較すると抽象化の度合いは低いローレベルAPIではあるものの、ハードウェア特有の先進的機能を使った細やかなチューニングによりそのハードウェアの限界性能を引き出すのは難しい[36]。 また、OpenCLやDirectComputeでは、カーネルと呼ばれるデバイス用並列処理プログラムコード片(並列実行の最小単位)を専用のOpenCL-CやHLSLといった言語で記述した上で、OpenCL APIやDirect3D APIを使用してカーネルを発行する必要があるため、準備のための手間が必要となるが、CUDAの場合はより抽象化されており、カーネルコードの発行をC/C++における通常の関数呼び出しに近い形で記述できるなど、より本質的なアプリケーションコードやアルゴリズムの実装のみに注力できるようになっている。
CUDA-X
数学
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相互運用
開発ツール
メリット・デメリット
メリット
Size:58 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef