Main Content

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

GPU 配列のサポート

CUDA® MEX、ソース コード、スタティック ライブラリ、ダイナミック ライブラリおよび実行可能ファイルを生成するときに、GPU 配列をエントリポイント関数への入力引数および出力引数として使用できます。エントリポイント関数への指定された入力が CPU と GPU のどちらに基づく入力として識別されるのかや、変数の使用方法 (GPU と CPU のどちらで使用されるか) に応じて、生成されたコードに cudaMemcpy 呼び出しが効率的に挿入されます。GPU 配列機能を使用することにより、生成されたコードで cudaMemcpy 呼び出しの数を最小化できます。

この機能を使用するには、次のいずれかを行います。

  • coder.typeof を使用してエントリポイント関数の入力の gpuArray 型を表します。次に例を示します。

    coder.typeof(rand(20),'Gpu',true);
    

  • 関数 gpuArray を使用します。次に例を示します。

    in = gpuArray(rand(1,10)); 
    codegen -config cfg -args {in} test
    

考慮事項

  • GPU Coder™ はすべての数値型と logical 型をサポートします。char データ型と half データ型はサポートされません。可変次元配列を使用する場合、制限された型のみがサポートされます。スカラー GPU 配列、構造体、cell 配列、クラス、列挙型、および固定小数点データ型はサポートされません。

  • コード ジェネレーターは GPU 配列のすべてのターゲットの型 ('mex''lib''dll' および 'exe') をサポートします。'lib''dll' および 'exe' ターゲットの場合、main 関数の例でエントリポイント関数に正しいポインターを渡さなければなりません。たとえば、入力が 'Gpu' としてマークされている場合、エントリポイントが main 関数から呼び出されるときに GPU ポインターを渡さなければなりません。ソフトウェアインザループ (SIL) は 'lib''dll' でサポートされます。

  • コード構成オブジェクトのメモリ割り当て (malloc) モード プロパティは 'discrete' になるように設定しなければなりません。次に例を示します。

    cfg.GpuConfig.MallocMode = 'discrete';
    
    GPU 配列は 'unified' メモリ モードでサポートされていません。

  • コード生成中、エントリポイント関数への 1 つの入力が GPU 配列であり、GPU コード生成でサポートされている場合、出力変数はすべて GPU 配列型になります。たとえば、エントリポイント関数が struct を返しても struct がサポートされていないため、生成されたコードは CPU 出力を返します。ただし、サポートされる行列タイプが返される場合、生成されるコードは GPU 出力を返します。

参考

| | | |

関連するトピック