CUDA
開発元 | NVIDIA |
---|---|
初版 | 2007年2月16日[1] |
最新版 |
12.6
/ 2024年8月1日[2] |
対応OS | Microsoft 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]。
概要
[編集]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向けのプログラミング環境としてはHLSLやGLSL、NVIDIA Cgを用いたものもあるが、こちらはDirect3DもしくはOpenGLをバックエンドとするリアルタイムCG描画専用のプログラミング環境となっており、変数の型にGPU特有の型しか使えない(特に出力として用いるテクスチャメモリのフォーマットに制約が大きい)など汎用的なプログラムの記述は困難である。CUDAでは、HLSLやGLSLと異なり、よりC言語に近い構文および言語機能(ポインタなどを含む)を採用しており、またDirect3D/OpenGLといったバックエンドを使うことなくプログラムロジックを記述できるため、汎用コンピューティングに適している。
GPUはシンプルな演算ユニットを多数搭載しており、ピーク理論演算性能 (FLOPS) は同一価格帯のCPUをしのぐものもある。そのため、並列性や演算密度の高い処理を行なう場合、少数で複雑な構成を備えた同規模のCPUと比べて高い処理性能が出せる。 その逆に複雑な分岐処理(演算密度の低い処理)はCPUと比較して苦手であり、またGPUへ入力データを供給する、あるいはGPUによる演算結果をCPU側へリードバックするには接続バス (PCI-Express) を通してデータを転送する必要があり、これがボトルネックとなりうる可能性もあるため、適用分野や問題を解くアルゴリズムを慎重に選ぶ必要がある[11]。
C++の場合、ほとんどの用途においてThrustなどのCUDA-Xで提供している高レベルAPIを使用すれば十分である。しかし、自前でCUDAカーネルを実装するなど、低レベルのAPIを使い始めると、作成したプログラムを最大限最適化するためには、Warpや共有メモリなどのNVIDIA GPUデバイスアーキテクチャに関する深い知識も必要となる[12]。行列積も並列scanも性能を最大限出すための並列アルゴリズムは複雑で、GPUの機種別の最適化も必要なため、専門的な実装が必要で、NVIDIA側がそれらを提供している。
CUDAと初対応のGeForce 8 シリーズ(G8x)の発表は2006年11月8日[13]、最初のCUDA SDKのβ版のリリース日は2007年2月16日[1]、CUDA 1.0の提供開始は2007年7月17日[14]であり、後発のGPGPU関連技術にはOpenCL (1.0仕様公開は2008年[15]) やDirectCompute (DirectXコンピュートシェーダー。Windows 7/DirectX 11.0と同時に2009年に一般提供開始[16]) などが存在するが、それぞれ技術用語は異なるものの全体としてはCUDAに非常に似通った特徴を持つ。先発技術であるCUDAは、2014年時点で教育・研究機関での採用事例が多い[17]ほか、機械学習などの分野で産業界でも採用への取り組みが進んでいる[18]。
対応プログラミング言語
[編集]NVIDIAとしては以下のプログラミング言語に対応している。[19]
- C++ - これが主要なCUDAの対応プログラミング言語である。コンパイラは nvcc および nvc++。
- C言語 - C++でないとCUDAの全ての機能が使えない。コンパイラは nvcc および nvc。
- Fortran - コンパイラは nvfortran
- Python[20] - 2025年現在実験段階。ディープラーニングからNVIDIA GPUを使用する人は主にPythonを使うこともあり、CUDAのPython対応も進められているが、C++には追いついていない。
SDKとしては以下の2種類を配布している。
- NVIDIA HPC Software Development Kit[21] - 概ねCUDA Toolkitの内容が含まれていて、Fortranのコンパイラなども含んでいる。
- NVIDIA CUDA Toolkit[22] - 付属するコンパイラはnvccのみ。
C/C++のライブラリとして、CUDA ToolkitやHPC SDKには、BLASインターフェイス経由でベクトル・行列演算が可能なcuBLAS[23]、FFTライブラリcuFFT[24]、STLベースの並列アルゴリズムライブラリThrustなどが付属している[25]。
NVIDIAのCUDAコンパイラnvcc自体はLLVMベースであり、新しいプログラミング言語や新しいプロセッサのサポートを追加するコンパイラSDKも提供されている[26]。
CUDA C/C++のソースコードの拡張子には通例.cuが使われ、ヘッダーの拡張子には.cuhが使われる[27]。
CUDAバージョン7では、C++11規格のサポートが強化され、デバイスコードにおけるラムダ式の利用などが可能となっている[28][29]。CUDAバージョン8では、機械学習向けのライブラリが強化され、Pascalアーキテクチャの固有機能を利用した拡張が多数追加された[30][31]。
言語バインディング
[編集]C++以外からCUDAを呼べるようにしたバインディングがある。ただし、CUDAの全ての機能が使えるのはC++である。
- Python
- NVIDIAが提供しているもの
- CUDA Python - 2025年現在、APIのほとんどにexperimentalがついているが、ThrustなどのPython対応が進められている。
- Numba CUDA - CUDAカーネルをPythonで実装できる。
- NVIDIA以外が提供しているもの
- NVIDIAが提供しているもの
- Java - JCuda(JCublas, JCufft, JCurand, JCusparse, JCusolver, JNvgraph, JCudpp, JNpp, JCudnn)
- Julia - CUDA.jl
- Rust - Rust CUDA
他にも、Ruby, Lua, MATLAB, IDL, Mathematica などもある。
NVIDIAが開発しているNumba CUDAでは、PythonのNVIDIA GPU上の多次元配列(テンソル)が満たすべきAPI (CUDA Array Interface) を定義していて、TensorFlow[32]以外のほとんどのライブラリがこれに対応しているため、相互に利用することが可能である。[33]
CUDA Core Compute Libraries
[編集]CUDA Core Compute Libraries (CCCL) はCUDAの標準ライブラリ。C++版とPython版がある。CUDA ToolkitやHPC SDKに同梱されている。[34]
それぞれ以下のものが含まれている。
- CUDA C++ Core Libraries[35]
- libcu++ - 標準C++ライブラリのCUDA版。
- Thrust - 並列アルゴリズムのライブラリ。CUBよりも高レベルAPI。NVIDIA GPUとCPUで動作する。
- CUB - 並列アルゴリズムのライブラリ。Thrustよりも低レベルAPI。CUDA専用。細かい制御が必要でなければThrustで十分である。
- CUDA Python Core Libraries - 2025年現在実験段階。[36]
- cuda.parallel - ThrustのPython対応
- cuda.cooperative - CUBのcooperativeアルゴリズムのPython対応
Thrust
[編集]Thrustは並列アルゴリズムのC++ライブラリ。C++17より並列アルゴリズムが標準C++ライブラリに追加になったが、それも、NVIDIAでは対応している[37]。
以下の高階関数などが実装されている。関数は多数あるが、以下はごく一部の一例である。
- 並列map - thrust::transform[38] (std::transform[39])
- 並列filter - thrust::copy_if[40] (std::copy_if[41])
- 並列fold - thrust::reduce[42] (std::reduce[43])。二項演算子が結合法則を満たすことが必要。
- 並列scan - thrust::inclusive_scan[44] (std::inclusive_scan[45]), thrust::exclusive_scan (std::exclusive_scan)。二項演算子が結合法則を満たすことが必要。詳細は累積和を参照。
- 並列sort - thrust::sort[46] (std::sort[47])
高階関数のコールバック関数は関数オブジェクトを渡す。糖衣構文のラムダ式も使えるが2025年現在は制限事項だらけの不完全実装である[48]。
並列foldや並列scanは、二項演算子の計算量が小さく、要素数が多い場合は、メモリ帯域がボトルネックとなり、メモリコピーの速度で動作する[49]。これらの前後に並列mapがあると余計なメモリコピーが発生し遅くなるため、transform_iteratorを使用することで、並列map → 並列X → 並列mapという処理を1つにまとめることができて、メモリコピー1回分の計算時間になる[50]。
CUDA-X
[編集]NVIDIAはCUDA上で構築したライブラリの総称をCUDA-Xと呼んでいる。以下のものが含まれる。[51]
- 数学
- 並列アルゴリズム
- Thrust (C++)
- 計算機リソグラフィ
- cuLitho
- 量子コンピュータ
- cuQuantum
- cuPQC
- データ処理
- RAPIDS
- RAPIDS cuDF - pandas (Python, C++, Java)
- RAPIDS Dask cuDF (Python, C++, Java)
- RAPIDS cuGraph (C, C++, Python)
- RAPIDS cuVS - ベクトル検索 (C, C++, Python, Rust)
- RAPIDS Accelerator for Apache Spark
- NVIDIA Merlin NVTabular
- NVIDIA Morpheus - サイバーセキュリティ
- NVIDIA GPUDirect Storage
- RAPIDS
- 画像と動画
- RAPIDS cuCIM (Compute Unified Device Architecture Clara IMage) - Python
- CV-CUDA (C, C++, Python)
- NVIDIA Data Loading Library (DALI) - 画像の読み込みとオーグメンテーション (Python)
- nvJPEG (C言語)
- NVIDIA Performance Primitives (C言語)
- NVIDIA Video Codec SDK (C言語)
- NVIDIA Optical Flow SDK (C言語)
- 通信ライブラリ
- NVSHMEM (C, Fortran)
- NCCL (C言語)
- ディープラーニング
- NVIDIA TensorRT (C++)
- NVIDIA cuDNN (C++, Python)
- NVIDIA Riva (Python)
- NVIDIA DeepStream SDK (C, C++, Python)
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の処理時間などの情報を収集して、性能改善に役立てることができる[52]。CUDA Toolkit 7.5では命令レベルでのプロファイリングがサポートされた[53]。Nsight (旧称Parallel Nsight) と呼ばれる統合開発環境向けのアドインも提供されている。
メリット・デメリット
[編集]ここでは従来のCPUベースのプログラミングとの比較ではなく、類似のGPGPU関連技術とCUDAとの比較を行なう。
メリット
[編集]CUDAはNVIDIAが独自に開発を進めているGPGPU技術であり、NVIDIA製のハードウェア性能を最大限引き出せるように設計されている[54]。CUDAを利用することで、NVIDIA製GPUに新しく実装されたハードウェア機能をいち早く活用することができる。例えばKepler世代以降のGPUで使用可能なWarpシャッフル命令を使用することで、共有メモリを介するよりもさらに高速な並列リダクションを実行することができる[55][56]。CUDA同様の類似GPGPU技術として代表的なものはOpenCLやDirectComputeが挙げられるが、いずれもハードウェアアーキテクチャを標準化しベンダーの違いを吸収するAPI層であるため、CUDAと比較すると抽象化の度合いは低いローレベルAPIではあるものの、ハードウェア特有の先進的機能を使った細やかなチューニングによりそのハードウェアの限界性能を引き出すのは難しい[57]。
また、OpenCLやDirectComputeでは、カーネルと呼ばれるデバイス用並列処理プログラムコード片(並列実行の最小単位)を専用のOpenCL-CやHLSLといった言語で記述した上で、OpenCL APIやDirect3D APIを使用してカーネルを発行する必要があるため、準備のための手間が必要となるが、CUDAの場合はより抽象化されており、カーネルコードの発行をC/C++における通常の関数呼び出しに近い形で記述できるなど、より本質的なアプリケーションコードやアルゴリズムの実装のみに注力できるようになっている。
デメリット
[編集]ハードウェアベンダーに依存しないOpenCLやDirectComputeと比較すると、CUDAはNVIDIA製のGPUでしか使えないという制約がある。このため、CUDAの機能に過度に依存したプログラムを書くと、アプリケーションのポーティング・移植が困難になる可能性がある(ベンダーロックイン)[58]。AMDはCUDAアプリケーションをAMDおよび他のGPUプラットフォーム向けにソースコードレベルで移植しやすくするためのC++用APIとして、HIP (Heterogeneous-Compute Interface for Portability) の提供を開始した[59][60]が、CUDAと完全な互換性を持っているわけではない。
また、最初からグラフィックス連携用途を想定して設計されたDirectComputeと比較すると、(相互運用APIが用意されているとはいえ)GPU演算結果をグラフィックス用途に直接利用する場合はオーバーヘッドが大きくなる[61]。
対応環境
[編集]ハードウェア
[編集]DirectX 10世代(G80世代)以降の統合型シェーダーアーキテクチャを採用したNVIDIA製GPUがCUDAに対応している[注釈 1]。
- NVIDIA GeForce 8シリーズ以降(一般/ゲーミング向け)
- NVIDIA Quadro G80ベース以降(ワークステーション向け)
- NVIDIA Tesla(ハイパフォーマンスコンピューティング/データセンター向け)
- NVIDIA Jetson(組み込み用)
- NVIDIA Tegra K1[注釈 2]以降(モバイル向けの統合型プロセッサ)
- NVIDIA ION(ネットブック/ネットトップデバイス用、サポート終了)
実行には専用のデバイスドライバーを必要とする。詳細は、 CUDA GPUs | NVIDIA Developer Zone を参照。なお、ハードウェアの世代/アーキテクチャ(Compute Capability, CC)によって利用可能なGPU命令やリソースサイズ上限、倍精度浮動小数点対応可否などの制約が異なる。また、上位のCCを持つハードウェアでは、下位のCC向けにコンパイルされたCUDAコードを実行できるが、その逆は不可能となっている。
PTX (Parallel Thread Execution)
[編集]CUDAは実行環境デバイスの世代(Compute Capability)に応じた専用バイナリコードを生成できるほかに、PTX (Parallel Thread Execution) と呼ばれるNVIDIA独自のGPU中間命令(中間言語)を生成することができる。PTXを利用することで、実行時にCUDAドライバーによって実行環境に合わせた最適なコードを生成することができるようになる[62]。
OS
[編集]CUDA Toolkit 6.5の対応OSは、Windows XP (32bit版のみ)、Windows 7、Windows 8.1、Windows Server 2008 R2、Windows Server 2012 R2、Fedora 20、OpenSUSE 13.1、RHEL (Red Hat Enterprise Linux) 5/6、CentOS 5/6、SLES (SUSE Linux Enterprise Server) 11-SP3、Ubuntu 12.04/14.04、Mac OS X 10.8/10.9/10.10である[63]。
CUDA Toolkit 7.0の対応OSは、Windows 7、Windows 8.1、Windows Server 2008 R2、Windows Server 2012 R2、Fedora 21、OpenSUSE 13.1/13.2、RHEL 6/7、CentOS 6/7、SLES 11/12、Ubuntu 12.04/14.04/14.10、OS X 10.9/10.10である[64]。
CUDA Toolkit 7.5の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2008 R2、Windows Server 2012 R2、Fedora 21、OpenSUSE 13.2、RHEL 6/7、CentOS 6/7、SLES 11/12、SteamOS 1.0-beta、Ubuntu 14.04/15.04、OS X 10.9/10.10/10.11である[65]。
CUDA Toolkit 8.0 GA2の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2008 R2、Windows Server 2012 R2、Windows Server 2016、Fedora 23、OpenSUSE 13.2、RHEL 6/7、CentOS 6/7、SLES 11/12、Ubuntu 14.04/16.04、OS X 10.11/10.12である[66]。
CUDA Toolkit 9.2の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2012 R2、Windows Server 2016、Fedora 27、OpenSUSE Leap 42.3、RHEL 6/7、CentOS 6/7、SLES 12、Ubuntu 16.04/17.10、OS X 10.13である[67]。
CUDA Toolkit 10.2の対応OSは、Windows 7、Windows 8.1、Windows 10、Windows Server 2012 R2、Windows Server 2016、Windows Server 2019、Fedora 29、OpenSUSE 15、RHEL 6/7/8、CentOS 6/7/8、SLES 1512 SP4、Ubuntu 16.04/18.04、OS X 10.13である[68]。
CUDA Toolkit 11.8の対応OSは、Windows 10、Windows 11、Windows Server 2016、Windows Server 2019、Windows Server 2022、Fedora 35、OpenSUSE 15、RHEL 7/8/9、CentOS 7、SLES 15、Ubuntu 18.04/20.04/22.04、Debian 11、KylinOS 10、Rocky 8/9、WSL-Ubuntu 2.0である[69]。CUDA Toolkit 11.0以降、macOSはサポート対象外となった[70][71][注釈 3]。ただしリモートデバッグ用のツールだけはmacOS上でもサポートされている[70][72][73]。
CUDA Toolkit 12.1の対応OSは、Windows 10、Windows 11、Windows Server 2019、Windows Server 2022、Fedora 37、OpenSUSE 15、RHEL 7/8/9、CentOS 7、SLES 15、Ubuntu 18.04/20.04/22.04、Debian 10/11、KylinOS 10、Rocky 8/9、WSL-Ubuntu 2.0である[74]。
NVIDIA OptiX
[編集]CUDA基盤上に実装されたプログラマブルGPUレイトレーシングエンジンとして、NVIDIAはOptiXを公開している[75]。OptiX 3.xまではFermi世代以降、OptiX 4.xはKepler世代以降のNVIDIA GPU上で利用可能[76]。OptiX 6/7はMaxwell世代以降のNVIDIA GPU上で利用可能[77]。なお、After Effects CCではレイトレーシングエンジンにOptiXを採用している[78]。
対応ソフトウェア
[編集]CUDAの演算処理技術を利用するには、上述のハードウェア・OSのサポートに加えて、アプリケーションが対応していることが必要。一部アプリケーションベンダーより対応ソフトが出ている。
- Freemake Video Converter (Free Make)(自由ソフトウェア)
- MediaCoder (MediaCoder)(自由ソフトウェア)
- LoiLoTouch (LoiLo)
- Super LoiLoScope (LoiLo)
- EDIUS
- VideoStudio (COREL)
- WinDVD (COREL)
- PowerDirector (CyberLink)
- PowerDVD (CyberLink)
- TMPGEnc (ペガシス)
- Adobe Photoshop CS4(アドビ)[79]
- Adobe After Effects CS4(アドビ)
- Adobe Premiere Pro CS4(アドビ)[80][81]
- Blender (GPLの自由ソフトウェア) [82]
- Vegas Pro 10 (Sony Creative Software)
- パスゲッター(インターナル)
- Any Video Converter(自由ソフトウェア・シェアソフトウェア)
分散コンピューティング
[編集]これらはBOINCクライアント上でCUDAを利用する。
- SETI@Home
- MilkyWay@home
- GPUGRID (PS3GRID)
- AQUA@home
- Folding@Home(このプロジェクトのみ、オリジナルのクライアントで動作)
MATLAB
[編集]MATLABとのコラボレーションもサポートされている。MATLABではParallel Computing Toolboxを介してGPUを使用できる[83]。重いプログラムスクリプト実行の高速化に寄与する。ただしCUDAの初期化およびメインメモリ-VRAM間のデータ転送に時間がかかるため、短いスクリプトの場合は逆にトータル処理時間でみるとCPUだけ使用するときよりも遅くなる場合もある。Intel Xeon X5650を使った場合と比べて、NVIDIA Tesla C2050を使うことでFFTが最大3.5倍高速化されたとの説明がある[84]。
OpenCV
[編集]OpenCV 2.2[85]でCUDAを使ったアクセラレータであるgpuモジュールが追加された。OpenCV 3.0ではcudaモジュールに改称された。
脚注
[編集]注釈
[編集]出典
[編集]- ^ a b “NVIDIA® CUDA™ Unleashes Power of GPU Computing - Press Release”. nvidia.com. 2025年1月26日閲覧。
- ^ "NVIDIA CUDA Toolkit Release Notes" (PDF). NVIDIA. NVIDIA. 1 August 2024. 2024年8月11日閲覧。
- ^ NVIDIA CodeWorks for Android | NVIDIA Developer
- ^ NVIDIA GameWorks Documentation - NVIDIA CUDA for Android
- ^ What Is CUDA | NVIDIA Official Blog
- ^ Accelerated Computing | NVIDIA Developer
- ^ 開発者向けのCUDA並列コンピューティングプラットフォーム | NVIDIA
- ^ 第3回 CUDAとGPUコンピューティングの広がり | Think IT
- ^ 日経エレクトロニクス 2007/10/8 「プロセサはマルチ×マルチへ」
- ^ 第7回 CUDAプログラミングモデル② | G-DEP:
- ^ HPCシンポジウムで見えたTSUBAME2.0の設計思想 (1) ポストペタスケールへ向けGPUをどう活用していくのか
- ^ 第6回 CUDAプログラミングモデル① | G-DEP
- ^ NVIDIA Unveils CUDA™-The GPU Computing Revolution Begins | Press Release | NVIDIA
- ^ NVIDIA CUDA 1.0、GPUコンピューティング向けに機能を強化 | NVIDIA
- ^ 並列プログラミング規格「OpenCL 1.0」が標準として批准 - @IT
- ^ 西川善司の3Dゲームファンのためのグラフィックス講座。台頭するDirectCompute技術 - GAME Watch
- ^ NVIDIA GPUコンピューティング応用事例のご紹介
- ^ 【GTC2014】NVIDIA、基調講演でCUDAを自動車にもたらす開発キット「JETSON TK1」の提供開始など発表 / NVLink、3Dメモリで、帯域幅問題を解消する新GPU「Pascal(パスカル)」も計画 - Car Watch
- ^ “NVIDIA HPC SDK Version 25.1 Documentation — HPC SDK 25.1 documentation”. 2025年3月18日閲覧。
- ^ “CUDA Python 12.8.0 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “HPC SDK”. NVIDIA Developer. 2025年3月18日閲覧。
- ^ “CUDA Toolkit - Free Tools and Training”. NVIDIA Developer. 2025年3月18日閲覧。
- ^ cuBLAS - NVIDIA CUDA ZONE
- ^ cuFFT - NVIDIA CUDA ZONE
- ^ Thrust - NVIDIA CUDA ZONE
- ^ CUDA LLVM Compiler | NVIDIA Developer
- ^ “2.3. Supported Input File Suffixes — NVIDIA CUDA Compiler Driver 12.8 documentation”. 2025年3月18日閲覧。
- ^ NVIDIA Pushes CUDA 7 RC With C++11 Features, Runtime Compilation - Phoronix
- ^ The Power of C++11 Programming in CUDA 7 | Parallel Forall
- ^ CUDA 8 PERFORMANCE OVERVIEW - November 2016, NVIDIA
- ^ CUDA 8.0 新機能のご紹介 - GTC Japan 2016
- ^ “Support the __cuda_array_interface__ protocol · Issue #29039 · tensorflow/tensorflow”. 2025年3月18日閲覧。
- ^ “CUDA Array Interface (Version 3) — Numba CUDA documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “CUDA Core Compute Libraries — cccl 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “CUDA C++ Core Libraries — cccl 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “CUDA Python Core Libraries — cccl 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ NVIDIA HPC Compilers C++ Parallel Algorithm
- ^ “thrust::transform — thrust 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “std::transform - cppreference.com”. en.cppreference.com. 2025年3月18日閲覧。
- ^ “thrust::copy_if — thrust 3.0 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “std::copy, std::copy_if - cppreference.com”. en.cppreference.com. 2025年3月18日閲覧。
- ^ “thrust::reduce — thrust 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “std::reduce - cppreference.com”. en.cppreference.com. 2025年3月18日閲覧。
- ^ “thrust::inclusive_scan — thrust 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “std::inclusive_scan - cppreference.com”. en.cppreference.com. 2025年3月18日閲覧。
- ^ “thrust::sort — thrust 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “std::sort - cppreference.com”. en.cppreference.com. 2025年3月18日閲覧。
- ^ “14.7.2. Extended Lambda Restrictions — CUDA C++ Programming Guide”. 2025年3月18日閲覧。
- ^ “Single-pass Parallel Prefix Scan with Decoupled Look-back | Research”. research.nvidia.com. 2025年3月17日閲覧。
- ^ “thrust::transform_iterator — thrust 2.5 documentation”. nvidia.github.io. 2025年3月18日閲覧。
- ^ “CUDA-X”. NVIDIA Developer. 2024年3月11日閲覧。
- ^ 第3回 CUDAとGPUコンピューティングの広がり | Think IT(シンクイット)
- ^ CUDA 7.5: Pinpoint Performance Problems with Instruction-Level Profiling | Parallel Forall
- ^ コンパイラ、そしてもっと:アクセラレーター・プログラミング
- ^ Faster Parallel Reductions on Kepler | Parallel Forall
- ^ Kepler GPUアーキテクチャとプログラム最適化 (10) Keplerから搭載されたレジスタ内のデータの入れ替え命令 | マイナビニュース
- ^ 第3回 CUDAとGPUコンピューティングの広がり | Think IT
- ^ ASCII.jp:OpenCLでCUDAを追撃!? AMD「ATI Stream」が狙うものは
- ^ AMDがSC15にて、「Boltzmann Initiative」を発表 – AMD GPU用C++とCUDAコンパイラー - 株式会社エーキューブ
- ^ HIP : C++ Heterogeneous-Compute Interface for Portability - GPUOpen
- ^ SIGGRAPH ASIA 2009 - 非プラットフォーム依存パラレルの本命、「OpenCL」最新事情 (6) OpenCLはCUDAやDirectComputeと競合するのか | マイナビニュース
- ^ "GeForceの父" David Kirk博士、東大で並列コンピューティングについて講演 (4) CUDAの動作の仕組み | マイナビニュース
- ^ CUDA Toolkit 6.5
- ^ CUDA 7.0 Downloads | NVIDIA Developer
- ^ CUDA 7.5 Downloads Archive | NVIDIA Developer
- ^ CUDA Toolkit 8.0 - Feb 2017 | NVIDIA Developer
- ^ CUDA Toolkit 9.2 Download | NVIDIA Developer
- ^ CUDA Toolkit 10.2 Download | NVIDIA Developer
- ^ CUDA Toolkit 11.8 Downloads | NVIDIA Developer
- ^ a b Release Notes :: CUDA Toolkit Documentation (v11.0)
- ^ “NVIDIA CUDA Toolkit Release Notes”. CUDA Toolkit Documentation. 2020年7月26日閲覧。
- ^ Installation Guide Mac OS X :: CUDA Toolkit Documentation
- ^ NVIDIA CUDA Toolkit - Developer Tools for macOS | NVIDIA Developer
- ^ CUDA Toolkit 12.1 Downloads | NVIDIA Developer
- ^ NVIDIA® OptiX™ Ray Tracing Engine
- ^ NVIDIA OptiX™ Legacy Downloads | NVIDIA Developer
- ^ How to Get Started with OptiX 7 | NVIDIA Technical Blog
- ^ GPU changes (for CUDA and OpenGL) in After Effects CC (12.1) | After Effects region of interest
- ^ 4Gamer.net ― NVIDIA製GPUが「Photoshop」「After Effects」「Premiere Pro」の最新版「CS4」アクセラレーションをサポート。ムービーでその効果をチェック
- ^ Premiere Pro CCでは、2基のNVIDIA Quadro M6000上でCUDAを活用することで、1基のIntel Xeon E5-2697 v3を用いる場合と比較して、最大で24倍の速度性能向上を提供できるとしている。Adobe Premiere Pro CC – さらにスピーディーなビデオ編集 | NVIDIA
- ^ ただし、CUDAによって必ずしも処理が高速化するわけではない。CUDA/OpenCL/Mercury Playback Engine について(Adobe Premiere Pro)
- ^ Doc:JA/2.6/Manual/Render/Cycles/GPU Rendering - BlenderWiki
- ^ NVIDIA CUDA に対応した GPU に対する MATLAB GPU 演算のサポート - MATLAB & Simulink
- ^ Using GPUs in MATLAB » Loren on the Art of MATLAB
- ^ OpenCV 2.2 Released - ROS robotics news
関連項目
[編集]- NVIDIA Tesla
- NVIDIA Quadro
- NVIDIA GeForce
- ハイパフォーマンスコンピューティング
- コンパイラ
- GPGPU
- OpenCL
- DirectCompute
- Metal (API)
- Vulkan (API)
- AMD Stream (旧ATI Stream) - AMD (旧ATI社) のRadeon、FirePro、FireStreamを使用したGPGPUの競合テクノロジー
関連書籍
[編集]- 青木尊之、額田彰『はじめてのCUDAプログラミング』工学社〈I/O books〉、2009年11月。ISBN 978-4777514779。 NCID BB00109838。
- 岡田賢治 著、小山田耕二・監修 編『CUDA高速GPUプログラミング入門』秀和システム、2010年3月。ISBN 978-4-7980-2578-0。 NCID BB01650115。
- Jason Sanders; Edward Kandrot (2011). CUDA by example : an introduction to general-purpose GPU programming. Addison-Wesley. ISBN 978-0-13-138768-3. OCLC 535495666
- Jason Sanders, Edward Kandrot:『CUDA by Example: An Introduction to General-Purpose GPU Programming:汎用GPUプログラミング入門』, インプレスジャパン、ISBN 978-4-8443-2978-7 (2011年2月11日).
- 伊藤智義・編 編『GPUプログラミング入門 = Introduction to GPU Programming : CUDA5による実装』講談社、2013年5月。ISBN 978-4-06-153820-7。
- David B. Kirk, Wen-mei W. Hwu: Programming Massively Parallel Processors: A Hands-on Approach, Morgan Kaufmann, ISBN 978-0-12-381472-2 (2010).
- Rob Farber: CUDA Application Design and Development, Morgan Kaufmann, ISBN 978-0-12-388426-8 (2011).
- Shane Cook: CUDA Programming: A Developer's Guide to Parallel Computing with GPUs, Morgan Kaufmann, ISBN 978-0-12-415933-4 (2013).
- John Cheng, Max Grossman, Ty Mckercher: 『CUDA C プロフェッショナルプログラミング』, インプレス、ISBN 978-4-8443-3891-8 (2014年9月21日).
- Gregory Ruetsch, Massimiliano Fatica: CUDA Fortran for Scientists and Engineers, Morgan Kaufmann, ISBN 978-0-12-416970-8 (2014).