このペ,ジの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
生成されたcudaコドおよびmatlabソスコド間でのトレス
この例では,matlab®ソ,スコ,ドと生成されたcuda®コ,ド間でトレ,ス(セクションの強調表示)を行う方法を説明します。ソスコドと生成コド間でのトレスは以下を行うのに役立ます。
コドジェネレタによるgpuカネルへのアルゴリズムのマッピング方法を理解する。
生成コ,ドの問題をデバッグする。
生成コ,ドの品質を評価する。
次のいずれかの方法を使用してトレ,スできます。
MATLABソースコードをコメントとして含むコードを生成するようGPU编码器™を設定する。コメントでは,ソ,スコ,ドの各行の直前にトレ,サビリティタグが置かれます。トレ,サビリティタグは,ソ,スコ,ドの場所に関する詳細を提供します。嵌入式编码器®をご利用の場合,コード生成レポート内のトレーサビリティタグは,対応するMATLABソースコードへのリンクになります。
嵌入式编码器では,双方向のトレーサビリティを含むコード生成レポートが出力されます。レポート内の双方向のトレースを使用すると,MATLABソースコードと生成されたC / c++コードとのマッピングを可視化できます。MATLAB代码与生成的C/ c++代码的交互跟踪(嵌入式编码)を参照してください。
トレ,サビリティタグの生成
Matlabソ,スコ,ドの作成
トレーサビリティタグを説明するために,この例では,CPUで実行される標準のMATLABコマンドを使ったマンデルブロ集合の実装を使用します。この実装は,電子書籍”MATLAB实验(Cleve Moler著)で提供されているコ.ドに基づきます。
マンデルブロ集合とは,下記の方程式で定義された軌跡がk→∞のときに有限の範囲内にとどまる値z0で構成された複素平面の領域です。
次のコ,ド行を使用してmandelbrot_count.m
というmatlab関数を作成します。このコ,ドは,マンデルブロ集合のベクトル化済みのmatlab実装です。これは,グリッドのすべての点(xGrid yGrid)
にいて,方程式で定義された軌跡の原点からの距離が2
になる反復@ @ンデックス数
を計算します。次に,数
の自然対数を返します。これはマンデルブロ集合の色分けされたプロットを生成するために使用されます。
函数count = mandelbrot_count(maxIterations,xGrid,yGrid)添加kernelfun pragma来触发内核创建coder.gpu.kernelfun;% mandelbrot计算z0 = xGrid + 1i*yGrid;Count = ones(size(z0));Z = z0;为n = 0:maxIterations z = z.*z + z0;Inside = abs(z)<=2;计数=计数+内部;结束Count = log(Count);
テストベクトルの作成
次のコド行を使用して,エントリポント関数のテストベクトルを作成します。このスクリプトは,xlim
とylim
で指定した範囲間に実数部(x)と虚数部(y)の1000 x 1000のグリッドを生成します。これらの入力を使用して,エントリポmandelbrot_count
を検証し,結果のマンデルブロ集合をプロットできます。
maxIterations = 500;gridSize = 1000;Xlim = [-0.748766713922161,-0.748766707771757];Ylim = [0.123640844894862,0.123640851045266];x = linspace(xlim(1),xlim(2),gridSize);y = linspace(ylim(1),ylim(2),gridSize);[xGrid,yGrid] = meshgrid(x,y);
トレ,サビリティタグの生成
生成コード内にトレーサビリティタグを出力するには,コメントとしてのMATLABソースコードの生成を有効にします。
GPU编码器アプリで,[コメントとしてmatlabソ,スコ,ドを含める]を
[はい]
に設定します。コ,ド生成構成オブジェクトで,
coder.gpuConfig
オブジェクトを作成し,MATLABSourceComments
プロパティを真正的
に設定します。cfg = code . gpuconfig (“dll”,“是”,真正的);cfg。GenerateReport = true;cfg。MATLABSourceComments = true;cfg.GpuConfig.CompilerFlags =“——fmad = false”;codegen配置cfgarg游戏{maxIterations, xGrid, yGrid}mandelbrot_count
メモ
——fmad = false
フラグは,学校网站
に渡すと,浮動小数点積和演算(fmad)最適化を無効にするようにこのコンパaaplラに指示します。このオプションは、CPUとGPUのアーキテクチャの違いが原因で,生成コード上の数値の不一致を防ぐために設定します。詳細にいては,CPUとgpuの数値の差を参照してください。
レポ,トへのアクセス
コ,ド生成レポ,トを開くには,[レポ,トの表示]をクリックします。
コ,ド生成レポ,トにはreport.mldatx
という名前が付けられます。これは,コ,ド生成出力フォルダ,の超文本标记语言
サブフォルダ,内に配置されます。MATLABR2018a 以降をご利用の場合は、report.mldatx
ファ@ @ルをダブルクリックして開くことができます。
[matlabソ.ス]ペ电子邮箱ンで,mandelbrot_count.m
を選択します。[コド]ペンにmatlabソスコドが表示されます。
関数mandelbrot_count
の隣にある緑色の(GPU)マ,カ,は,生成コ,ドにCPUおよびgpuの両方のセクションがあることを示します。緑色の垂直バはgpuにマッピングされるコド行を示します。変数または式の型に関する情報,および対応するGpuカ,ネル関数の名前を表示するには,変数または式の上でポ。強調表示されたコードをクリックして選択すると,コードの色が青になり,そのセクションからポインターを遠ざけても情報を確認できます。Esc
キ,を押すか,別のコ,ドを選択するまでそのコ,ドは選択されたままです。
エントリポ@ @ント関数mandelbrot_count.m
用に生成されたcudaコ,ドを表示するには,[生成コ,ド]ペ@ @ンからmandelbrot_count.cu
を選択します。
トレ,サビリティタグの形式
生成コードでは,コメント内のMATLABソースコードの直前にトレーサビリティタグが表示されます。タグの形式は次のようになります。<文件名>:<行号>
。
たとえば,このコメントは,ソ,スファ,ルmandelbrot_count.m
の5
行目にコ,ドz0 = xGrid + 1i*yGrid;
があることを示しています。
/*“mandelbrot_count: 5”z0 = xGrid + 1i*yGrid;
トレ,サビリティタグの制限事項
Matlabソ,スコ,ドは,以下に対してコメントとして含めることはできません。
MathWorks®ルボックスの関数
Pコド
コメントの外観と位置は次のように異なる場合があります。
たとえば定数畳み込みなどにより実装コードが消去された場合でも,生成されたコード内にコメントが挿入されることがあります。
関数またはコードブロック全体が消去された場合,生成されたコードからコメントが消去される可能性があります。
最適化によっては,これらのコメントが生成されたコ,ドから分離される場合があります。
生成コード内にソースコードのコメントを含めることを選択しなかった場合でも,生成コードはMATLABソースコードからの法的に必要なコメントを含みます。
複数の出力がある関数は強調表示されません。
coder.nullcopy
など,関数编码器
の呼び出しは強調表示されません。cuDNN、cuBLAS cuFFTなどのライブラリの呼び出しにマッピングされるコードは強調表示されません。その結果,gpuに完全にマッピングされる関数に誤ってタグ付けされる可能性があります。
参考
codegen
|coder.gpuConfig
|编码器。CodeConfig
|编码器。EmbeddedCodeConfig