GPU Coder の制限
一般的な制限
Linux® ではファイル名とパス名にスペースが含まれているとビルド エラーの原因になります。GPU Coder™ で使用されている GNU make ツールには、ファイル名にスペースが含まれている場合に既知の制限があります。一般的に、ファイル名、プロジェクト名、およびパス名におけるスペースの使用は避けることをお勧めします。
GPU Coder では、MATLAB® Coder™ の一部である整合性チェック、配列範囲チェック、および配列次元チェックが無効にされます。
コード生成時に
coder.inline('never')
オプションを使用すると、GPU Coder ではcoder.gpu.kernelfun
プラグマを含むエントリポイント関数のみについてカーネルが作成され、そのエントリポイント関数内のサブ関数のカーネルは自動的に作成されません。そのため、coder.inline('never')
オプションは使用しないことをお勧めします。可変サイズ配列を持つ構造体のカーネルの生成はサポートされていません。
選択した CUDA® Compute Capability はハードウェアの Compute Capability と一致しなければなりません。
GPU ポインターで
coder.ceval
を使用する場合、[CPU] の [問題の確認] オプションはサポートされません。GPU Coder は Simulink® ブロック用のコード生成はサポートしません。[ハードウェア実行] ペインの [ハードウェア ボード] オプションから
[NVIDIA Jetson]
ボードおよび[NVIDIA Drive]
ボードを使用して NVIDIA® GPU をターゲットにすることはできません。GPU Coder は SIMD コード生成をサポートしていません。[ターゲット ハードウェアの命令セット拡張を活用] パラメーターを
[なし]
に設定して、SIMD コード生成を無効にします。
関数の制限
MATLAB 組み込み関数およびツールボックス関数のサブセットについてのみ、CUDA コードを生成できます。
NVIDIA Tegra® デバイスをターゲットにする場合、GPU Coder では関数
bwdist
のquasi-euclidean
メソッドと、3 より大きいイメージの次元がサポートされません。1 行 N 列のカーネルで
imfilter
が使用されていて、N が偶数の整数である場合、生成コードでは共有メモリが使用されません。imfilter
が 3 次元イメージで使用されている場合、conv2
実装では共有メモリが使用されません。置換が行われている場合でも、GPU Coder のコード置換レポートが空になります。この問題は関数
atan
で特定されています。
サポートされていない CUDA 機能
サポートされていない CUDA 機能の一覧は以下のとおりです。
テクスチャ メモリ
非同期ストリーム
動的なカーネル呼び出し — カーネル内からのカーネルの呼び出し