CUDA
[Wikipedia|▼Menu]
□記事を途中から表示しています
[最初から表示]

なお、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) と呼ばれる統合開発環境向けのアドインも提供されている。
メリット・デメリット

ここでは従来のCPUベースのプログラミングとの比較ではなく、類似のGPGPU関連技術とCUDAとの比較を行なう。
メリット

CUDAはNVIDIAが独自に開発を進めているGPGPU技術であり、NVIDIA製のハードウェア性能を最大限引き出せるように設計されている[33]。CUDAを利用することで、NVIDIA製GPUに新しく実装されたハードウェア機能をいち早く活用することができる。例えばKepler世代以降のGPUで使用可能なWarpシャッフル命令を使用することで、共有メモリを介するよりもさらに高速な並列リダクションを実行することができる[34] [35]。CUDA同様の類似GPGPU技術として代表的なものはOpenCLDirectComputeが挙げられるが、いずれもハードウェアアーキテクチャを標準化しベンダーの違いを吸収するAPI層であるため、CUDAと比較すると抽象化の度合いは低いローレベルAPIではあるものの、ハードウェア特有の先進的機能を使った細やかなチューニングによりそのハードウェアの限界性能を引き出すのは難しい[36]

また、OpenCLやDirectComputeでは、カーネルと呼ばれるデバイス用並列処理プログラムコード片(並列実行の最小単位)を専用のOpenCL-CやHLSLといった言語で記述した上で、OpenCL APIやDirect3D APIを使用してカーネルを発行する必要があるため、準備のための手間が必要となるが、CUDAの場合はより抽象化されており、カーネルコードの発行をC/C++における通常の関数呼び出しに近い形で記述できるなど、より本質的なアプリケーションコードやアルゴリズムの実装のみに注力できるようになっている。


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

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