メインコンテンツ

startMeasuring

R2026b

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

測定境界の開始を指定

説明

startMeasuring(testcase) は測定境界の開始を指定します。このメソッドと stopMeasuring メソッドを呼び出して、測定を startMeasuring メソッドの呼び出しと stopMeasuring メソッドの呼び出しの間にあるコードのみに制限します。この境界を定義することにより、セットアップ、検証および破棄の各コードを測定から除外できます。

パフォーマンス フレームワークは Test 属性のタグが付けられた各メソッド内で startMeasuring メソッドと stopMeasuring メソッドの複数の非入れ子呼び出しを許可します。境界付きのパフォーマンス テストを作成するときには、以下の点に留意してください。

  • startMeasuring メソッドを呼び出すテスト メソッドは、同一テスト メソッドのスコープ内で stopMeasuring メソッドを呼び出さなければならない。

  • 同一テスト メソッドのスコープ内で、startMeasuring メソッドの呼び出しの後に stopMeasuring メソッドの呼び出しがなければならない。同様に、stopMeasuring メソッドの呼び出しの前に startMeasuring の呼び出しがなければならない。

  • startMeasuring メソッドと stopMeasuring メソッドを、条件に keepMeasuring メソッドを含む while ループ内で呼び出すことはできない。同様に、keepMeasuring 条件をもつ while ループを、startMeasuring の呼び出しと stopMeasuring の呼び出しの間に配置することはできない。

  • テスト メソッドに startMeasuring と stopMeasuring の呼び出しが複数ある場合、パフォーマンス フレームワークは測定値を累積して合計します。

フレームワークがテスト メソッド内でサポートされない startMeasuring および stopMeasuring の使用を検出した場合、対応する MeasurementResult インスタンスを無効としてマークします。

例

startMeasuring(testcase,label) は測定境界の開始を明示し、label によって測定にラベルを付けます。ラベルを使った測定境界の指定は、ラベルなしでの指定と似ています。ラベルを使った startMeasuring の呼び出しでは、同一テスト メソッドのスコープ内で、同じラベルを使った stopMeasuring の呼び出しが後に続かなければなりません。テスト メソッドに同じラベルをもつ境界が複数ある場合、パフォーマンス フレームワークはラベルごとに測定値を累積し、合計を計算します。パフォーマンス フレームワークは入れ子にされた測定範囲をサポートしていません。

ラベルは山かっこで囲まれて、MeasurementResult の Samples プロパティと TestActivity プロパティのテスト要素名に付加されます。

例

入力引数

すべて展開する

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

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

例

すべて展開する

パフォーマンス テスト クラス fprintfTest を作成します。パフォーマンス テスト フレームワークは startMeasuring メソッドの呼び出しと stopMeasuring メソッドの呼び出しの間にあるコードを測定します。この境界は、パフォーマンス テスト フレームワークが関数 fprintf の呼び出しのみを測定するように制限します。セットアップ動作、破棄動作および検定テストを除外します。

classdef fprintfTest < matlab.perftest.TestCase
    methods(Test)
        function testPrintingToFile(testCase)
            file = tempname;
            fid = fopen(file, 'w');
            testCase.assertNotEqual(fid, -1, 'IO Problem');
            
            stringToWrite = repmat('abcdef', 1, 1000000);
            
            testCase.startMeasuring();
            fprintf(fid, '%s', stringToWrite);
            testCase.stopMeasuring();
            
            testCase.verifyEqual(fileread(file), stringToWrite);
            fclose(fid);
        end
    end
end

パフォーマンス テスト クラス fprintfTest2 を作成します。複数の境界 (startMeasuring と stopMeasuring の呼び出し) を使用すると、ファイルを開き、ファイルに書き込み、ファイルを閉じるためのコードをパフォーマンス フレームワークで測定できるようになります。

classdef fprintfTest2 < matlab.perftest.TestCase
    methods(Test)
        function testPrintingToFile(testCase)
            file = tempname;
            
            testCase.startMeasuring();
            fid = fopen(file,'w');
            testCase.stopMeasuring();
            
            testCase.assertNotEqual(fid,-1,'IO Problem');
            stringToWrite = repmat('abcdef',1,1000000);
            
            testCase.startMeasuring();
            fprintf(fid,'%s',stringToWrite);
            testCase.stopMeasuring();
            
            testCase.verifyEqual(fileread(file),stringToWrite);
            
            testCase.startMeasuring();
            fclose(fid);
            testCase.stopMeasuring();
        end
    end
end

パフォーマンス テストを実行し、サンプルの要約を表示します。パフォーマンス フレームワークによる測定の結果、testPrintingToFile テストでファイルを開き、ファイルに書き込み、ファイルを閉じる処理の平均時間は約 0.02 秒でした。結果は異なる場合があります。

results = runperf('fprintfTest2');
T = sampleSummary(results)
Running fprintfTest2
........
Done fprintfTest2
__________


T =

  1×7 table

                 Name                  SampleSize      Mean      StandardDeviation      Min        Median       Max   
    _______________________________    __________    ________    _________________    ________    ________    ________

    fprintfTest2/testPrintingToFile        4         0.017003        0.0004943        0.016651    0.016814    0.017736

パフォーマンス テスト クラス examplePerfTest を作成します。最初のテストでは、乱数の配列の生成、単出力の svd 呼び出しの測定、および複数出力の svd 呼び出しの測定に対し、ラベル付きのテスト境界が設定されています。2 番目のテストでは、svd 呼び出しの前後にラベルなしの境界が設定されています。

classdef examplePerfTest < matlab.perftest.TestCase
    methods(Test)
        function testSVD1(testCase)
            testCase.startMeasuring('arrayGen')
            X = rand(1000);
            testCase.stopMeasuring('arrayGen')
            
            testCase.startMeasuring('SVD_1out')
            S = svd(X);
            testCase.stopMeasuring('SVD_1out')
            
            testCase.startMeasuring("SVD_3out")
            [U2,S2,V2] = svd(X);
            testCase.stopMeasuring("SVD_3out")
            
            testCase.verifyEqual(S,diag(S2),'RelTol',1e-14)
        end
        
        function testSVD2(testCase)
            sz = 732;
            X = rand(sz);
            
            testCase.startMeasuring()
            [U,S,V] = svd(X);
            testCase.stopMeasuring()
            
            testCase.verifyTrue(isdiag(S))
            testCase.verifyTrue(issorted(diag(S),'descend'))
            testCase.verifySize(S,[sz sz 1])
        end
    end
end

パフォーマンス テストを実行し、サンプルの要約を表示します。結果は異なる場合があります。testSVD1 のラベルは、結果のテスト要素名に山かっこ付きで付加されます。

results = runperf('examplePerfTest');
T = sampleSummary(results)
Running examplePerfTest
..........
..........
..........
..........
Done examplePerfTest
__________


T =

  4×7 table

                   Name                    SampleSize      Mean       StandardDeviation       Min        Median        Max   
    ___________________________________    __________    _________    _________________    _________    _________    ________

    examplePerfTest/testSVD1 <arrayGen>        21        0.0096508        0.0012428        0.0087596    0.0092564    0.013911
    examplePerfTest/testSVD1 <SVD_1out>        21          0.11978        0.0098172          0.10585      0.12274     0.13575
    examplePerfTest/testSVD1 <SVD_3out>        21          0.30664         0.020991          0.26882       0.3051     0.35018
    examplePerfTest/testSVD2                   11          0.13294         0.011135          0.11127      0.13557     0.15162

バージョン履歴

R2016a で導入