Main Content

MATLAB コードから生成されたコードに対する GPU コード メトリクス レポートの作成

GPU 静的コード メトリクス レポートには、生成された CUDA® カーネルに関する情報、スレッドとブロックの次元、メモリ使用量その他の統計値など、生成された CUDA コードの静的解析結果が含まれています。静的コード メトリクス レポートを作成するには、GPU Coder™ を使用してスタンドアロンの CUDA コードを生成し、コード生成レポートを作成しなければなりません。コード生成レポートを参照してください。

既定では、コード生成時に静的コード メトリクス解析は実行されません。解析を実行して結果を確認したい場合は、コード生成レポートの [概要] タブにある [GPU コード メトリクス] をクリックします。

GPU コード メトリクス レポートの例

この例では、GPU 静的コード メトリクス解析を実行し、静的コード メトリクス レポートを調査します。

次のコード行を使用して mandelbrot_count.m という MATLAB® 関数を作成します。このコードは、マンデルブロ集合のベクトル化済みの MATLAB 実装です。これは、グリッドのすべての点 (xGrid,yGrid) について、方程式で定義された軌跡の原点からの距離が 2 になる反復インデックス count を計算します。次に、count の自然対数を返します。これはマンデルブロ集合の色分けされたプロットを生成するために使用されます。

function count = mandelbrot_count(maxIterations,xGrid,yGrid)
% Add kernelfun pragma to trigger kernel creation
coder.gpu.kernelfun;
% mandelbrot computation

z0 = xGrid + 1i*yGrid;
count = ones(size(z0));

z = z0;
for n = 0:maxIterations
    z = z.*z + z0;
    inside = abs(z)<=2;
    count = count + inside;
end
count = log(count);

次のコード行を使用して、サンプル データを作成します。このコードは、xlimylim で指定した範囲間に実数部 (x) と虚数部 (y) の 1000 x 1000 のグリッドを生成します。

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);

スタンドアロン コード生成 (スタティック ライブラリ、ダイナミック リンク ライブラリ、または実行可能プログラム) 用の構成オブジェクトを使用して、コード生成レポートの作成を有効にします。

cfg = coder.gpuConfig('dll');
cfg.GenerateReport = true;
cfg.MATLABSourceComments = true;
cfg.GpuConfig.CompilerFlags = '--fmad=false';

メモ

--fmad=false フラグは、nvcc に渡すと、浮動小数点積和演算 (FMAD) 最適化を無効にするようにこのコンパイラに指示します。このオプションは、CPU と GPU のアーキテクチャの違いが原因で、生成コード上の数値の不一致を防ぐために設定します。詳細については、CPU と GPU の数値の差を参照してください。

あるいは、codegen -report オプションを使用します。

codegen を使用してコードを生成します。-args オプションで入力例を指定し、入力引数の型を指定します。-config オプションを使用して、構成オブジェクトを指定します。

codegen -config cfg -args {maxIterations,xGrid,yGrid} mandelbrot_count

コード生成レポートを開くには、[レポートの表示] をクリックします。

静的コード メトリクス解析を実行してコード メトリクス レポートを表示するには、コード生成レポートの [概要] タブにある [GPU コード メトリクス] をクリックします。

コード メトリクス レポートの確認

  1. 生成された CUDA カーネルに関する情報を確認するには、[CUDA カーネル] をクリックします。

    CUDA kernel information in the GPU static metrics report

    • [カーネル名] に、生成された CUDA カーネルの一覧が表示されます。既定では、GPU Coder によって、カーネル名の先頭にエントリポイント関数の名前が追加されます。

    • [スレッドの次元] は、xy、および z の次元に沿ったブロック内のスレッドの数を特定する [Tx,Ty,Tz] 形式の配列です。

    • [ブロックの次元] は、xy に沿ったブロック内のグリッドの数を定義する [Bx,By,1] 形式の配列です (z は使用しない)。

    • [共有メモリのサイズ][定数メモリ] の列には、生成コードにおける共有メモリ空間と定数メモリ空間の使用量に関するメトリクスが表示されます。

    • [最小 BlocksPerSM] は、ストリーミング マルチプロセッサあたりの最小ブロック数で、カーネルの起動に使用するブロックの数を示します。

    レポートから、生成されたカーネル コードに移動するには、カーネル名をクリックします。

  2. GPU デバイス上でメモリが割り当てられている変数を確認するには、[CUDA Malloc] セクションに移動します。

    Variable with GPU memory allocation in the GPU static metrics report

  3. 生成コードにおける cudaMemCpy の呼び出しに関する情報を表示するには、[CUDA Memcpy] をクリックします。

    CUDA memory copy information in the GPU static metrics report

制限

  • Embedded Coder® 製品をご利用の場合、コード構成オブジェクトには、コンパイル時に静的メトリクス レポートの生成を有効にするための GenerateCodeMetricsReport プロパティが含まれます。GPU Coder はこの設定に従わないため、コード生成には影響しません。

参考

| | |

関連するトピック