最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

coder.gpuConfig

GPU Coder を使用した MATLAB コードからの CUDA コード生成用の構成パラメーター

説明

coder.gpuConfig オブジェクトには、GPU Coder™ を使って CUDA® MEX、スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能プログラムを生成するために codegen で使用される構成パラメーターが含まれています。-config オプションを使用してこのオブジェクトを関数 codegen に渡します。

作成

説明

cfg = coder.gpuConfig(build_type) は、指定したビルド タイプのコード生成構成オブジェクトを作成します。このビルド タイプには、CUDA MEX、スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能プログラムを指定できます。Embedded Coder® 製品がインストールされている場合、スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能ファイルのビルド タイプ用の coder.EmbeddedCodeConfig オブジェクトを作成します。

cfg = coder.gpuConfig(build_type,'ecoder',false) は、Embedded Coder 製品がインストールされている場合でも CUDA 'lib''dll'、または 'exe' 出力を生成するためのコード生成構成オブジェクトを作成します。

cfg = coder.gpuConfig(build_type,'ecoder',true) は、Embedded Coder 製品がインストールされていない場合でも coder.EmbeddedCodeConfig 構成オブジェクトを作成します。ただし、coder.EmbeddedCodeConfig オブジェクトを使用したコード生成には、Embedded Coder のライセンスが必要です。

入力引数

すべて展開する

生成された CUDA C/C++ コードからビルドする出力。次の表のいずれかの値を指定します。

説明
'MEX'CUDA MEX
'LIB'スタティック ライブラリ
'DLL'ダイナミック リンク ライブラリ
'EXE'実行可能プログラム

プロパティ

すべて展開する

次の表のいずれかの値を使用した CUDA (*.cu) ファイルの生成制御。

説明
true

この値は既定値です。

CUDA コード生成を有効にします。

false

CUDA コード生成を無効にします。

例: cfg.GpuConfig.Enabled = true

生成された CUDA コードで使用されるメモリ割り当て (malloc) モード。次の表のいずれかの値を指定します。

説明
'discrete'

この値は既定値です。

生成コードでは、CPU と GPU 間でのデータ転送に cudaMalloc API が使用されます。プログラマの観点から見ると、この離散モードでは、個別の CPU および GPU のグローバル メモリ アドレス空間を使う従来のメモリ アーキテクチャが使用されます。

'unified'

生成コードでは、共有 (統合) された CPU および GPU グローバル メモリ アドレス空間を使う cudaMallocManaged API が使用されます。

詳細については、離散および管理モードを参照してください。

例: cfg.GpuConfig.MallocMode = 'discrete'

生成コードのすべてのカーネルに対してカスタム名の接頭辞を指定します。たとえば、値 'CUDA_' を使用すると、CUDA_kernel1CUDA_kernel2 などの名前のカーネルが作成されます。名前を指定しない場合、GPU Coder によって、カーネル名の先頭にエントリポイント関数の名前が追加されます。カーネル名には大文字、小文字、0 ~ 9 の数字、アンダースコア文字 _ を使用できます。GPU Coder は、サポートされていない文字をカーネル名から削除し、先頭がアルファベット文字でない接頭辞には alpha を追加します。

例: cfg.GpuConfig.KernelNamePrefix = 'myKernel'

数学関数の呼び出しと NVIDIA® cuBLAS ライブラリの呼び出しの置換。次の表のいずれかの値を指定します。

説明
true

この値は既定値です。

GPU Coder で、適切な数学関数の呼び出しを cuBLAS ライブラリの呼び出しと置き換えられるようにします。CUDA の置換先がない関数の場合、GPU Coder は移植可能な MATLAB® 関数を使用してそれらを GPU にマッピングすることを試みます。

false

生成コードにおける cuBLAS ライブラリの使用を無効にします。

詳細については、ライブラリの呼び出しのカーネルを参照してください。

例: cfg.GpuConfig.EnableCUBLAS = true

数学関数の呼び出しと NVIDIA cuSOLVER ライブラリの呼び出しの置換。次の表のいずれかの値を指定します。

説明
true

この値は既定値です。

GPU Coder で、適切な数学関数の呼び出しを cuSOLVER ライブラリの呼び出しと置き換えられるようにします。CUDA の置換先がない関数の場合、GPU Coder は移植可能な MATLAB 関数を使用してそれらを GPU にマッピングすることを試みます。

false

生成コードにおける cuSOLVER ライブラリの使用を無効にします。

詳細については、ライブラリの呼び出しのカーネルを参照してください。

例: cfg.GpuConfig.EnableCUSOLVER = true

関数 fft の呼び出しと NVIDIA cuFFT ライブラリの呼び出しの置換。次の表のいずれかの値を指定します。

説明
true

この値は既定値です。

GPU Coder で、適切な fft の呼び出しを cuFFT ライブラリの呼び出しと置き換えられるようにします。

false

生成コードにおける cuFFT ライブラリの使用を無効にします。このオプションを指定すると、GPU Coder は C FFTW ライブラリを使用する (利用可能な場合) か、移植可能な MATLAB fft コードからカーネルを生成します。

詳細については、ライブラリの呼び出しのカーネルを参照してください。

例: cfg.GpuConfig.EnableCUFFT = true

生成された CUDA コードへのベンチマーク コードの追加を制御します。次の表のいずれかの値を使用します。

説明
false

この値は既定値です。

生成された CUDA コードにベンチマーク機能は含まれません。

true

ベンチマーク機能を含む CUDA コードを生成します。このオプションは cudaEvent などの CUDA API を使用し、kernelmemcpy などのイベントの時間を正確に計測します。

例: cfg.GpuConfig.Benchmarking = true

生成された CUDA コードにエラー チェック機能を追加します。次の表のいずれかの値を使用します。

説明
false

この値は既定値です。

生成された CUDA コードにエラー チェック機能は含まれません。

true

CUDA API やカーネルの呼び出しに対するエラー チェックを使用してコードを生成します。

例: cfg.GpuConfig.SafeBuild = true

コード生成に最低限の Compute Capability を選択します。Compute Capability は、GPU ハードウェアでサポートされている機能を識別するものであり、現在の GPU で利用できるハードウェア機能や命令を判断するために実行時のアプリケーションで使用されます。カスタム Compute Capability を指定すると、GPU Coder はこの設定を無視します。

例: cfg.GpuConfig.ComputeCapability = '6.1'

それを対象に CUDA 入力ファイルをコンパイルしなければならない NVIDIA 仮想 GPU アーキテクチャの名前を指定します。

たとえば、仮想アーキテクチャ タイプ -arch=compute_50 を指定します。-arch=sm_50 を使用すると、実際のアーキテクチャを指定できます。詳細については、CUDA ツールキット ドキュメンテーションの「Options for Steering GPU Code Generation」トピックを参照してください。

例: cfg.GpuConfig.CustomComputeCapability = '-arch=compute_50'

GPU コンパイラに追加フラグを渡します。たとえば、--fmad=false は、nvcc コンパイラに対し、浮動小数点の乗算と加算を単一の浮動小数点積和演算 (FMAD) 命令へと縮約することを無効化するように指示します。

類似の NVIDIA コンパイラ オプションについては、CUDA ツールキット ドキュメンテーションの「NVCC Command Options」のトピックを参照してください。

例: cfg.GpuConfig.CompilerFlags = '--fmad=false'

GPU スレッドあたりの最大スタック制限を整数値で指定します。

例: cfg.GpuConfig.StackLimitPerThread = 1024

整数で指定したサイズを超えると、にプライベート変数が、スタックではなくヒープに割り当てられるようにします。

例: cfg.GpuConfig.MallocThreshold = 256

NVIDIA Drive プラットフォームなどのマルチ GPU 環境で、ターゲットにする CUDA デバイスを指定します。

例: cfg.GpuConfig.SelectCudaDevice = <DeviceID>

メモ

gpuDevice および SelectCudaDevice が同じ GPU を指している場合のみ、SelectCudaDevicegpuArray と共に使用できます。gpuDevice が別の GPU を指している場合、CUDA_ERROR_INVALID_VALUE ランタイム エラーがスローされます。

すべて折りたたむ

GPU コード生成に適した MATLAB 関数から CUDA MEX 関数を生成します。また、コード生成レポートも有効にします。

MATLAB 関数 VecAdd を書き込みます。この関数は、入力 A および B のベクトル加算を実行します。

function [C] = VecAdd(A,B) %#codegen
    C = coder.nullcopy(zeros(size(A)));
    coder.gpu.kernelfun();
    C = A + B;
end

MEX 関数を生成するためのコード生成構成オブジェクトを作成します。

cfg = coder.gpuConfig('mex');

コード生成レポートを有効にします。

cfg.GpuConfig.EnableCUBLAS = true;
cfg.GenerateReport = true;

-config オプションを使って構成オブジェクトを指定して、現在のフォルダーに MEX 関数を生成します。

% Generate a MEX function and code generation report
codegen -config cfg -args {zeros(512,512,'double'),zeros(512,512,'double')} VecAdd

R2017b で導入