Main Content

mexcuda

GPU 計算用の MEX 関数または PTX ファイルのコンパイル

説明

mexcuda filenames は、ソース ファイルをコンパイルして、MATLAB® 内から実行可能な MEX ファイルと呼ばれる共有ライブラリにリンクします。この関数は CUDA® C++ フレームワークを使用して作成された MEX ファイルを NVIDIA®nvcc コンパイラでコンパイルすることで、これらのファイルでの GPU カーネルの定義と起動が可能になります。また、関数 mexcuda は GPU MEX API を表示し、MEX ファイルによる GPU 配列の読み取りと書き込みを可能にします。

mexcuda は MATLAB 関数 mex の拡張です。mexcuda は、関数 mex によってサポートされるコンパイラの一部のみをサポートします。詳細については、サポートされるホスト コンパイラを参照してください。

mexcuda option1 ... optionN filenames は、指定されたビルド オプションを使用してビルドします。option1 ... optionN 引数は、既定の mexcuda ビルド構成を補足するかオーバーライドします。mexcuda では、mex で使用できるほとんどのオプションを使用できます。

すべて折りたたむ

単純な MEX 関数をコンパイルして、CUDA C++ のソース ファイルから関数 myMexFunction を作成します。

mexcuda myMexFunction.cu

ソース ファイルの例は、matlabroot/toolbox/parallel/gpu/extern/src/mex/mexGPUExample.cu で入手できます。

CUDA C++ ソース ファイルから PTX ファイルをコンパイルします。 (R2023a 以降)

mexcuda -ptx myMexFunction.cu

R2023a より前: 関数 mexcuda ではなく、NVIDIA CUDA ツールキット内の nvcc コンパイラを使用して PTX ファイルをコンパイルします。

コンパイルやリンクのコマンドおよびトラブルシューティングに役立つその他の情報を表示するには、詳細モードを使用します。

mexcuda -v myMexFunction.cu

1 つのコマンドで複数のソース ファイルをコンパイルしてリンクします。

mexcuda myMexFunction.cu otherSource1.cpp otherSource2.cpp

はじめにコンパイルを行い、次にリンクして関数を作成します。

mexcuda -c myMexFunction.cu
mexcuda myMexFunction.obj

1 行目で myMexFunction.obj (Windows®) または myMexFunction.o (UNIX®) にコンパイルし、2 行目でリンクして関数 myMexFunction を作成します。

動的パラレル化を使用するコードをコンパイルして、他のカーネルを起動するカーネルを定義します。

mexcuda -dynamic myMexFunction.cu

CUDA イメージ プリミティブ ライブラリ npp を使用する MEX 関数をコンパイルします。このライブラリは、C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64\nppi.lib にインストールされています。

mexcuda '-LC:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\lib\x64' -lnppi myMexFunction.cu 

入力引数

すべて折りたたむ

名前とファイル拡張子を含む 1 つ以上のファイル名。文字ベクトルとして指定します。ファイルが現在のフォルダーにない場合は、ファイルへの絶対パスを指定します。ファイル名には、以下を任意に組み合わせることができます。

  • C または C++ 言語のソース ファイル

  • オブジェクト ファイル

  • ライブラリ ファイル

filenames のリストに最初に現れるソース コード ファイルが、バイナリ MEX ファイルの名前になります。この命名規則をオーバーライドするには、'-output' オプションを使用します。

データ型: char

1 つ以上のビルド オプション。以下のいずれかの値として指定します。オプションは、指示がある場合を除き、任意のプラットフォームで任意の順序で指定できます。

関数 mex で使用できるほとんどのオプションがサポートされています。これに加えて、以下のオプションも使用できます。

オプション説明

-dynamic

動的パラレル化: 他のカーネルを起動するカーネルを定義する MEX ファイルをコンパイルします。

-ptx (R2023a 以降)

並列スレッド実行ファイル (.ptx) を生成します。生成された PTX ファイルを CUDAKernel で使用して、MATLAB から直接カーネルを実行できます。MEX ファイルはコンパイルしません。

-G

デバイス コードのデバッグ情報を生成します。これにより、NVIDIA のデバッグ アプリケーションのいずれか (NSight または cuda-gdb) で、カーネル コードを行単位でステップ実行できるようになります。ホスト コードのデバッグを有効にするには、-g を使用します。

関数 mex の以下のオプションはサポートされていません。

オプション理由

-compatibleArrayDims

MATLAB の大規模配列ハンドリング API の使用は暗黙的であり、オーバーライドできません。

mex の他のすべてのオプションは、mexcuda でサポートされています。詳細については、mex のドキュメンテーションを参照してください。

ヒント

  • MATLAB と共にインストールされる CUDA ツールキットには、CUDA ツールキットで使用可能なすべてのライブラリが含まれているわけではありません。MATLAB と共にインストールされていない特定のライブラリを使用するには、CUDA ツールキットをインストールします。gpuDevice を使用して、MATLAB でサポートされる CUDA ツールキットのバージョンをチェックできます。CUDA ツールキットの詳細については、CUDA ツールキットのインストール (オプション)を参照してください。

  • CUDA ツールキットが検出されないか、サポートされているバージョンでない場合、mexcuda は MATLAB と共にインストールされる NVIDIA nvcc コンパイラを使用して CUDA コードをコンパイルします。mexcuda が使用しているコンパイラを確認するには、mexcuda コマンドで詳細出力を得るための -v フラグを使用します。

  • 既定ではない場所に CUDA ツールキットをインストールした場合は、システム上の nvcc の場所を環境変数 MW_NVCC_PATH に保存して指定できます。この変数を設定するには MATLAB コマンド setenv を使用します。以下に例を示します。

    setenv("MW_NVCC_PATH","/usr/local/CUDA/bin")

バージョン履歴

R2015b で導入