Main Content

GPU Coder アプリを使用した NVIDIA ハードウェアでの実行可能ファイルのビルドと実行

GPU Coder™ および MATLAB® Coder™ Support Package for NVIDIA® Jetson™ and NVIDIA DRIVE® Platforms を使用すると、NVIDIA DRIVE/Jetson ハードウェア プラットフォームをターゲットにすることができます。ターゲット プラットフォームに接続した後に、基本的な操作を行ったり、MATLAB 関数から CUDA® 実行可能ファイルを生成したり、実行可能ファイルをハードウェア上で実行したりできます。サポート パッケージにより、Jetson や DRIVE などの GPU ハードウェア プラットフォームで生成された CUDA コードの展開が自動化されます。

メモ

R2021a 以降、GPU Coder Support Package for NVIDIA GPUs の名称は、MATLAB Coder Support Package for NVIDIA Jetson and NVIDIA DRIVE Platforms になりました。R2021a でこのサポート パッケージを使用するには、MATLAB Coder 製品がインストールされていなければなりません。

学習目標

このチュートリアルでは、次の方法を学びます。

  • kernelfun プラグマを使用した CUDA コード生成のための MATLAB コードの準備。

  • GPU Coder プロジェクトの作成と設定。

  • NVIDIA ターゲット ボードへの接続の設定変更。

  • ターゲット ボードでの CUDA 実行可能ファイルの生成および展開。

  • ボードでの実行可能ファイルの実行と結果の検証。

このチュートリアルを開始する前に、GPU Coder アプリをよく理解しておくことをお勧めします。詳細については、GPU Coder アプリを使用したコード生成を参照してください。

チュートリアルの前提条件

ターゲット ボード要件

  • NVIDIA DRIVE PX2 または Jetson 組み込みプラットフォーム。

  • ターゲット ボードとホスト PC を接続するイーサネット クロスオーバー ケーブル (ターゲット ボードをローカル ネットワークに接続できない場合)。

  • ボードにインストールされている NVIDIA CUDA Toolkit。

  • コンパイラおよびライブラリ用のターゲット上の環境変数。サポートされているコンパイラおよびライブラリのバージョンおよびその設定の詳細については、Install and Setup Prerequisites for NVIDIA Boardsを参照してください。

開発用ホスト要件

  • ホスト上の NVIDIA CUDA Toolkit。

  • コンパイラおよびライブラリ用のホスト上の環境変数。サポートされているコンパイラおよびライブラリのバージョンの詳細については、サードパーティ ハードウェアを参照してください。環境変数の設定は、環境変数を参照してください。

例:ベクトルの加算

このチュートリアルでは、単純なベクトル加算例を使用して NVIDIA GPU でのビルドと展開のワークフローを示します。コード生成の "エントリポイント" として機能する MATLAB 関数 myAdd.m を作成します。または、このチュートリアルのMATLAB Coder Support Package for NVIDIA Jetson and NVIDIA DRIVE Platforms 入門の例でファイルを使用します。この関数の CUDA コードを作成する最も簡単な方法は、coder.gpu.kernelfun プラグマを関数に配置することです。GPU Coder は kernelfun プラグマを検出すると、この関数内の計算を並列化し、その計算を GPU にマッピングしようとします。

function out = myAdd(inp1,inp2) %#codegen
coder.gpu.kernelfun();
out = inp1 + inp2;
end

カスタムのメイン ファイル

NVIDIA のターゲットに展開できる CUDA 実行可能ファイルを生成するには、カスタムのメイン ファイル (main.cu) とヘッダー ファイル (main.h) を作成します。メイン ファイルは、MATLAB エントリポイント関数用に生成されたコードを呼び出します。メイン ファイルは最初の 100 個の自然数が含まれるベクトルをエントリポイント関数に渡して、その結果をバイナリ ファイル (myAdd.bin) に書き込みます。

 main.cu

 main.h

GPU Coder アプリ

GPU Coder アプリを開くには、MATLAB ツールストリップの [アプリ] タブにある [コード生成] で、GPU Coder アプリ アイコンをクリックします。また、MATLAB コマンド ウィンドウで「gpucoder」と入力してもアプリを開くことができます。

  1. [ソース ファイルの選択] ページが開きます。myAdd.m をエントリポイント関数として選択します。[次へ] をクリックします。

  2. [入力の型を定義] ウィンドウで「myAdd(1:100,1:100)」と入力して [入力の型の自動定義] をクリックし、[次へ] をクリックします。

  3. [実行時の問題の確認] プロセスを開始するか、[次へ] をクリックして [コード生成] ステップに移動できます。

  4. [ビルド タイプ][実行可能ファイル][ハードウェア ボード][NVIDIA Jetson] に設定します。

    Generate code window of the GPU Coder app showing hardware board and toolchain settings

  5. [詳細設定] をクリックし、[カスタム コード] パネルで、[追加ソース ファイル] のフィールドでカスタムのメイン ファイル「main.cu」を入力します。カスタムのメイン ファイルとヘッダー ファイルはエントリポイント ファイルと同じ場所になければなりません。

    GPU Coder app custom code window

  6. [ハードウェア] パネルで、ボードのデバイス アドレス、ユーザー名、パスワードおよびビルド フォルダーを入力します。

    GPU Coder app showing hardware settings pane

  7. [設定] ウィンドウを閉じて [生成] をクリックします。CUDA コードが生成され、指定したフォルダーに実行可能ファイルが展開されます。[次へ] をクリックしてアプリを閉じます。

実行可能ファイルの実行と結果の検証

MATLAB コマンド ウィンドウで、ハードウェア オブジェクトの runApplication() メソッドを使用してターゲット ハードウェアで実行可能ファイルを開始します。

hwobj = jetson;
pid = runApplication(hwobj,'myAdd');
### Launching the executable on the target...
Executable launched successfully with process ID 26432.
Displaying the simple runtime log for the executable...

出力ビン ファイル myAdd.bin をホストの MATLAB 環境にコピーして、計算結果を MATLAB からの結果と比較します。

outputFile = [hwobj.workspaceDir '/myAdd.bin']
getFile(hwobj,outputFile);

% Simulation result from the MATLAB.
simOut = myAdd(0:99,0:99);

% Read the copied result binary file from target in MATLAB.
fId  = fopen('myAdd.bin','r');
tOut = fread(fId,'double');
diff = simOut - tOut';
fprintf('Maximum deviation is: %f\n', max(diff(:)));
Maximum deviation between MATLAB Simulation output and GPU coder output on Target is: 0.000000

参考

オブジェクト

関連するトピック