GPU Coder™ は、最適化された CUDA® コードを MATLAB® コードや Simulink® モデルから生成します。生成されたコードには、ディープラーニングや組み込みビジョン、信号処理アルゴリズムの並列処理可能な部分の CUDA カーネルが含まれます。性能向上のため、生成されたコードは、最適化された NVIDIA® CUDA ライブラリ (TensorRT™、cuDNN、cuFFT、cuSolver、cuBLAS など) を呼び出します。また、このコードは、ソースコードや静的ライブラリ、動的ライブラリとしてプロジェクトに統合し、NVIDIA Jetson™ や NVIDIA DRIVE™ などのプラットフォームに組み込まれたデスクトップやサーバー、GPU 用にコンパイルできます。MATLAB 内で生成した CUDA を使用することで、ディープラーニング ネットワークや、アルゴリズムの計算負荷の高い部分を高速化することができます。GPU Coder を使用すると、手書きの CUDA コードをアルゴリズムや生成したコードに組み込むことができます。
Embedded Coder® と共に使用すると、GPU Coder では、ソフトウェアインザループ (SIL) やプロセッサインザループ (PIL) テストを実行して、生成されたコードの数値的動作を検証できます。
詳細を見る:
アルゴリズムの配布が無償
デスクトップシステムからデータセンター、組み込みハードウェアまで、一般的な NVIDIA GPU 上で生成されたコードをコンパイルして実行します。生成したコードはロイヤリティフリーなので、商用アプリケーションで顧客に無料配布することができます。
GPU Coder のユーザー事例
さまざまな産業分野のエンジニアや研究者が用途に応じた CUDA コードの生成に GPU Coder を使用しています。その一部をご紹介します。
サポートされているツールボックスや関数からコードを生成
MATLAB 言語の幅広い機能を使用して GPU Coder で生成されるコードにより、設計エンジニアは大規模システムのコンポーネントとして使用するアルゴリズムを開発できます。MATLAB や関連ツールボックスに付属する数百の演算子や関数を利用できます。
レガシーコードの統合
レガシーコードの統合機能を使用して、信頼された、または高度に最適化された CUDA コードを MATLAB アルゴリズムに統合してテストします。その後、生成されたコードからも同じ CUDA コードを呼び出します。
シミュレーションの実行と NVIDIA GPU 用に最適化されたコードの生成
Simulink Coder™ を GPU Coder と共に使用して、Simulink モデルに含まれる MATLAB Function ブロックの計算量の多い部分を NVIDIA GPU 上で高速化できます。その後、Simulink モデルから最適化された CUDA コードを生成し、NVIDIA GPU ターゲットに展開できます。
エンドツーエンドのディープラーニング アルゴリズムの展開
Simulink モデルで Deep Learning Toolbox™ の学習済みのさまざまなディープラーニング ネットワーク (ResNet-50、SegNet、LSTM など) を使用して、NVIDIA GPU に展開します。前処理と後処理用のコードを学習済みディープラーニング ネットワークと共に生成して、完成したアルゴリズム全体を展開します。
信号のロギング、パラメーターの調整、コード動作の数値的検証
Simulink Coder と共に GPU Coder を使用して、エクスターナル モード シミュレーションによってリアルタイムに信号をロギングし、パラメーターを調整できます。Embedded Coder を GPU Coder と共に使用して、ソフトウェアインザループおよびプロセッサインザループのテストを実行し、生成されたコードがシミュレーションの動作と一致していることを数値的に検証します。
エンドツーエンドのディープラーニング アルゴリズムの展開
学習済みのさまざまなディープラーニング ネットワーク (ResNet-50、SegNet、LSTM など) を Deep Learning Toolbox から NVIDIA GPU に展開します。事前定義済みのディープラーニング層を使用するか、特定の用途向けにカスタム層を定義します。前処理と後処理用のコードを学習済みディープラーニング ネットワークと共に生成して、完成したアルゴリズム全体を展開します。
推論に最適化されたコードを生成
GPU Coder では、特定のアルゴリズムで推論を実行するために必要なコードのみが生成されるため、他のディープラーニング ソリューションと比較して、生成されるコードのフットプリントは小さくなります。生成されたコードを使用して、TensorRT や cuDNN などの最適化されたライブラリを呼び出します。
TensorRT を使用したさらなる最適化
高性能なディープラーニングの推論オプティマイザーであり、ランタイムエンジンである NVIDIA TensorRT と統合するコードを生成します。標準の FP32 データ型を超える性能向上のため、INT8 または FP16 データ型を選択できます。
ディープラーニングの量子化
ディープラーニング ネットワークを量子化してメモリ使用量を低減し、推論性能を高めます。Deep Network Quantizer アプリを使用して、性能向上と推論精度のトレードオフを解析および可視化します。
CPU と GPU のメモリ転送の最小化およびメモリ使用量の最適化
GPU Coder では、CPU または GPU 上で実行できるように、MATLAB コードのセグメントの解析や識別、分割が自動的に行われます。また、CPU と GPU の間のデータコピー数も最小限に抑えられます。プロファイリング ツールを使用して、他の潜在的なボトルネックを特定します。
最適化されたライブラリの呼び出し
GPU Coder で生成されたコードは、最適化された NVIDIA CUDA ライブラリ (TensorRT、cuDNN、cuSolver、cuFFT、cuBLAS、Thrust など) を呼び出します。MATLAB ツールボックス関数で生成されたコードは、可能な限り、最適化されたライブラリにマッピングされます。
設計パターンを使用したさらなる高速化
ステンシル処理などの設計パターンでは、共有メモリを使用してメモリ帯域幅を改善します。このような設計パターンは、畳み込みなどの特定の関数を使用する際に自動的に適用されます。また、特定のプラグマを使用して手動で呼び出すこともできます。
NVIDIA Jetson および DRIVE プラットフォームでのプロトタイピング
GPU Coder Support Package for NVIDIA GPUs を使用して、生成されたコードのクロスコンパイルと、NVIDIA Jetson および DRIVE プラットフォームへの展開を自動化します。
MATLAB と生成されたコードからの周辺機器やセンサーへのアクセス
MATLAB から NVIDIA ターゲットとリモートで通信し、Web カメラやサポートされているその他の周辺機器からデータを取得して初期プロトタイプを作成できます。周辺機器のインターフェイス コードと共にアルゴリズムをボードに展開し、スタンドアロンでの実行を可能にします。
プロトタイピングから量産への移行
GPU Coder を Embedded Coder と共に使用して、MATLAB コードと生成された CUDA コードを並べて対話的にトレースします。ソフトウェアインザループ (SIL) および プロセッサインザループ (PIL) テストを使用して、生成したコードをハードウェアで実行するときの数値的動作を検証できます。
MATLAB での GPU を使用したアルゴリズムの高速化
生成した CUDA コードを MEX 関数として MATLAB コードから呼び出すと実行速度が向上します。ただし、実際の性能は MATLAB コードの性質によって異なります。生成した MEX 関数をプロファイリングし、ボトルネックを特定して最適化の対象を絞り込みます。
NVIDIA GPU を使用した Simulink シミュレーションの高速化
Simulink Coder と共に GPU Coder を使用して、Simulink モデルに含まれる MATLAB Function ブロックの計算量の多い部分を NVIDIA GPU 上で高速化できます。