CUDA ツールキットの機能をデモする CUDA 開発者向けのサンプル。このバージョンは CUDA ツールキット 12.5 をサポートします。
このセクションでは、GitHub 上の CUDA サンプルのみのリリース ノートについて説明します。
対応するプラットフォーム用の CUDA Toolkit 12.5 をダウンロードしてインストールします。 cuda ツールキットのシステム要件とインストール手順については、Linux インストール ガイドおよび Windows インストール ガイドを参照してください。
git clone を使用して、以下のコマンドを使用して CUDA サンプルのリポジトリを作成します。
git clone https://github.com/NVIDIA/cuda-samples.git
git を使用せずにこれらのサンプルを使用する最も簡単な方法は、リポジトリ ページの [Download ZIP] ボタンをクリックして、現在のバージョンを含む zip ファイルをダウンロードすることです。その後、アーカイブ全体を解凍してサンプルを使用できます。
Windows サンプルは、Visual Studio IDE を使用して構築されています。ソリューション ファイル (.sln) は、サポートされている Visual Studio バージョンごとに、次の形式で提供されます。
*_vs<version>.sln - for Visual Studio <version>
完全なサンプル ソリューション ファイルは、リポジトリの親ディレクトリに存在します。
個々のサンプルには<CUDA_SAMPLES_REPO>Samples<sample_dir>
に独自のソリューション ファイルのセットがあります。
すべてのサンプルを一度に構築/検査するには、完全なソリューション ファイルを使用する必要があります。単一のサンプルを構築/検査するには、個々のサンプル ソリューション ファイルを使用する必要があります。
Linux サンプルは Makefile を使用してビルドされます。 Makefile を使用するには、現在のディレクトリをビルドしたいサンプル ディレクトリに変更し、make を実行します。
$ cd <sample_dir>
$ make
サンプルの Makefile では、特定のオプションを利用できます。
TARGET_ARCH= - 特定のアーキテクチャをターゲットにしたクロスコンパイル。許可されるアーキテクチャは、x86_64、ppc64le、armv7l、aarch64 です。デフォルトでは、TARGET_ARCH は HOST_ARCH に設定されます。 x86_64 マシンでは、TARGET_ARCH を設定しないことは、TARGET_ARCH=x86_64 を設定することと同じです。
$ make TARGET_ARCH=x86_64
$ make TARGET_ARCH=ppc64le
$ make TARGET_ARCH=armv7l
$ make TARGET_ARCH=aarch64
cuda サンプルのクロスプラットフォーム コンパイルの詳細については、ここを参照してください。
dbg=1 - デバッグ シンボルを使用してビルドします
$ make dbg=1
SMS="AB ..." - サンプルが構築される SM アーキテクチャをオーバーライドします。ここで、 "AB ..."
は SM アーキテクチャのスペース区切りのリストです。たとえば、SM 50 および SM 60 の SASS を生成するには、 SMS="50 60"
を使用します。
$ make SMS="50 60"
HOST_COMPILER=<host_compiler> - デフォルトの g++ ホスト コンパイラをオーバーライドします。サポートされているホスト コンパイラのリストについては、『Linux インストール ガイド』を参照してください。
$ make HOST_COMPILER=g++
CUDA および CUDA ランタイム API の使用に関する重要な概念を説明する初心者向けの基本的な CUDA サンプル。
デバイスの機能をクエリし、GPU/CPU 帯域幅を測定する方法を示すユーティリティ サンプル。
CUDA 関連の概念と一般的な問題解決手法を示すサンプル。
CUDA 機能 (協調グループ、CUDA 動的並列処理、CUDA グラフなど) を示すサンプル。
CUDA プラットフォーム ライブラリ (NPP、NVJPEG、NVGRAPH cuBLAS、cuFFT、cuSPARSE、cuSOLVER、および cuRAND) の使用方法を示すサンプル。
ドメイン (グラフィックス、財務、画像処理) に固有のサンプル。
パフォーマンスの最適化を示すサンプル。
libNVVVM と NVVM IR の使用法を示すサンプル。
一部の CUDA サンプルは、ビルドまたは実行するために、サードパーティのアプリケーションやライブラリ、または CUDA ツールキットおよびドライバーによって提供される機能に依存しています。これらの依存関係を以下に示します。
サンプルにシステム上で利用可能なサードパーティの依存関係があり、インストールされていない場合、サンプルはビルド時に自動的に放棄されます。
各サンプルの依存関係は、README の「依存関係」セクションにリストされています。
これらのサードパーティの依存関係は、一部の CUDA サンプルで必要となります。利用可能な場合、これらの依存関係はシステムに自動的にインストールされるか、システムのパッケージ マネージャー (Linux) またはサードパーティの Web サイト経由でインストールできます。
FreeImage は、オープンソースの画像ライブラリです。 FreeImage は通常、ディストリビューションのパッケージ マネージャー システムを使用して Linux にインストールできます。 FreeImage は、FreeImage Web サイトからダウンロードすることもできます。
Windows システム上で FreeImage をセットアップするには、FreeImage DLL ディストリビューションを../../../Common/FreeImage/Dist/x64
フォルダーに抽出し、.h ファイルと .lib ファイルが含まれるようにします。 .dll ファイルをルート レベルのbin/win64/Debug
とbin/win64/Release
フォルダーにコピーします。
MPI (Message Passing Interface) は、分散プロセス間でデータを通信するための API です。 MPI コンパイラーは、Linux ディストリビューションのパッケージ マネージャー システムを使用してインストールできます。 Open MPI などの一部のオンライン リソースでも入手できます。 Windows では、MPI-CUDA アプリケーションを構築して実行するには、MS-MPI SDK をインストールします。
一部のサンプルは 64 ビット オペレーティング システムでのみ実行できます。
DirectX は、Microsoft プラットフォーム上でマルチメディア アプリケーションを開発できるように設計された API のコレクションです。 Microsoft プラットフォームの場合、NVIDIA の CUDA ドライバーは DirectX をサポートします。 Windows 用のいくつかの CUDA サンプルは CUDA-DirectX の相互運用性を示しています。このようなサンプルを構築するには、Windows 8 用の Microsoft Windows SDK を提供する Microsoft Visual Studio 2012 以降をインストールする必要があります。
DirectX 12 は、ドライバーのオーバーヘッドを削減できる高度な低レベル プログラミング API のコレクションであり、Windows 10 OS 以降の Microsoft プラットフォームでマルチメディア アプリケーションを開発できるように設計されています。 Microsoft プラットフォームの場合、NVIDIA の CUDA ドライバーは DirectX をサポートします。 Windows 用の CUDA サンプルでは、CUDA-DirectX12 の相互運用性を実証するものがほとんどありません。このようなサンプルを構築するには、Windows 10 SDK 以降を VS 2015 または VS 2017 とともにインストールする必要があります。
OpenGL は、2D および 3D レンダリングに使用されるグラフィックス ライブラリです。 OpenGL をサポートするシステムでは、NVIDIA の OpenGL 実装が CUDA ドライバーとともに提供されます。
OpenGL ES は、2D および 3D レンダリングに使用される組み込みシステム グラフィック ライブラリです。 OpenGL ES をサポートするシステムでは、NVIDIA の OpenGL ES 実装が CUDA ドライバーとともに提供されます。
Vulkan は、オーバーヘッドが低い、クロスプラットフォームの 3D グラフィックスおよびコンピューティング API です。 Vulkan は、ビデオ ゲームやインタラクティブ メディアなど、あらゆるプラットフォームにわたる高性能リアルタイム 3D グラフィックス アプリケーションをターゲットとしています。 Vulkan をサポートするシステムでは、NVIDIA の Vulkan 実装が CUDA ドライバーとともに提供されます。 Vulkan アプリケーションを構築して実行するには、Vulkan SDK をインストールする必要があります。
OpenMP はマルチプロセッサ プログラミング用の API です。 OpenMP は、Linux ディストリビューションのパッケージ マネージャー システムを使用してインストールできます。通常、GCC がプリインストールされています。 OpenMP の Web サイトにもあります。
Screen は、QNX オペレーティング システムにあるウィンドウ システムです。 Screen は通常、ルート ファイルシステムの一部として見つかります。
X11 は、*-nix スタイルのオペレーティング システムで一般的に見られるウィンドウ システムです。 X11 は、Linux ディストリビューションのパッケージ マネージャーを使用してインストールでき、Mac OS X システムにはプレインストールされています。
EGL は、Khronos レンダリング API (OpenGL、OpenGL ES、OpenVG など) と基盤となるネイティブ プラットフォーム ウィンドウ システムの間のインターフェイスです。
EGLOutput は、EGL がディスプレイに直接レンダリングできるようにする EGL 拡張機能のセットです。
EGLSync は、完了をテストまたは待機できるイベントを表す、同期プリミティブである同期オブジェクトを提供する EGL 拡張機能のセットです。
NvSci は、CUDA が NvSciBuf および NvSciSync と相互運用する通信インターフェイス ライブラリのセットです。 NvSciBuf を使用すると、アプリケーションはメモリ内でバッファを割り当て、交換できるようになります。 NvSciSync を使用すると、アプリケーションは一連の操作の開始と終了を調整する同期オブジェクトを管理できます。
NvMedia は、NVIDIA Tegra デバイス全体で真のハードウェア アクセラレーションを実現するマルチメディア データの強力な処理を提供します。アプリケーションは、NvMedia アプリケーション プログラミング インターフェイス (API) を利用して、画像およびビデオ データを処理します。
これらの CUDA 機能は、一部の CUDA サンプルで必要となります。これらは、CUDA ツールキットまたは CUDA ドライバーのいずれかによって提供されます。一部の機能はお使いのシステムでは利用できない場合があります。
CUFFT コールバック ルーチンは、データのロードまたは保存時に CUFFT が呼び出すユーザー指定のカーネル ルーチンです。これらのコールバック ルーチンは、Linux x86_64 および ppc64le システムでのみ使用できます。
CDP (CUDA Dynamic Parallellism) を使用すると、GPU 上で実行されているスレッドからカーネルを起動できます。 CDP は、SM アーキテクチャ 3.5 以降の GPU でのみ使用できます。
マルチ ブロック協調グループ (MBCG) は、協調グループと CUDA プログラミング モデルを拡張して、スレッドブロック間の同期を表現します。 MBCG は、Pascal 以降のアーキテクチャを備えた GPU で利用できます。
マルチデバイス協調グループは、協調グループと CUDA プログラミング モデルを拡張し、複数の GPU で実行されるスレッド ブロックが実行時に連携および同期できるようにします。この機能は、Pascal 以降のアーキテクチャを備えた GPU で利用できます。
CUBLAS (CUDA 基本線形代数サブルーチン) は、BLAS ライブラリの GPU 高速化バージョンです。
IPC (プロセス間通信) を使用すると、プロセスがデバイス ポインターを共有できるようになります。
CUFFT (CUDA 高速フーリエ変換) は、GPU で高速化された FFT ライブラリです。
CURAND (CUDA Random Number Generation) は、GPU で高速化された RNG ライブラリです。
CUSPARSE (CUDA Sparse Matrix) は、疎行列の計算に使用される線形代数サブルーチンを提供します。
CUSOLVER ライブラリは、CUBLAS および CUSPARSE ライブラリに基づく高レベルのパッケージです。 3 つの個別のライブラリを 1 つの傘の下に結合し、それぞれを独立して使用することも、他のツールキット ライブラリと連携して使用することもできます。 CUSOLVER の目的は、一般的な行列因数分解や密行列の三角解法ルーチン、疎最小二乗ソルバー、固有値ソルバーなどの便利な LAPACK のような機能を提供することです。さらに、cuSolver は、共有スパース パターンを使用して行列のシーケンスを解くのに役立つ新しいリファクタライゼーション ライブラリを提供します。
NPP (NVIDIA Performance Primitives) は、GPU で高速化された画像、ビデオ、および信号処理機能を提供します。
NVGRAPH は、GPU で高速化されたグラフ分析ライブラリです。
NVJPEG ライブラリは、ディープ ラーニングやハイパースケール マルチメディア アプリケーションで一般的に使用される画像形式に対して、高性能の GPU アクセラレーションによる JPEG デコード機能を提供します。
NVRTC (CUDA RunTime Compilation) は、CUDA C++ 用のランタイム コンパイル ライブラリです。
ストリーム優先度を使用すると、指定した優先度を持つストリームを作成できます。ストリーム優先度は、SM アーキテクチャ 3.5 以降の GPU でのみ使用できます。
UVM (統合仮想メモリ) により、CPU と GPU の間で明示的にコピーすることなく、両方からメモリにアクセスできるようになります。 UVM は Linux および Windows システムでのみ使用できます。
FP16 は 16 ビット浮動小数点フォーマットです。符号に 1 ビット、指数に 5 ビット、仮数に 10 ビットが使用されます。
C++11 機能の NVCC サポート。
libNVVM サンプルは、CMake 3.10 以降を使用してビルドされます。
問題に関するご意見やサンプルに関するご提案をお待ちしております。現時点では、一般からの貢献は受け付けていません。貢献モデルを進化させる際には、ここを再度確認してください。
すべてのソースに Google C++ スタイル ガイドを使用します https://google.github.io/styleguide/cppguide.html
CUDA に関するよくある質問への回答は、http://developer.nvidia.com/cuda-faq および CUDA Toolkit リリース ノートで見つけることができます。