Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

coder.gpuConfig

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

説明

coder.GpuCodeConfig オブジェクトまたは 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 コードからビルドする出力。次の表のいずれかの値を指定します。

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

プロパティ

すべて展開する

coder.GpuConfig には、コード構成オブジェクトの GPU 固有の構成パラメーターのみが含まれます。コード構成オブジェクトのすべてのプロパティを表示するには、coder.CodeConfig および coder.EmbeddedCodeConfig を参照してください。

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

説明
true

この値は既定値です。

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

false

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

例: cfg.GpuConfig.Enabled = true

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

説明
'discrete'

この値は既定値です。

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

'unified'

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

NVIDIA® 組み込みターゲットの場合のみ。ホストでの unified メモリ割り当てモードのサポートの廃止を参照してください。

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

例: 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 はこの設定を無視します。

コード生成のための CUDA Compute Capability の要件については、以下の表を参照してください。

TargetCompute Capability

CUDA MEX

リリース別の GPU サポートを参照してください。

ソース コード、スタティック ライブラリ、ダイナミック ライブラリ、および実行可能ファイル

3.2 以上。

8 ビット整数精度の深層学習アプリケーション

6.1、または 6.3 以上。

半精度 (16 ビット浮動小数点) の深層学習アプリケーション

5.3、6.0、または 6.2 以上。

例: 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

カーネルの起動中に作成されるブロックの最大数を指定します。

GPU デバイスのストリーミング マルチプロセッサ (SM) リソースは限られているため、各カーネルのブロック数を制限することで、ブロックのスケジューリング、ロード、およびアンロードによるパフォーマンスの低下を回避できます。

ループ内の反復回数がカーネルあたりの最大ブロック数よりも多い場合、コード ジェネレーターはストライドを使用して CUDA カーネルを作成します。

各カーネルの最大ブロック数を指定すると、コード ジェネレーターは 1 次元カーネルを作成します。コード ジェネレーターに 2 次元カーネルまたは 3 次元カーネルを強制的に作成させるには、coder.gpu.kernel プラグマを使用します。coder.gpu.kernel プラグマは、各ブロックのカーネルの最大数よりも優先されます。

例: cfg.GpuConfig.MaximumBlocksPerKernel = 1024

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

制限

  • GPU Coder は、コード構成オブジェクト coder.CodeConfigcoder.EmbeddedCodeConfigPassStructByReference プロパティを常に true に設定します。

  • GPU Coder は、コード構成オブジェクト coder.EmbeddedCodeConfigEnableSignedLeftShifts プロパティと EnableSignedRightShifts プロパティを常に true に設定します。

  • スタティック ライブラリ、ダイナミック リンク ライブラリ、または Windows® 環境の実行可能プログラムなどのスタンドアロン ターゲットの場合、生成された makefile は /MT または /MD コンパイラ フラグを設定しません。これらのフラグは、マルチスレッド ライブラリを使用するように Visual Studio コンパイラに指示するものです。既定では、Visual Studio はコンパイル時に /MT を使用します。他のコンパイラ固有フラグを渡すには、CompilerFlags オプションを使用します。次に例を示します。

    cfg.GpuConfig.CompilerFlags = '-Xcompiler /MD';
    

  • nvcc コンパイラには、入力ファイルのサフィックスに制限があります。たとえば、オブジェクト ファイルにバージョン番号が含まれている場合、コンパイルが失敗する可能性があります。このような場合は、シンボリック リンクを作成するか、'-Xlinker'CompilerFlags に渡します。

互換性の考慮事項

すべて展開する

将来のリリースで動作変更

R2017b で導入