GPU Coderを使用したSi万博1manbetxmulinkモデルからのコド生成
GPU Coder™は,MATLAB函数ブロックを含むS万博1manbetximulink®モデルから,最適化されたcuda®コドを生成します。生成されたコドと実行可能ファルを使用して,英伟达®显卡でのラピッドプロトタ显卡ピングを行うことができます。コド生成レポートとトレーサビリティによって、生成されたコードを表示して解析できます。GPU Coder を使用した CUDA コード生成の基本的な手順は次のとおりです。
モデルを作成するか開きます。
[ソルバ]、[言語]、[ルチェン]およびその他のGPU固有のコンフィギュレーションパラメーターを選択して,コード生成用のモデルを構成します。
モデルをビルドします。
例:ソベルエッジ検出
ソーベルエッジ検出アルゴリズムは,グレースケールイメージで2次元の空間勾配演算を行う,シンプルなエッジ検出アルゴリズムです。このアルゴリズムは、入力。
ソベルエッジ検出アルゴリズムは,2の直交フィルタ(k
とk”
)を使用して、入力(H
)と垂直方向勾配(V
を計算します。このアルゴリズムは,フィルター処理演算を実行した後,勾配の大きさを計算してしきい値を適用し,エッジと考えられるイメージの領域を見つけます。
K = single([1 2 1;0 0 0;-1 -2 -1];H = conv2(single(grayImage),k,“相同”);V = conv2(single(grayImage),k',“相同”);E =√(H。* h + v * v);edgeImage = uint8((E >阈值)* 255);
エッジ検出モデルの作成
万博1manbetxSimulinkモデルを作成し,(用户自定义函数)ラ操作系统管理员ブラリから2操作系统管理员のMATLAB函数ブロックを挿入します。
常数ブロックを追加して,その値を
0.4
に設定します。[计算机视觉工具箱™]ラ邮箱ブラリから来自多媒体文件ブロックを追加します。
来自多媒体文件ブロックの[ブロックパラメタ]ダアログボックスを開き,[ファル名]パラメタを
rhinos.avi
に設定します。[econメジ信号]パラメタを
[1 wqの多次元信号]
に設定します。[计算机视觉工具箱]ラ操作系统管理员ブラリから2操作系统管理员の视频查看器ブロックをモデルに追加します。
MATLAB函数ブロックのうの1をダブルクリックします。既定の関数シグネチャがMATLAB函数ブロックエディタに表示されます。
ソベルエッジ検出アルゴリズムを実装する,関数
索贝尔
を定義します。関数ヘッダーは、grayImage
および阈值
を関数索贝尔
の引数として宣言し,edgeImage
を戻り値として宣言します。エディタドキュメントをファ。函数edgeImage = sobel(grayImage,threshold)% # codegen为Sobel边缘检测定义内核K = single([1 2 1;0 0 0;-1 -2 -1];%检测边缘H = conv2(single(grayImage),k,“相同”);V = conv2(single(grayImage),k',“相同”);E =√(H。* h + v * v);edgeImage = uint8((E >阈值)* 255);结束
MATLAB函数ブロックのブロックパラメタを開きます。[コド生成]タブで,[関数のパッケジ化]パラメタに
[再利用可能な関数]
を選択します。[関数のパッケジ化]パラメタが他の値に設定されている場合,cudaカネルが生成されません。
他のMATLAB函数ブロックを変更して,ソーベルエッジ検出の演算の前にRGBからグレースケールへの変換を実装します。MATLAB函数ブロックの[関数のパッケジ化]パラメタを
[再利用可能な関数]
に設定します。函数灰色= RGB2gray(RGB)% # codegen将彩色图像转换为灰色图像gray = (0.2989 * double(RGB(:,:,1)) +...0.5870 * double(RGB(:,:,2)) +...0.1140 * double(RGB(:,:,3));结束
これらのブロックを,次の図に示すように接続します。モデルを
edgeDetection.slx
として保存します。モデルのエラをテストするには,S万博1manbetximulinkエディタトします。ルストリップで,[実行]をクリックします。
シミュレション中にすべてのビデオフレムを表示するには,视频查看器ブロックの[シミュレション],[フレムを落として性能を改善]オプションを無効にします。
コド生成用のモデルの構成
モデルコンフィギュレーションパラメーターにより,コードの生成とビルドのプロセスのさまざまなオプションを指定できます。
[コンフィギュレションパラメタ]ダ。[ソルバ]ペ邮箱ンを開きます。高速化のためにモデルをコンパイルし,CUDAコードを生成するには,固定ステップソルバーを使用するようにモデルを構成します。次の表に,この例のソルバ構成を示します。
パラメパラメタ 設定 生成されたコドに対する影響 タ邮箱プ 固定ステップ
コド生成に必要である,一定の(固定)ステップサ。 ソルバ 離散(連続状態なし)
モデルの状態微分の計算に固定ステップ積分手法を適用します。 固定ステップサ邮箱ズ 汽车
万博1manbetxSimulinkによりステップサズが選択されます。 [コド生成]ペンで,[システムタゲットファル]を
(grt.tlc)
に設定します。嵌入式编码器®のタゲットファ
(ert.tlc)
またはカスタムのシステムタゲットファ。图形处理器コド生成の場合,カスタムタ
(grt.tlc)
または(ert.tlc)
に基づいていなければなりません。カスタムタゲットファルの開発に,システムタゲットファズ(万博1manbetx仿真软件编码器)を参照してください。[言語]を
(c++)
に設定します。[gpuコドの生成]を選択します。
[コド生成]ペンで,[コド生成のみ]を選択します。
[ルチェン]を選択します。Linux®プラットフォムの場合は
[NVIDIA CUDA | gmake(64位Linux)]
を選択します。窗户®システムの場合は[NVIDIA CUDA (w/Microsoft Visual c++ 20XX) | nmake(64位windows)]
を選択します。カスタムのシステムターゲットファイルを使用する場合は,ツールチェーンアプローチ用のビルドコントロールを設定しなければなりません。カスタムタゲット用のチの詳細に,カスタムタゲットを使用した(万博1manbetx仿真软件编码器)を参照してください。
[コド生成],[ス]ペンで,[matファルのログ]を無効にします。
[コド生成],[レポト]ペ邮箱ンで[コド生成レポトを作成]と[レポトを自動的に開く]を選択します。
[gpuコドの生成]パラメタを有効にすると,GPU Coder固有のオプションが[コド生成],[gpuコド]ペ邮箱ンに表示されます。
この例では,[コド生成],[gpuコド]ペopenstackンでgpu固有のパラメopenstackタopenstackの既定値を使用できます。
(好的)をクリックして,[コンフィギュレションパラメタ]ダ。
関数
set_param
を使用して,モデルパラメタの構成をmatlab®コマンドウィンドウでプログラムによって行うことができます。set_param (“edgeDetection”,“GenerateGPUCode”,CUDA的);
モデルのcudaコドの生成
万博1manbetxSimulinkエディタで,万博1manbetx仿真软件编码器アプリを開きます。
コドを生成します。
診断ビュアにメッセジが表示されます。コードジェネレーターにより,CUDAソースファイルおよびヘッダーファイルとHTMLコード生成レポートが作成されます。コドジェネレタルを"ビルドフォルダ"(現在の作業フォルダの中のedgeDetection_grt_rtw
という名前のサブフォルダ)に配置します。
関数< model_name > _eML_blk_kernel
および< model_name > _eML_blk_kernel_c
でcudaカネルを見。3の連続する山形かっこで囲まれている情報が,カネルの実行コンフィギュレションです。
制限
Stateflow®チャトでのMATLAB函数ブロック用のgpuコド生成はサポトされていません。
MATLAB函数ブロックでは,matlab言語のすべてのデタ型がサポトされているわけではありません。サポトされているデタ型に,ブロックのドキュメンテ。
图形处理器コド生成の場合,カスタムタ
(grt.tlc)
または(ert.tlc)
に基づいていなければなりません。
参考
関数
open_system
(万博1manbetx模型)|load_system
(万博1manbetx模型)|save_system
(万博1manbetx模型)|close_system
(万博1manbetx模型)|bdclose
(万博1manbetx模型)|get_param
(万博1manbetx模型)|set_param
(万博1manbetx模型)|sim卡
(万博1manbetx模型)|slbuild
(万博1manbetx模型)