霧修正 Simulink モデルの GPU コードの生成
この例では、霧のかかったイメージを入力として受け取り、霧が取り除かれたイメージを出力として生成する Simulink® モデルから、CUDA® コードを生成する方法を示します。この例は、霧修正アルゴリズムの一般的な実装です。この例では、関数conv2
、im2gray
、およびimhist
(Image Processing Toolbox)を使用します。この例は霧の修正の例とほぼ同じです。この例では、以下の概念を説明します。
GPU 環境の検証。
イメージ処理関数を使用した、Simulink での霧修正アプリケーションのモデル化。
GPU コード生成用のモデルの構成。
Simulink モデルの CUDA 実行可能ファイルの生成。
サードパーティの必要条件
必須
この例では、CUDA MEX を生成します。以下のサードパーティ要件が適用されます。
CUDA 対応 NVIDIA® GPU および互換性のあるドライバー。
オプション
スタティック ライブラリ、ダイナミック ライブラリ、または実行可能ファイルなどの MEX 以外のビルドについて、この例では以下の要件も適用されます。
NVIDIA Toolkit。
コンパイラおよびライブラリの環境変数。詳細については、サードパーティ ハードウェアと前提条件となる製品の設定を参照してください。
GPU 環境の検証
この例を実行するのに必要なコンパイラおよびライブラリが正しく設定されていることを検証するために、関数coder.checkGpuInstall
を使用します。
envCfg = coder.gpuEnvConfig('host');
envCfg.BasicCodegen = 1;
envCfg.Quiet = 1;
coder.checkGpuInstall(envCfg);
霧修正 Simulink モデル
霧修正のための Simulink モデルを構成する Fog Rectification
サブシステムには、霧のかかったイメージを入力として受け取り、霧が取り除かれたイメージを出力として返す MATLAB Function
ブロックが含まれています。これには霧の修正の例で説明する fog_rectification
アルゴリズムが使用されます。このモデルを実行すると、Visualization
ブロックにより、霧がかかっている入力イメージと霧が取り除かれた出力イメージが表示されます。
mdl = 'fog_rectification_model';
open_system(mdl);
GPU による高速化のためのモデルの構成
モデル コンフィギュレーション パラメーターにより、シミュレーション中に使用される高速化の方法が決定します。
set_param(mdl,'Solver','FixedStepAuto'); set_param(mdl,'GPUAcceleration','on'); set_param(mdl, 'SimulationMode','Normal');
GPU による高速化を使用するモデルのビルド
GPU による高速化を使用するモデルをビルドしてシミュレートするには、[シミュレーション] タブで [実行] を選択するか、次の MATLAB コマンドを使用します。
out = sim(mdl);
コード生成用のモデルの構成
コード生成のために以下のパラメーターを設定します。
set_param(mdl,'TargetLang','C++'); set_param(mdl,'GenerateGPUCode','CUDA'); set_param(mdl,'GPUcuBLAS','on'); set_param(mdl,'GPUcuSOLVER','on'); set_param(mdl,'GPUcuFFT','on'); set_param(mdl,'ProdLongLongMode','on');
モデルの CUDA コードの生成
slbuild
コマンドを使用して、ホスト GPU で Simulink モデルを生成してビルドします。コード ジェネレーターは実行可能ファイルを "ビルド フォルダー" (現在の作業フォルダーの中の fog_rectification_model_ert_rtw
という名前のサブフォルダー) に配置します。
status = evalc("slbuild('fog_rectification_model')");
クリーンアップ
Simulink モデルを閉じます。
close_system('fog_rectification_model');
参考
関数
open_system
(Simulink) |load_system
(Simulink) |save_system
(Simulink) |close_system
(Simulink) |bdclose
(Simulink) |get_param
(Simulink) |set_param
(Simulink) |sim
(Simulink) |slbuild
(Simulink)