コード生成レポート
GPU Coder™ は、次を実行するのに役立つコード生成レポートを出力します。
コード生成の問題をデバッグし、MATLAB® コードがコード生成に適しているか確認する。
生成された CUDA® コードを表示する。
MATLAB ソース コードと生成された CUDA コード間でトレースする。
コード ジェネレーターで MATLAB コード内の変数と式の型情報を判断し、伝播する方法を確認する。
生成されたコードでの潜在的な問題を特定する。
Embedded Coder® で利用可能な追加レポートにアクセスする。
レポート生成
レポート生成を有効にする場合またはエラーが発生する場合、コード ジェネレーターはコード生成レポートを作成します。コード生成レポートの作成とオープンを制御するには、アプリ設定、codegen
オプションまたは構成オブジェクトのプロパティを使用します。
GPU Coder アプリでは、次を行います。
レポートを生成するには、[常にレポートを作成] を
Yes
に設定します。アプリで自分のレポートを開くには、[レポート生成時の自動起動] を
Yes
に設定します。
コマンド ラインにおいて、次の codegen
オプションを使用します。
レポートを生成するには、
-report
オプションを使用します。レポートを生成して開くには、
-launchreport
オプションを使用します。
あるいは、次の構成オブジェクト プロパティ (coder.CodeConfig
) を使用します。
レポートを生成するには、
GenerateReport
をtrue
に設定します。codegen
で自分のレポートを開く場合は、LaunchReport
をtrue
に設定します。
レポートの場所
コード生成レポートには report.mldatx
という名前が付けられます。これは、コード生成出力フォルダーの html
サブフォルダー内に配置されます。MATLAB R2018a 以降をご利用の場合は、report.mldatx
ファイルをダブルクリックして開くことができます。
エラーと警告
[すべてのメッセージ] タブに、コード生成エラー、警告および情報のメッセージが表示されます。エラーまたは警告に関するソース コードを強調表示するには、メッセージをクリックします。最初のメッセージに対処するのが最も効率よいアプローチです。その後のエラーや警告は最初のメッセージに関連して発生したものである可能性があるからです。
[ビルド ログ] タブに、コンパイルとリンクに関するエラーと警告が表示されます。
ファイルと関数
レポートには、MATLAB のソース関数と生成ファイルのリストが表示されます。[MATLAB ソース] ペインの [関数リスト] ビューでは、含まれているファイルに従って関数が整理されます。呼び出し構造に従って関数を可視化するには、[呼び出しツリー] ビューを使用します。
レポートの [コード] ペインで関数を表示するには、リスト内の関数をクリックします。関数をクリックすると、その関数が含まれるファイルが開きます。選択したファイルを MATLAB エディターで編集するには、[MATLAB で編集] をクリックするか、コード ペインで行番号をクリックします。
Embedded Coder を利用して、トレーサビリティを有効にしたレポートを生成する場合、[コード] ペインでソース コードと生成コードを並べて表示するには、[Trace Code] をクリックします。ソース コードと生成コード間で双方向にトレースすることができます。Interactively Trace Between MATLAB Code and Generated C/C++ Code (Embedded Coder)を参照してください。
スタンドアロン コード (ライブラリまたは実行可能ファイル) の生成ファイルを他の開発環境に移動させる場合、[コードのパッケージ化] をクリックしてそれらを zip ファイルにすることができます。
特殊な関数またはクラス
関数が異なるデータ型の入力で呼び出される場合、またはクラスがそのプロパティに対して異なるデータ型を使用する場合、コード ジェネレーターは特殊化を生成します。[MATLAB ソース] ペインでは、番号付きの関数 (またはクラス) が特殊化を示します。次に例を示します。
MATLAB ソース
[コード] ペインで MATLAB 関数を表示するには、[MATLAB ソース] ペインで関数をクリックします。変数または式の型に関する情報を表示するには、変数または式の上でポインターを止めます。
[コード] ペインでは、MATLAB ソース コードの構文が強調表示されるため、MATLAB の構文要素を識別することができます。構文の強調表示は、関数が外部関数であるかどうか、引数が定数であるかどうかといった特定のコード生成属性を識別するのにも役立ちます。
CUDA カーネル
関数 mandelbrot_count
の隣にある緑色の [GPU] マーカーは、生成コードに CPU および GPU の両方のセクションがあることを示します。緑色の垂直バーは GPU にマッピングされるコード行を示します。変数または式の型に関する情報、および対応する GPU カーネル関数の名前を表示するには、変数または式の上でポインターを止めます。強調表示されたコードをクリックして選択すると、コードの色が青になり、そのセクションからポインターを遠ざけても情報を確認できます。Esc
キーを押すか、別のコードを選択するまでそのコードは選択されたままです。
外部関数
MATLAB コードでは、レポートは紫色のテキストで外部関数を識別します。情報ウィンドウは関数が外部関数であることを示しています。
定数引数
MATLAB コード内のオレンジ色のテキストは、エントリポイント関数または特殊な関数に対するコンパイル時の定数引数を示しています。情報ウィンドウにはその定数値が表示されます。
定数引数の値を把握すれば、生成された関数シグネチャを理解できます。また、コード生成で異なる定数引数値をもつ関数の特殊化が作成された場合に確認することもできます。
ワークスペース内の変数に値をエクスポートするには、 をクリックします。
生成コード
生成された CUDA のソース ファイルまたはヘッダー ファイルを [コード] ペインに表示するには、[生成コード] ペインの [ファイル] タブにあるファイルをクリックします。[生成コード] ペインの [GPU カーネル] タブに、生成コードに含まれる CUDA カーネルの一覧が表示されます。生成コード内の対応するカーネルの定義に直接移動するには、カーネル名をクリックします。
MATLAB 変数
[変数] タブには、選択した MATLAB 関数の変数に関する情報が表示されます。関数を選択するには、[MATLAB ソース] ペインで関数をクリックします。
変数テーブルには以下の情報が表示されます。
クラス、サイズ、実数/複素数
固定小数点型のプロパティ
この情報は、型の不一致エラーなどのエラーをデバッグしたり、コード ジェネレーターが型を伝播する方法や生成コード内でデータを表現する方法を把握したりするのに役立ちます。
[変数] タブの視覚的なインジケーター
次の表では、変数テーブルで使用される記号、バッジ、およびその他のインジケーターについて説明します。
変数テーブルの列 | インジケーター | 説明 |
---|---|---|
名前 | 展開アイコン | 変数には、展開アイコンをクリックすることで表示できる要素やプロパティがあります。 |
名前 | {:} | 異種混合 cell 配列 (すべての要素のプロパティは同じになります) |
名前 | {n} | 異種混合 cell 配列の n 番目の要素 |
クラス | v > n | v は、異なるクラス、サイズ、および実数/複素数で再利用されます。数値 n は、一意の再利用 (一意のプロパティ セットをもつ再利用) のそれぞれを特定します。名前を変更した変数の上でポインターを止めると、クラス、サイズおよび実数/複素数を共有するこの変数のインスタンスのみがレポートで強調表示されます。 |
サイズ | :n | 上限が n の可変サイズの次元 |
サイズ | :? | 上限なしの可変サイズ |
サイズ | イタリック | 実行中に次元によってサイズが変化させられない可変サイズの配列 |
クラス | 接頭辞 sparse | スパース配列 |
クラス | 接頭辞 complex | 複素数 |
[変数] タブの配列レイアウト インジケーター
次の表では、変数テーブルでの配列レイアウトを示すバッジについて説明します。
バッジ | 説明 |
---|---|
行優先の配列レイアウト。 | |
列優先の配列レイアウト。 | |
行優先のレイアウトと列優先のレイアウトの混在。 |
行優先および列優先の配列レイアウトを参照してください。
コードのトレース
次のいずれかの方法を使用して、MATLAB ソース コードと生成された CUDA コード間でトレースできます。
MATLAB コードと生成コード間のマッピングを対話形式で可視化する。双方向のトレースにアクセスするには、レポートで [Trace Code] をクリックします。[Trace Code] ボタンは、Embedded Coder を利用されていて、コード生成時にコードのトレーサビリティを有効にした場合にのみ有効化されます。Interactively Trace Between MATLAB Code and Generated C/C++ Code (Embedded Coder)を参照してください。
ソース コードをコメントとして生成された CUDA コードに含める。コメントで、コード ジェネレーターは対応する MATLAB ソース コードを見つけるのに役立つタグを生成します。Embedded Coder を利用している場合は、タグはソース コードへのリンクです。生成された CUDA コードおよび MATLAB ソース コード間でのトレースを参照してください。
コード洞察
コード ジェネレーターは、生成コードで発生する可能性のある問題を検出して報告することができます。[コードの洞察] タブにメッセージを表示します。次のような問題が含まれます。
生成コードの動作と MATLAB コードの動作の潜在的な相違点。レポートに潜在的な相違点のメッセージが含まれるのは、潜在的な相違点の報告を有効にしている場合のみです。潜在的な相違点のレポートを参照してください。
GPU コード生成の診断レポート。このレポートでは、コード生成時の問題が特定され、パフォーマンスを最大化できる可能性のある解決策が提案されます。
潜在的な行優先の問題。行優先のレイアウトのコード設計を参照してください。
追加レポート
[概要] タブには、次の追加レポートへのリンクを表示することができます。
GPU コード メトリクス レポート。Generating a Static Code Metrics Report for Code Generated from MATLAB Code (Embedded Coder)を参照してください。
レポートの制限事項
レポートは、ループの展開に関して完全な情報を表示するわけではありません。1 つの任意の反復のデータ型を表示します。
レポートは、デッド コードに関する情報を表示しません。