主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

GPU编码器を使用した仿真软件モ金宝appデルからのコード生成

GPU编码器™は,MATLAB函数ブロックを含む仿金宝app真软件®モデルからCUDA®c++コードを生成します。生成されたコードと実行可能ファイルは,英伟达®特斯拉®NVIDIA Tegra®などのGPUでのラピッドプロトタイピングに使用できます。コード生成レポートとトレーサビリティによって,生成されたコードを表示して分析できます。GPU编码器を使用したCUDAコード生成の基本的な手順は次のとおりです。

  • モデルを作成または開く

  • “ソルバー”、"言語"”ツールチェーン”およびその他のGPU固有のコンフィギュレーションパラメーターを選択して,コード生成のモデルを構成する

  • モデルをビルドする

例:ソーベルエッジ検出

ソーベルエッジ検出アルゴリズムは,グレースケールイメージで2次元の空間勾配演算を行います。この演算は,入力イメージのエッジに相当する空間周波数が高い領域を強調します。アルゴリズムは2つの直交フィルターカーネル(kk”)を使用して,入力イメージの水平方向勾配(H)と垂直方向勾配(V)を計算します。このアルゴリズムは,フィルター処理演算を実行した後,勾配の大きさを計算してしきい値を適用し,エッジと考えられるイメージの領域を見つけます。

K = single([1 2 1;0 0 0;1 2 1]);H = conv2(单(grayImage), k,“相同”);V = conv2(单(grayImage), k’,“相同”);E =√H。* H + V * V);edgeImage = uint8((E > threshold) * 255);

png测试图像及其边缘检测输出。

エッジ検出モデルの作成

  1. 新しい仿金宝app真软件モデルを作成し,(用户自定义函数)ライブラリから2つのMATLAB函数ブロックを挿入します。

  2. 常数(金宝app模型)ブロックを追加して,その値を0.4に設定します。(计算机视觉工具箱™)ライブラリから从多媒体文件(计算机视觉工具箱)ブロックを追加します。

  3. 从多媒体文件ブロックの[ブロックパラメーター]ダイアログを開き,[ファイル名)パラメーターをrhinos.aviに設定します。

    [イメージ信号)パラメーターを[1つの多次元信号)に設定します。

  4. 计算机视觉[工具箱]ライブラリから2つの视频查看器(计算机视觉工具箱)ブロックをモデルに追加します。

    金宝appSimulink模型用于实现包含块的边缘检测算法。

  5. MATLAB函数ブロックのうちの1つをダブルクリックします。既定の関数シグネチャがMATLAB函数ブロックエディターに表示されます。

  6. ソーベルエッジ検出アルゴリズムを実装する,関数索贝尔を定義します。関数ヘッダーは、grayImageおよび阈值を関数索贝尔の引数として宣言し,edgeImageを戻り値として宣言します。エディタードキュメントをファイルに保存します。

    函数edgeImage =索贝尔(grayImage阈值)% # codegen定义Sobel边缘检测的KernelK = single([1 2 1;0 0 0;1 2 1]);%检测边缘H = conv2(单(grayImage), k,“相同”);V = conv2(单(grayImage), k’,“相同”);E =√H。* H + V * V);edgeImage = uint8((E > threshold) * 255);结束

  7. MATLAB函数ブロックを右クリックし,[ブロックパラメーター(子系统)]を選択します。

  8. [コード生成)タブで,[関数のパッケージ化)について(再利用可能な関数)を選択します。

  9. もう一方のMATLAB函数ブロックについて,手順3と4を繰り返します。このブロックは,ソーベルエッジ検出の演算の前に,RGBからグレースケールへの変換を実装します。

    函数灰色= RGB2gray (RGB)% # codegen%将彩色图像转换为灰色图像灰度= (0.2989 * double(RGB(:,:,1)) +...0.5870 * double(RGB(:,:,2)) +...0.1140 *双(RGB (:,:, 3)));结束
  10. これらのブロックを,次の図に示すように接続します。モデルをedgeDetection.slxとして保存します。

    金宝app显示块之间连接的Simulink模型。

  11. エラーについてテストするために,ツールストリップの[実行]ボタンを使用して,金宝app仿真软件エディターでモデルをシミュレーションします。シミュレーション中にすべてのビデオフレームを表示するには,视频查看器ブロックの[シミュレーション],[フレームを落として性能を改善)オプションを無効にします。

    边缘检测输出从视频查看器块。

コード生成用のモデルの構成

モデルコンフィギュレーションパラメーターにより,コードの生成とビルドのプロセスのさまざまなオプションを指定できます。

  1. [コンフィギュレーションパラメーター]ダイアログボックスの[ソルバー]ペインを開きます。モデルのCUDAコードを生成するには,固定ステップソルバーを使用するようにモデルを構成しなければなりません。このオプションにより,コード生成に必要な一定の(固定)ステップサイズを維持します。

    パラメーター 設定 生成されたコードに対する影響
    タイプ 固定ステップ コード生成に必要である,一定の(固定)ステップサイズを維持します。
    ソルバー 離散(連続状態なし) モデルの状態微分の計算に固定ステップ積分手法を適用します。
    固定ステップサイズ 汽车 金宝app仿真软件によりステップサイズが選択されます。

    配置参数对话框的快照显示模拟求解器选项。

  2. [コード生成)ペインを選択します。[システムターゲットファイル](grt.tlc)に変更します。嵌入式编码器®のターゲットファイル(ert.tlc)を使用することもできます。

  3. [言語](c++)に設定します。

  4. (GPUコードの生成)を選択します。GPU编码器固有のオプションが,[コード生成]、[GPUコード]ペインに表示されます。

  5. [コード生成のみ]を選択します。

  6. [ツールチェーン]を選択します。Linux®プラットフォームの場合は[NVIDIA CUDA | gmake(64位Linux)]を選択します。窗户®システムの場合は[NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)]を選択します。

  7. [コード生成]、[インターフェイス]ペインで,(垫ファイルのログ]を無効にします。コードジェネレーターでは,CUDAコードの生成時に垫ファイルのログをサポートしません。

  8. [コード生成]、[レポート]ペインで[コード生成レポートを作成)[レポートを自動的に開く]を選択します。

  9. この例の目的上,[コード生成]、[GPUコード]ペインでGPU固有のパラメーターの既定値を使用できます。

    在模型配置参数对话框的“GPU代码”窗格中。

  10. (好的)をクリックして[コンフィギュレーションパラメーター]ダイアログボックスを保存して閉じます。

  11. 別の方法として,set_param(金宝app模型)を使用して,MATLAB®コマンドウィンドウからモデルパラメーターをプログラムで構成することもできます。次に例を示します。

    set_param (“edgeDetection”“GenerateGPUCode”CUDA的);

モデルのCUDAコードの生成

  1. 金宝app仿真软件エディターで,金宝app仿真软件编码器アプリを開きます。

  2. コードを生成します。

    診断ビューアーにメッセージが表示されます。コードジェネレーターにより,CUDAソースファイルおよびヘッダーファイルとHTMLコード生成レポートが作成されます。コードジェネレーターは実行可能ファイルを”ビルドフォルダー”(現在の作業フォルダーの中のedgeDetection_grt_rtwという名前のサブフォルダー)に配置します。

    関数< model_name > _eML_blk_kernelおよび< model_name > _eML_blk_kernel_cでCUDAカーネルを見つけることができます。3つの連続する山形かっこで囲まれている情報が,カーネルの実行コンフィギュレーションです。

  3. 生成されたCUDAコードの例を示します。

    edgeDetection.cu

制限

  • Stateflow®チャートでのMATLAB函数ブロックの使用はサポートされていません。

  • MATLAB函数ブロックでは,MATLAB言語のすべてのデータ型がサポートされているわけではありません。サポートされているデータ型については,ブロックのドキュメンテーションを参照してください。

参考

関数

関連するトピック