Main Content

coder.screener

関数がコード生成に適しているかどうか判別

説明

coder.screener(fcn) は、エントリポイント MATLAB® 関数 fcn を解析し、コード生成の準拠問題として、サポートされない関数および言語機能を特定します。コード生成の準拠問題は準備状態のレポートに表示されます。

fcn が MathWorks® 関数以外の関数 (MATLAB の組み込み関数とツールボックス関数) を直接的または間接的に呼び出すと、coder.screener でそれらの関数が解析されます。MathWorks 関数は解析されません。

coder.screener がすべてのコード生成の問題を検出できるとは限りません。状況によっては、coder.screener が誤ったエラーをレポートする場合があります。

コード生成の問題の不検出や誤ったエラーの検出を回避するには、コードを生成する前に、追加のチェックを実行して MATLAB コードがコード生成に適していることを確認します。

  • coder.screener を使用する前に、コード アナライザーにより特定される問題を修正してください。

  • coder.screener を使用した後、MEX 関数を生成して検証することで MATLAB コードがコード生成に適していることを確認してから C/C++ コードを生成してください。

関数 coder.screener はコード ジェネレーターが外部関数として扱う関数はレポートしません。このような関数の例として、plotdisp、および figure が挙げられます。生成コードでの MATLAB エンジンを使用した関数呼び出しの実行を参照してください。

coder.screener(fcn,'-gpu') は、エントリポイント MATLAB 関数 fcn を解析し、GPU コード生成でサポートされない関数および言語機能を特定します。

coder.screener(fcn_1,...,fcn_n) は複数のエントリポイント MATLAB 関数を解析します。

info = coder.screener(___)coder.ScreenerInfo オブジェクトを返します。そのオブジェクトのプロパティにはコード生成の準備状態の解析結果が含まれます。info を使用してコード生成の準備状態の結果にプログラムによりアクセスします。プロパティの一覧については、coder.ScreenerInfo Properties を参照してください。

すべて折りたたむ

関数 coder.screener は、コード生成でサポートされない関数の呼び出しを特定します。エントリポイント関数 foo1foo1 が呼び出す関数 foo2 をチェックします。

関数 foo2 を記述して、ファイル foo2.m に保存します。

function [tf1,tf2] = foo2(source,target)
G = digraph(source,target);
tf1 = hascycles(G);
tf2 = isdag(G);
end

foo2 を呼び出す関数 foo1 を記述します。foo1 をファイル foo1.m に保存します。

function [tf1,tf2] = foo1(source,target)
assert(numel(source)==numel(target))
[tf1,tf2] = foo2(source,target);
end

foo1 を解析します。

coder.screener('foo1')

コード生成の準備状態のレポートに、サポートされない MATLAB 関数呼び出しの概要が表示されます。レポートの [問題] タブで、foo2.m にコード生成でサポートされていない関数 isdaghascycles の呼び出しが 1 つずつ含まれていることが示されています。

Screenshot of the code generation readiness tool with sample code and analysis results.

関数 foo2 が、サポートされない MATLAB 関数を 2 つ呼び出しています。MEX 関数を生成するには、coder.extrinsic 命令を使用して hascyclesisdag の呼び出しを外部にするようにコードを変更してから、コード生成の準備状態ツールを再実行します。

function [tf1,tf2] = foo2(source,target)
coder.extrinsic('hascycles','isdag');
G = digraph(source,target);
tf1 = hascycles(G);
tf2 = isdag(G);
end

coder.screener をエントリポイント関数 foo1 に対して再実行します。

coder.screener('foo1')

レポートには、関数 hascycles と関数 isdag がコード生成でサポートされないというフラグが示されなくなっています。foo1 用の MEX 関数を生成すると、コード ジェネレーターは実行用のこれら 2 つの関数を MATLAB に送信します。

オプションの出力引数を使用して、関数 coder.screener の呼び出しができます。この構文を使用する場合、関数 coder.screener は、MATLAB コード ベースに対するコード生成の準備状態の解析結果が含まれる coder.ScreenerInfo オブジェクトを返します。coder.ScreenerInfo Properties を参照してください。

この例は、前の例で定義されたファイル foo1.mfoo2.m を使用します。関数 coder.screener を呼び出します。

info = coder.screener('foo1.m')
info = 

  ScreenerInfo with properties:

               Files: [2×1 coder.CodeFile]
            Messages: [2×1 coder.Message]
    UnsupportedCalls: [2×1 coder.CallSite]

    View Screener Report

サポートされていない最初の呼び出しに関する情報にアクセスするには、次のように UnsupportedCalls プロパティにインデックスを付けます。

firstCall = info.UnsupportedCalls(1)
firstCall = 

  CallSite with properties:

    CalleeName: 'hascycles'
          File: [1×1 coder.CodeFile]
    StartIndex: 78
      EndIndex: 86

このサポートされていない hascycles の呼び出しが含まれるファイルのテキストを表示します。

firstCall.File.Text
ans =

    'function [tf1,tf2] = foo2(source,target)
     G = digraph(source,target);
     tf1 = hascycles(G);
     tf2 = isdag(G);
     end
     '

コード生成の準備状態のレポート全体を MATLAB string にエクスポートするには、関数 textReport を使用します。

reportString = textReport(info)
reportString =

    'Code Generation Readiness (Text Report)
     =======================================
     
     2 Code generation readiness issues
     2 Unsupported functions
     2 Files analyzed
     
     Configuration
     =============
     
     Language: C/C++ (MATLAB Coder)
     
     Code Generation Issues
     ======================
     
     Unsupported function: digraph (2)
         - foo2.m (Line 3)
         - foo2.m (Line 4)
     
     '

関数 coder.screener はコード生成でサポートされない MATLAB データ型を特定します。

MATLAB カレンダー duration 配列データ型を含む関数 myfun1 を記述します。

function out = myfun1(A)
out = calyears(A);
end

myfun1 を解析します。

coder.screener('myfun1');

コード生成の準備状態のレポートに、calyears データ型はコード生成でサポートされないことが示されます。コードを生成する前に、報告された問題を修正します。

入力引数

すべて折りたたむ

解析するエントリポイント MATLAB 関数の名前。文字ベクトルまたは string スカラーとして指定します。

例: coder.screener('myfun');

データ型: char | string

解析するエントリポイント MATLAB 関数の名前のコンマ区切りリスト。文字ベクトルまたは string スカラーとして指定します。

例: coder.screener('myfun1','myfun2');

データ型: char | string

バージョン履歴

R2012b で導入