このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
生成コードのファイルを,MATLAB®を含まないシステムや統合開発環境(IDE)といった,他の開発環境に移動するには,コマンドラインで関数packNGo
を使用するか,GPU编码器™アプリで[パッケージ]オプションを使用します。ファイルは圧縮ファイルにパッケージ化され,標準のzipユーティリティを使用して移動および解凍できます。
GPU编码器を使用して生成されたコードは,サードパーティのコンパイラとライブラリを利用して実行可能ファイルのビルドと実行を行うため,移動先の開発環境もその要件を満たしていなければなりません。詳細は,前提条件となる製品のインストールと前提条件となる製品の設定を参照してください。
メモ
GPU编码器では,packNGo
コマンドの“minimalHeaders”
オプションを假
に設定する必要があります。この設定は,コードをビルドするのに必要な最低限のヘッダーファイルではなく,zipファイル内のインクルードパスで見つかったヘッダーファイルをすべてインクルードするよう,ソフトウェアに指示します。たとえば,packNGo (buildInfo minimalHeaders,假)
のようにします。
この例では,GPU编码器アプリの[パッケージ]オプションを使用して,移動用に生成コードをzipファイルにパッケージ化する方法を説明します。この例では,ソーベルエッジ検出アプリケーションを使用してこの概念を説明します。既定では,GPU编码器は現在の作業フォルダーにzipファイルを作成します。
必要条件
NVIDIA CUDA技术®®対応ハードウェア,コンパイラ,およびライブラリ。サポートされているコンパイラおよびライブラリのバージョンの詳細は,サードパーティハードウェアを参照してください。環境変数の設定は,前提条件となる製品の設定を参照してください。
ソーベルエッジ検出エントリポイント関数
ソーベルエッジ検出アルゴリズムでは,グレースケールイメージに対する2次元の空間勾配演算が行われます。この演算は,エッジに相当する空間周波数の高い領域を強調します。
类型sobelEdge.m
Copyright 2017-2019 The MathWorks, Inc. maskX = single([-1 01;2 0 2;1 0 1]);maskY = single([-1 -2 -1;0 0 0;1 2 1]);coder.gpu.kernelfun ();resX = conv2(Image, maskX, 'same'); / /复制图像resY = conv2(图像,maskY, '相同');(12级(resX。^ 2 + resY。^ 2); thresh = magnitude < 0.4; magnitude(thresh) = 0; end
ソーベルエッジ検出アルゴリズムは,2つの直交フィルターカーネル(maskX
とmaskY
)を使用して,入力イメージの水平方向勾配(resX
)と垂直方向勾配(resY
)を計算します。このアルゴリズムは,フィルター処理演算を実行した後,勾配の大きさを計算してしきい値を適用し,エッジと考えられるイメージの領域を見つけます。
テストイメージに対するソーベルエッジ検出アルゴリズムの実行
ソーベルフィルター処理アルゴリズムは,グレースケールイメージに作用します。カラーイメージを,正規化された値をもつ(黒が0.0,白が1.0)等価なグレースケールイメージに変換します。
我= imread (“hello.jpg”);imGray =(0.2989 *双(im(:,: 1)) + 0.5870 *双(im(:,: 2)) + 0.1140 *双(im (:,:, 3))) / 255;imSize =大小(imGray);图();图像(im);标题(“测试图”);
writematrix
コマンドを使用して,グレースケールイメージの行列をimputImage.csv
ファイルに書き込みます。ソーベルエッジ検出アプリケーションが,このCSVファイルを読み取ります。
writematrix(重塑(imGray 1 []),“inputImage.csv”);imOut = sobelEdge(双(imGray));
エッジが検出されたイメージを表示するには,関数repmat
を使用して行列imOut
を再構築し,图像
コマンドに渡せるようにします。
图();图像(repmat (imOut [1 1 3]));标题(MATLAB中边缘检测图像);
sobelEdge.m
主要用カスタム関数の作成
この例では,カスタムメインファイルmain_sobel.cuおよび関連するヘッダーファイルmain_sobel.hを使用します。このカスタムメインファイルは,inputImage.csv
ファイルから入力イメージを読み取り,生成されたsobelEdge.cu
ファイルの関数sobelEdge
を呼び出し,エッジが検出されたイメージのデータをoutputMag.csv
ファイルに保存します。
GPU编码器アプリを使用した生成コードのパッケージ化
GPU编码器アプリを開きます。MATLABツールストリップの[アプリ]タブにある[コード生成]で,GPU编码器アプリアイコンをクリックします。
[ソースファイルの選択]ページで,エントリポイント関数の名前”sobelEdge.m
“を入力します。[次へ]をクリックして[入力の型を定義]ページに進みます。
入力图像
が可変サイズ(上限が1024)の双データ型であることを指定します。1024年上限がの可変サイズを指定するには,: 1024
を選択します。[次へ]をクリックして[実行時の問題の確認]ページに進みます。
実行時の問題をチェックします。[実行時の問題の確認]ダイアログボックスで,双の入力を使用してsobelEdge
を呼び出すコードを入力します。たとえば,sobelEdge ((648484))
のようにします。[問題の確認]をクリックします。実行時の問題を確認するため,アプリによって墨西哥人関数が生成され,実行されます。アプリはsobelEdge
の問題を検出しません。(次へ]をクリックして[コードの生成)ページに進みます。
[生成]ダイアログボックスで,(ビルドタイプ]を[実行可能ファイル]に設定します。ソースコード,スタティックライブラリ,またはダイナミックライブラリのターゲット用に生成されたコードをパッケージ化することもできます。墨西哥人ターゲット用に生成されたコードをパッケージ化することはできません。[詳細設定]をクリックします。
[生成されたファイルのカスタムCコード]の[カスタムコード]タブで,(追加ソースファイル]をmain_sobel.cu
に設定します。[閉じる]をクリックして[コードの生成]ページに進みます。
[生成]をクリックします。[次へ]をクリックして[ワークフローの完了]ページに進みます。[ワークフローの完了]ページで,(パッケージ]をクリックします。
[パッケージ]ダイアログボックスで,パッケージファイル名とパッケージ化のタイプを指定します。既定では,アプリはプロジェクト名からパッケージファイル名を導出します。アプリは,現在の作業フォルダーにファイルを保存します。既定では,アプリは生成されたファイルを単一でサブフォルダーのないフォルダーとしてパッケージ化します。この例の場合,既定の値を使用し,(保存]をクリックします。
このzipファイルには,移動に必要なCUDA c++コードとヘッダーファイルが格納されています。以下のものは含まれません。
コンパイルフラグ
定義
makefile
メインファイルの例(主要関数の例の生成とコンパイルを行うようにコード生成を設定した場合を除く)
作業フォルダー内のsobelEdge_pkg.zip
の内容を検査し,移動先のシステムに移動する準備が整っているか確認します。使用する zip ツールによっては、解凍せずにファイルを開いて内容を検査できます。これで、得られた zip ファイルを目的の開発環境に移動して解凍できるようになりました。
コマンドラインでの生成コードのパッケージ化
関数sobelEdge
用のCUDA実行可能ファイルを生成するには,GPUコード構成オブジェクトを作成してcodegen
コマンドを実行します。
cfg = coder.gpuConfig (exe”);cfg。GenerateReport = true;cfg。CustomSource =“main_sobel.cu”;codegen配置cfgsobelEdgearg游戏{编码器。类型of(0,[1024 1024],[1 1])}
代码生成成功:查看报告
生成コードをzipファイルにパッケージ化するには,BuildInfo
オブジェクトを読み込みます。BuildInfo
には,生成コードをコンパイルしてリンクするのに必要な情報(すべてのソースとインクルードファイルの一覧,およびそれらのパス)が格納されています。
buildInfoFile = fullfile (pwd,“codegen”,exe”,“sobelEdge”,“buildInfo.mat”);负载(buildInfoFile);
関数packNGo
を使用して、邮政ファイルを作成します。
packNGo (buildInfo“packType”,“平”,“nestedZipFiles”,真的,...“minimalHeaders”假的,“includeReport”、假);
関数packNGo
は,現在の作業フォルダーにsobelEdge.zip
ファイルを作成します。このzipファイルには,移動に必要なCUDA c++コードとヘッダーファイルが格納されています。以下のものは含まれません。
コンパイルフラグ
定義
makefile
メインファイルの例(主要関数の例の生成とコンパイルを行うようにコード生成を設定した場合を除く)
作業フォルダー内のsobelEdge.zip
の内容を検査し,移動先のシステムに移動する準備が整っているか確認します。使用する zip ツールによっては、解凍せずにファイルを開いて内容を検査できます。これで、得られた zip ファイルを目的の開発環境に移動して解凍できるようになりました。
スタンドアロンコードの実行
生成されたスタンドアロン実行可能ファイルを実行すると,出的力magnitudeData
が計算されてコンマ区切りのファイルに書き込まれます。この出力をMATLABに読み戻し,関数图像
を使用して,エッジが検出されたイメージを可視化します。
如果ispc系统(“sobelEdge.exe”);其他的系统(”。/ sobelEdge ');结束imOutGPU =重塑(readmatrix (“outputMag.csv”), imSize);edgeImg = repmat(imOutGPU,[1 1 3]);图();图像(edgeImg);标题(“在GPU上检测到边缘图像”);
関数packNGo
のオプションを指定できます。
目的 | 指定 |
---|---|
ファイルのパッケージ化の構造を階層構造に変更する。 |
packNGo (buildInfo packType,“分层”); |
ファイルのパッケージ化の構造を階層構造に変更し,プライマリzipファイルの名前を変更する。 |
packNGo (buildInfo packType,“层次”,… |
コードをビルドするのに必要な最低限のヘッダーファイルではなく,zipファイル内のインクルードパスで見つかったヘッダーファイルをすべてインクルードする。 GPU编码器では,このオプションを假に設定しなければなりません。 |
packNGo (buildInfo, minimalHeaders,假); |
解析エラーと不足しているファイルの警告を生成する。 |
packNGo (buildInfo, ignoreParseError,真的,… |
詳細については,packNGo
を参照してください。
ファイルを生成してパッケージ化する前に,サブフォルダーがないフォルダー構造にするか,階層的なフォルダー構造にするか決定してください。既定では,関数packNGo
はファイルを単一でサブフォルダーのない構造としてパッケージ化します。通常はこの方法が最も簡潔で最適な選択肢です。
条件 | 使用 |
---|---|
生成されたmakefileを使用しないIDEにファイルを移動するつもりである。または,必要な静的ファイルの相対位置を利用しないコードである | 単一でサブフォルダーのない構造 |
生成されたmakefileを移動先の開発環境で使用する,またはコードがファイルの相対位置を利用するため,移動先の開発環境において移動元の開発環境のフォルダー構造を維持しなければならない | 階層構造 |
階層構造を使用する場合,関数packNGo
によって2重のzipファイルが作成されます。プライマリzipファイルの中に,次のセカンダリzipファイルが格納されます。
mlrFiles.zip
- - - - - -
フォルダーツリー内にあるファイルmatlabroot
sDirFiles.zip
——コード生成を開始したビルドフォルダー配下のファイル
otherFiles.zip
- - - - - -
またはmatlabroot
开始
フォルダーツリー内にない必須ファイル
セカンダリzipファイルへのパスは,プライマリzipファイルのルートフォルダーからの相対パスとなり,移動元の開発環境のフォルダー構造が維持されます。