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 などのイベントの時間を計測します。

実行後、生成されたベンチマーク コードにより、現在の作業フォルダーに gpuTimingData コンマ区切り値 (CSV) ファイルが作成されます。CSV ファイルには、カーネル、メモリ、その他のイベントのタイミング データが格納されています。次の表に、CSV ファイルの形式を示します。

イベント タイプ形式

CUDA カーネル

<name_N>,<block dimension>,<grid dimension>,<execution time in ms>,<name of parent>

N はカーネルの N 回目の実行です。<block dimension> はブロックの次元の合計を表します。たとえば、ブロックの次元が dim3(32,32,32) の場合、<block dimension> の値は 32768 になります。

CUDA メモリ コピー

<name_N>,<memory copy size>,<execution time in ms>,<IO flag>,<name of parent>

N は、メモリ コピーの N 回目の実行です。

その他

<name_N>,<execution time in ms>,<name of parent>

N は、演算の N 回目の実行です。

例: 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 Toolkit ドキュメンテーションの "Options for Steering GPU Code Generation" のトピックを参照してください。

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

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

類似の NVIDIA コンパイラ オプションについては、CUDA Toolkit ドキュメンテーションの "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

効率的なメモリ割り当て、メモリ管理、および実行時のパフォーマンス向上のために、GPU メモリ マネージャーを選択します。

説明
true

GPU メモリ マネージャーは、大きな GPU メモリ プールのコレクションを作成し、これらのプール内のメモリ ブロックのチャンクの割り当ておよび割り当て解除を管理します。大きなメモリ プールを作成することにより、メモリ マネージャは CUDA のメモリ API に対する呼び出し回数を減らして、実行時のパフォーマンスを向上させます。GPU メモリ マネージャーは、MEX およびスタンドアロンの CUDA コード生成に使用できます。

false

メモリの割り当てと管理に GPU メモリ マネージャーを使用しないようにします。

この値は既定値です。

例: cfg.GpuConfig.EnableMemoryManager = true

GPU メモリ マネージャーが使用するメモリ ブロックの配置を指定します。プール内のブロック サイズ (バイト) は、指定した値の倍数になります。BlockAlignment の値は 2 のべき乗でなければなりません。

例: cfg.GpuConfig.BlockAlignment = 1024

次の表のいずれかの値を使用して、メモリ マネージャーが GPU デバイスのメモリを解放するタイミングを指定します。

説明
'Never'

メモリ マネージャーが破棄されたときにメモリを解放します。

この値は既定値です。

'AtTerminate'

生成コードで関数 terminate が呼び出されたときに、空の GPU プールを解放します。

MEX ターゲットの場合、生成された MEX 関数が呼び出されるたびにメモリを解放します。

他のターゲットの場合、関数 terminate が呼び出されたときにメモリを解放します。

'AfterAllocate'

CUDA のメモリ割り当てが呼び出されるたびに空のプールを解放します。

例: cfg.GpuConfig.FreeMode = 'AtTerminate'

GPU メモリ マネージャーの最小プール サイズをメガバイト (MB) 単位で指定します。MinPoolSize の値は 2 のべき乗でなければなりません。

メモリ マネージャーは、MinPoolSize パラメーターと MaxPoolSize パラメーターを使用して、2 つの値の間を 2 のべき乗で内挿することにより、サイズ レベルを計算します。たとえば、MinPoolSize が 4 で、MaxPoolSize が 1024 の場合、サイズ レベルは {4, 8, 16, 32, 64, 128, 256, 512, 1024} になります。

例: cfg.GpuConfig.MinPoolSize = 32

GPU メモリ マネージャーの最大プール サイズをメガバイト (MB) 単位で指定します。MaxPoolSize の値は 2 のべき乗でなければなりません。

メモリ マネージャーは、MinPoolSize パラメーターと MaxPoolSize パラメーターを使用して、2 つの値の間を 2 のべき乗で内挿することにより、サイズ レベルを計算します。たとえば、MinPoolSize が 4 で、MaxPoolSize が 1024 の場合、サイズ レベルは {4, 8, 16, 32, 64, 128, 256, 512, 1024} になります。

例: cfg.GpuConfig.MaxPoolSize = 4096

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 で導入

すべて展開する