GPU 配列のサポート
CUDA® MEX、ソース コード、スタティック ライブラリ、ダイナミック ライブラリおよび実行可能ファイルを生成するときに、GPU 配列をエントリポイント関数への入力引数および出力引数として使用できます。GPU Coder™ は、入力の型と MATLAB® 設計での変数の使用法に基づいて CPU-GPU 間のコピーを自動的に処理します。GPU 配列の機能は、次を試す場合に CPU-GPU 間のコピーを最小限にするのに役立ちます。
生成コードを、GPU メモリへの出力を行う既存の実装と統合する。
生成された MEX 関数に MATLAB
gpuArray
入力を渡す。
エントリポイント関数への入力を GPU 型としてマークするには、次のいずれかの方法を使用します。
coder.typeof
を使用してエントリポイント関数の入力のgpuArray
型を表します。次に例を示します。coder.typeof(rand(20),'Gpu',true);
関数
gpuArray
を使用します。次に例を示します。in = gpuArray(rand(1,10)); codegen -config cfg -args {in} test
考慮事項
GPU Coder は、
gpuArray
でサポートされているすべてのデータ型をサポートします。可変次元配列を使用する場合、制限された型のみがサポートされます。
'lib'
、'dll'
および'exe'
ターゲットの場合、main 関数の例でエントリポイント関数に対応するポインターを渡さなければなりません。たとえば、入力が'Gpu'
としてマークされている場合、エントリポイントが main 関数から呼び出されるときに GPU ポインターを渡さなければなりません。コード構成オブジェクトの
MemoryMode
(メモリ割り当てモード) プロパティは'discrete'
に設定しなければなりません。次に例を示します。cfg.GpuConfig.MallocMode = 'discrete';
コード生成時、エントリポイント関数への 1 つの入力が GPU 配列で構成されている場合、GPU Coder はすべての出力変数を GPU 配列型にしようとします。ただし、それらが
gpuArray
でサポートされていなければなりません。たとえば、エントリポイント関数がstruct
を返す場合、struct
はgpuArray
でサポートされていないため、生成コードは CPU 出力を返します。ただし、サポートされる行列タイプが返される場合、生成されるコードは GPU 出力を返します。メモ
gpuArray
入力を渡すことは、出力もgpuArray
になることを保証するものではありません。
制限
GPU Coder は次の型をサポートしていません。
char
half
スカラー GPU 配列
構造
cell 配列
クラス
列挙型
固定小数点データ型
GPU Coder は、GPU 配列の
'unified'
メモリ モードをサポートしていません。
参考
coder.gpu.kernel
| coder.gpu.kernelfun
| gpucoder.matrixMatrixKernel
| coder.gpu.constantMemory
| gpucoder.stencilKernel