GPU Coder

高速かつ柔軟性の高い CUDA コードの生成

最適化された CUDA コードを生成します。コード配布は無償です。

アルゴリズムの配布が無償

デスクトップシステムからデータセンター、組み込みハードウェアまで、一般的な NVIDIA GPU 上で生成されたコードをコンパイルして実行します。生成したコードはロイヤリティフリーなので、商用アプリケーションで顧客に無料配布することができます。

ギャラリーを探す (2 画像)

GPU Coder のユーザー事例

さまざまな産業分野のエンジニアや研究者が用途に応じた CUDA コードの生成に GPU Coder を使用しています。その一部をご紹介します。

Airbus、NVIDIA Jetson TX2 で欠陥を自動検出するプロトタイプを作成。

Airbus、NVIDIA Jetson TX2 で欠陥を自動検出するプロトタイプを作成。

サポートされているツールボックスや関数からコードを生成

MATLAB 言語の幅広い機能を使用して GPU Coder で生成されるコードにより、設計エンジニアは大規模システムのコンポーネントとして使用するアルゴリズムを開発できます。MATLAB や関連ツールボックスに付属する数百の演算子や関数を利用できます。

コード生成のための MATLAB 言語とツールボックスのサポート。

コード生成のための MATLAB 言語とツールボックスのサポート。

レガシーコードの統合

レガシーコードの統合機能を使用して、信頼された、または高度に最適化された CUDA コードを MATLAB アルゴリズムに統合してテストします。その後、生成されたコードからも同じ CUDA コードを呼び出します。

生成されたコードに既存の CUDA コードを統合。

生成されたコードに既存の CUDA コードを統合。

Simulink モデルからの CUDA コードの生成

Simulink でモデルを作成し、最適化された CUDA コードを生成します。

シミュレーションの実行と NVIDIA GPU 用に最適化されたコードの生成

Simulink Coder™ を GPU Coder と共に使用して、Simulink モデルに含まれる MATLAB Function ブロックの計算量の多い部分を NVIDIA GPU 上で高速化できます。その後、Simulink モデルから最適化された CUDA コードを生成し、NVIDIA GPU ターゲットに展開できます。

GPU 上で実行するソーベルエッジ検出器の Simulink モデル。

GPU 上で実行するソーベルエッジ検出器の Simulink モデル。

エンドツーエンドのディープラーニング アルゴリズムの展開

Simulink モデルで Deep Learning Toolbox™ の学習済みのさまざまなディープラーニング ネットワーク (ResNet-50、SegNet、LSTM など) を使用して、NVIDIA GPU に展開します。前処理と後処理用のコードを学習済みディープラーニング ネットワークと共に生成して、完成したアルゴリズム全体を展開します。

信号のロギング、パラメーターの調整、コード動作の数値的検証

Simulink Coder と共に GPU Coder を使用して、エクスターナル モード シミュレーションによってリアルタイムに信号をロギングし、パラメーターを調整できます。Embedded Coder を GPU Coder と共に使用して、ソフトウェアインザループおよびプロセッサインザループのテストを実行し、生成されたコードがシミュレーションの動作と一致していることを数値的に検証します。

ディープラーニング ネットワークからの CUDA コードの生成

Deep Learning Toolbox を使用して、学習済みのディープラーニング ネットワークを展開します。

エンドツーエンドのディープラーニング アルゴリズムの展開

学習済みのさまざまなディープラーニング ネットワーク (ResNet-50、SegNet、LSTM など) を Deep Learning Toolbox から NVIDIA GPU に展開します。事前定義済みのディープラーニング層を使用するか、特定の用途向けにカスタム層を定義します。前処理と後処理用のコードを学習済みディープラーニング ネットワークと共に生成して、完成したアルゴリズム全体を展開します。

推論に最適化されたコードを生成

GPU Coder では、特定のアルゴリズムで推論を実行するために必要なコードのみが生成されるため、他のディープラーニング ソリューションと比較して、生成されるコードのフットプリントは小さくなります。生成されたコードを使用して、TensorRT や cuDNN などの最適化されたライブラリを呼び出します。

cuDNN を使用した Titan V GPU 上での VGG-16 による単一画像推論。

cuDNN を使用した Titan V GPU 上での VGG-16 による単一画像推論。

TensorRT を使用したさらなる最適化

高性能なディープラーニングの推論オプティマイザーであり、ランタイムエンジンである NVIDIA TensorRT と統合するコードを生成します。標準の FP32 データ型を超える性能向上のため、INT8 または FP16 データ型を選択できます。

TensorRT と INT8 データ型を使用することで実行速度が向上。

TensorRT と INT8 データ型を使用することで実行速度が向上。

生成コードの最適化

GPU Coder では、生成されたコードは自動的に最適化されます。設計パターンを使用して、さらに性能を向上させます。

CPU と GPU のメモリ転送の最小化およびメモリ使用量の最適化

GPU Coder では、CPU または GPU 上で実行できるように、MATLAB コードのセグメントの解析や識別、分割が自動的に行われます。また、CPU と GPU の間のデータコピー数も最小限に抑えられます。プロファイリング ツールを使用して、他の潜在的なボトルネックを特定します。

潜在的なボトルネックを特定するプロファイルレポート。

潜在的なボトルネックを特定するプロファイルレポート。

最適化されたライブラリの呼び出し

GPU Coder で生成されたコードは、最適化された NVIDIA CUDA ライブラリ (TensorRT、cuDNN、cuSolver、cuFFT、cuBLAS、Thrust など) を呼び出します。MATLAB ツールボックス関数で生成されたコードは、可能な限り、最適化されたライブラリにマッピングされます。

最適化された cuFFT CUDA ライブラリの関数を呼び出す生成コード。

最適化された cuFFT CUDA ライブラリの関数を呼び出す生成コード。

設計パターンを使用したさらなる高速化

ステンシル処理などの設計パターンでは、共有メモリを使用してメモリ帯域幅を改善します。このような設計パターンは、畳み込みなどの特定の関数を使用する際に自動的に適用されます。また、特定のプラグマを使用して手動で呼び出すこともできます。

ステンシル処理の設計パターン。

ステンシル処理の設計パターン。

ハードウェアでのプロトタイピング

アルゴリズムを CUDA コードに自動変換して、ハードウェアに素早くアクセスします。

NVIDIA Jetson および DRIVE プラットフォームでのプロトタイピング

GPU Coder Support Package for NVIDIA GPUs を使用して、生成されたコードのクロスコンパイルと、NVIDIA Jetson および DRIVE プラットフォームへの展開を自動化します。

NVIDIA Jetson プラットフォームでのプロトタイピング。

NVIDIA Jetson プラットフォームでのプロトタイピング。

MATLAB と生成されたコードからの周辺機器やセンサーへのアクセス

MATLAB から NVIDIA ターゲットとリモートで通信し、Web カメラやサポートされているその他の周辺機器からデータを取得して初期プロトタイプを作成できます。周辺機器のインターフェイス コードと共にアルゴリズムをボードに展開し、スタンドアロンでの実行を可能にします。

MATLAB と生成されたコードから周辺機器やセンサーにアクセス。

MATLAB と生成されたコードから周辺機器やセンサーにアクセス。

プロトタイピングから量産への移行

GPU Coder を Embedded Coder と共に使用して、MATLAB コードと生成された CUDA コードを並べて対話的にトレースします。ソフトウェアインザループ (SIL) および プロセッサインザループ (PIL) テストを使用して、生成したコードをハードウェアで実行するときの数値的動作を検証できます。

GPU Coder と Embedded Coder の併用による対話型のトレーサビリティ レポート。

GPU Coder と Embedded Coder の併用による対話型のトレーサビリティ レポート。

アルゴリズムの高速化

CUDA コードを生成し、MATLAB および Simulink 内で使用できるようにコンパイルします。

MATLAB での GPU を使用したアルゴリズムの高速化

生成した CUDA コードを MEX 関数として MATLAB コードから呼び出すと実行速度が向上します。ただし、実際の性能は MATLAB コードの性質によって異なります。生成した MEX 関数をプロファイリングし、ボトルネックを特定して最適化の対象を絞り込みます。

NVIDIA GPU を使用した Simulink シミュレーションの高速化

Simulink Coder と共に GPU Coder を使用して、Simulink モデルに含まれる MATLAB Function ブロックの計算量の多い部分を NVIDIA GPU 上で高速化できます。