メインコンテンツ

keepMeasuring

クラス: matlab.perftest.TestCase
名前空間: matlab.perftest

自動ループによるコードの測定

説明

keepMeasuring(testcase) は、パフォーマンスの正確な測定値を得るために必要な回数だけ、while ループを反復するようにテスト フレームワークに指示します。

実行が速すぎて MATLAB® で正確に時間が測れないパフォーマンス テストは、仮定エラーでフィルター処理されます。keepMeasuring メソッドを使用すると、コードの反復回数を自動的に判断し、パフォーマンスの平均を測定するため、テスト フレームワークで非常に速いコードを測定できます。

keepMeasuring-while ループを、startMeasuringstopMeasuring の呼び出しの間に配置することはできません。同様に、startMeasuring メソッドと stopMeasuring メソッドを keepMeasuring-while ループ内で呼び出すことはできません。

keepMeasuring(testcase,label) は、label により測定値にラベルを付けます。同じテスト メソッドで生成され、同じラベルをもつ測定値は、累積加算されます。ラベルは山かっこで囲まれて、MeasurementResult オブジェクトの Samples プロパティと TestActivity プロパティのテスト要素名に付加されます。

入力引数

すべて展開する

テスト ケースのインスタンス。matlab.perftest.TestCase オブジェクトとして指定します。

測定境界ラベル。有効な MATLAB 識別子として指定します。有効な MATLAB 識別子は、英数字 (AZaz09) とアンダースコアで構成される文字ベクトルまたは string スカラーであり、最初の文字は英字で、文字ベクトルの長さは namelengthmax 以下です。

すべて展開する

パフォーマンス テスト クラス ZerosTest を作成します。このパラメーター化されたパフォーマンス テストにより、サイズが異なる 3 つの 0 の配列の作成が測定されます。

classdef ZerosTest < matlab.perftest.TestCase
    properties (TestParameter)
        size = {1e2,1e3,1e4};
    end

    methods(Test)
        function testOne(testCase,size)
            A = zeros(size);
        end
    end
end

パフォーマンス テストを実行します。最初の 2 つの配列を作成する時間がフレームワークの精度に近すぎるため、テストはフィルター処理されます。

results = runperf("ZerosTest");
Running ZerosTest
.........
================================================================================
ZerosTest/testOne(size=100) was filtered.
    Test Diagnostic: The MeasuredTime should not be too close to the precision of the framework.
Details
================================================================================
. ........
================================================================================
ZerosTest/testOne(size=1000) was filtered.
    Test Diagnostic: The MeasuredTime should not be too close to the precision of the framework.
Details
================================================================================
.. .......
================================================================================
ZerosTest/testOne(size=10000) was filtered.
    Test Diagnostic: The MeasuredTime should not be too close to the precision of the framework.
Details
================================================================================

Done ZerosTest
__________
Failure Summary:

     Name                           Failed  Incomplete  Reason(s)
    ============================================================================
     ZerosTest/testOne(size=100)                X       Filtered by assumption.
    ----------------------------------------------------------------------------
     ZerosTest/testOne(size=1000)               X       Filtered by assumption.
    ----------------------------------------------------------------------------
     ZerosTest/testOne(size=10000)              X       Filtered by assumption.

正確な測定値を得るには、keepMeasuring-while ループを使用するように ZerosTest クラスを変更します。パフォーマンス テスト フレームワークは、keepMeasuring-while ループ内のコードを測定します。

classdef ZerosTest < matlab.perftest.TestCase
    properties (TestParameter)
        size = {1e2,1e3,1e4};
    end
    
    methods(Test)
        function testOne(testCase,size)
            while testCase.keepMeasuring
                A = zeros(size);
            end
        end
    end
end

パフォーマンス テストを再実行します。

results = runperf("ZerosTest");
Running ZerosTest
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... .......... .......... .......... ..........
.......... ....
Done ZerosTest
__________

バージョン履歴

R2018b で導入