主要内容

MATLAB编码器支持包N金宝appVIDIA Jetson和NVIDIA DRIVE平台入門

この例では,nvidiaの組み込みボ,ドでNVIDIA Jetson和NV金宝appIDIA DRIVE平台的MATLAB®Coder™支持包を使用する方法を示します。この例では,単純なベクトル加算アルゴリズムを使用して次のことを説明します。

  • Matlab環境から組み込みボ,ドへの接続。

  • MATLABとの間のファイル転送やボード上でのLinux®シェルコマンドの実行など,基本的な操作の実行。

  • MATLAB関数からのc++実行可能ファイルの生成,およびボード上の手臂®CPUでの実行可能ファイルの実行。

  • MATLAB関数からのCUDA®実行可能ファイルの生成,およびボード上のNVIDIA GPUでの実行可能ファイルの実行。

必要条件

タ,ゲットボ,ド要件

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

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

  • ボドにンストルされているNVIDIA CUDA Toolkitおよびラブラリ。

  • コンパ@ @ラおよびラ@ @ブラリ用のタ@ @ゲット上の環境変数。詳細は,NVIDIA板的安装和设置先决条件(NVIDIA Jetson金宝app和NVIDIA DRIVE平台的MATLAB Coder支持包)を参照してください。

開発用ホスト要件

フォルダの作成と関連ファルのコピ

次のコード行は,ホスト上の現在の作業フォルダーに1つのフォルダーを作成し,すべての関連ファイルをそのフォルダーにコピーします。このフォルダーにファイルを生成できない場合は,このコマンドを実行する前に現在の作業フォルダーを変更してください。

nvidiademo_setup (“nvidia_gettingstarted”);

Nvidiaハ,ドウェアへの接続

このサポートパッケージは,生成されたコードを杰森または驱动プラットフォームでビルドおよび実行している間,TCP / IPによるSSH接続を使用してコマンドを実行します。ターゲットプラットフォームをホストコンピューターと同じネットワークに接続するか,イーサネットクロスケーブルを使用してボードをホストコンピューターに直接接続します。ボドを設定して構成する方法にいては,nvidiaのドキュメントを参照してください。

Nvidiaハ,ドウェアと通信するには,関数开车(NVIDIA Jetson金宝app和NVIDIA DRIVE平台的MATLAB Coder支持包)または杰森(NVIDIA Jetson金宝app和NVIDIA DRIVE平台的MATLAB Coder支持包)を使用してラ▪▪ブハ▪▪ドウェア接続オブジェクトを作成します。ライブハードウェア接続オブジェクトを作成するには,ターゲットボードのホスト名またはIPアドレス,ユーザー名,およびパスワードを知っている必要があります。たとえば,ターゲットボードに初めて接続するときに,次のコマンドを使用して,杰森ハードウェア用のライブオブジェクトを作成します。

Hwobj = jetson(“jetson-tx2-name”ubuntu的ubuntu的);

ハードウェアライブオブジェクトの作成中に,サポートパッケージが,ハードウェアとソフトウェアのチェック,IOサーバーのインストールの実行,およびターゲット上の周辺機器情報の収集を行います。この情報はコマンドウィンドウに表示されます。

同様に,驱动ハドウェアのラブオブジェクトを作成するには,次のコマンドを使用します。

Hwobj = drive(“drive-px2-name”ubuntu的ubuntu的);

接続に失敗した場合は,matlabコマンドランで診断エラメッセジが報告されます。接続が失敗した場合に最も可能性が高い原因は,ipアドレスまたはホスト名が誤っていることです。

NVIDIAハ,ドウェアでのLinuxコマンドの実行

ボードへの正常な接続が確立されたら,MATLABからさまざまなLinuxシェルコマンドをNVIDIAハードウェアで実行するためのボードオブジェクトのシステムメソッドを使用できます。たとえば,ターゲットボード上のホームフォルダーの内容を一覧表示するには,次のコマンドを使用します。

系统(hwobj,ls -al ~);

ハドウェアオブジェクトは基本的なファル操作機能を提供します。ホストからタ、ゲットにファ、ラ、ブハ、ドウェアオブジェクトのputFile ()メソッドを使用します。たとえば,現在のフォルダ,内の用法ファルをタゲットボド上のremoteBuildDirに転送するには,次のコマンドを使用します。

putFile (hwobj“用法”“~ / remoteBuildDir”);

ターゲットボードからホストコンピューターにファイルをコピーするには,ハードウェアオブジェクトのgetFile ()メソッドを使用します。次に例を示します。

getFile (hwobj,“~ / remoteBuildDir /用法”“。”);

MATLAB Coderを使用したARM CPU用c++コ,ドの生成

この例では,myAdd.mという単純なベクトル加算をコド生成のエントリポント関数として使用します。

函数out = myAdd(inp1,inp2)% # codegen简单向量加法版权所有The MathWorks, Inc.Out = inp1 + inp2;结束

英伟达ターゲットに展開できる実行可能ファイルを生成するには,実行可能ファイルを生成するためのコード構成オブジェクトを作成します。

CFG = code .config(exe”);cfg。TargetLang =“c++”

異なるターゲットに対する複数のライブ接続オブジェクトがある場合,コードジェネレーターは最新のライブオブジェクトが作成されたターゲットボードでリモートビルドを実行します。リモートビルドを実行するハードウェアボードを選択するには,各ライブハードウェアオブジェクトのsetupCodegenContext ()メソッドを使用します。ライブ接続オブジェクトが1つしか作成されていない場合は,このメソッドを呼び出す必要がありません。

hwobj.setupCodegenContext;

驱动または杰森プラットフォーム用の構成オブジェクトを作成し,それをコード構成オブジェクトcfg硬件プロパティに割り当てるには,関数coder.hardwareを使用します。Jetsonボ,ドには英伟达杰森的を使用し,开车ボ,ドには“NVIDIA驱动”を使用します。

cfg。硬件= code . Hardware (英伟达杰森的);

タ,ゲットボ,ドでリモ,トビルドプロセスを実行するフォルダ,を指定するには,BuildDirプロパティを使用します。指定したビルドフォルダーがターゲットボード上にない場合は,指定した名前でフォルダーが作成されます。値がcfg.Hardware.BuildDirに代入されない場合は,リモ,トビルドプロセスは最後に指定されたビルドフォルダ,で発生します。格納されているビルドフォルダ,値がない場合,ビルドプロセスはホ,ムフォルダ,で行われます。

cfg.Hardware.BuildDir =“~ / remoteBuildDir”

カスタムmain.cppファ@ @ルは,生成コ@ @ド内でエントリポ@ @ント関数を呼び出すラッパ@ @です。このメインファイルは,最初の100個の自然数が含まれるベクトルをエントリポイント関数に渡します。このメ▪▪ンファ▪▪ルによって,結果がmyAdd.binバ▪▪ナリファ▪▪ルに書き込まれます。

cfg。CustomSource = fullfile(“main.cpp”);

c++コ,ドを生成するには,関数codegenを使用して,コド構成,入力サズ,およびエントリポント関数myAdd.mを渡します。ホストでコード生成が行われた後,生成されたファイルがターゲットボードにコピーされ,そこでビルドされます。

codegen (“配置”cfg,“myAdd”“参数”, {1:10 0, 1:10 0});

GPU Coderを使用したタ,ゲットボ,ド向けのCUDAコ,ドの生成

タゲットボドでのgpu環境の検証

この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証するために,関数coder.checkGpuInstallを使用します。

% NVIDIA drive硬件使用'drive'envCfg = code . gpuenvconfig (“杰森”);envCfg。BasicCodegen = 1;envCfg。安静= 1;envCfg。HardwareObject = hwobj;coder.checkGpuInstall (envCfg);

Matlab実行可能ファescルの生成

英伟达ターゲットに展開できるCUDA実行可能ファイルを生成するには,実行可能ファイルを生成するためのGPUコード構成オブジェクトを作成します。

cfg = code . gpuconfig (exe”);cfg。硬件= code . Hardware (英伟达杰森的);cfg.Hardware.BuildDir =“~ / remoteBuildDir”;cfg。CustomSource = fullfile(“main.cu”);

驱动PX2などの一部のNVIDIAプラットフォームには複数のGPUが含まれています。そうしたプラットフォ,ムでは,gpu構成オブジェクトのSelectCudaDeviceプロパティを使用して特定のgpuを選択します。

cfg. gpconfig . selectcudadevice = 0;
codegen (“配置”cfg,“myAdd”“参数”, {1:10 0, 1:10 0});

タゲットボドでの実行可能ファルの実行

タゲットハドウェアで実行可能ファルを実行するには,ハドウェアオブジェクトのrunApplication ()メソッドを使用します。

pid = runApplication(hwobj,“myAdd”);

または,実行可能ファ,ルを実行するには,ハ,ドウェアオブジェクトのrunExecutable ()メソッドを使用します。

exe = [hwobj.workspaceDir . exe' / myAdd.elf '];pid = runExecutable(hwobj,exe);

タ,ゲットボ,ドからの結果の検証

出力ビンファ@ @ルmyAdd.binをホスト上のmatlab環境にコピ,して,計算結果をmatlabからの結果と比較します。workspaceDirプロパティには,タ,ゲットボ,ド上のcodegenフォルダ,へのパスが含まれています。

暂停(0.3);确保可执行文件完成执行。getFile (hwobj, [hwobj.workspaceDir' / myAdd.bin ']);

Matlabからのシミュレ,ションの結果:

simOut = myAdd(0:99,0:99);

タゲットからコピされた結果のバナリファルをmatlabで読み取ります。

fId = fopen(“myAdd.bin”“r”);(fId)“双”);

Matlabシミュレ,ション出力とタ,ゲットボ,ドからの出力の違いを探します。

diff = simOut - tOut';

シミュレ,ション出力とタ,ゲットボ,ドからの出力の最大偏差を表示します。

流(' MATLAB仿真输出与Target输出的最大偏差为:%f\n'马克斯(diff (:)));

クリ,ンアップ

サンプルファルを削除して,元のフォルダに戻すには,関数清理を呼び出します。

清理

参考

オブジェクト

  • (NVIDIA Jetson金宝app和NVIDIA DRIVE平台的MATLAB Coder支持包)|(NVIDIA Jetson金宝app和NVIDIA DRIVE平台的MATLAB Coder支持包)

関連するトピック