startMeasuring

Класс: matlab.perftest.
Пакет: matlab.perftest

Определяйте запускаются контура измерения

Синтаксис

startMeasuring(testcase)
startMeasuring(testcase,label)

Описание

пример

startMeasuring(testcase) определяет запуск контура измерения. Вызовите этот метод и метод stopMeasuring, чтобы ограничить измерения кодом между вызовами метода stopMeasuring и startMeasuring. Определение этого контура позволяет вам исключать настройку, верификацию и код отключения от измерения.

Среда производительности разрешает нескольким, невложенным вызовам startMeasuring и методов stopMeasuring в рамках каждого метода, который помечен с атрибутом Test. Когда создание ограничило тесты производительности, помните о следующем:

  • Метод тестирования, который вызывает метод startMeasuring, должен вызвать метод stopMeasuring в пределах того же метода тестирования.

  • Вызов метода startMeasuring должен иметь последующий вызов метода stopMeasuring в пределах того же метода тестирования. Точно так же вызов метода stopMeasuring должен иметь предыдущий вызов startMeasuring.

  • Вы не можете вызвать startMeasuring и методы stopMeasuring в цикле while, который имеет метод keepMeasuring в условии. Точно так же у вас не может быть цикла while, который имеет условие keepMeasuring между вызовами startMeasuring и stopMeasuring.

  • Если метод тестирования имеет множественные вызовы startMeasuring и stopMeasuring, то среда производительности накапливает и суммирует измерения.

Если среда сталкивается с неподдерживаемым использованием startMeasuring и stopMeasuring в методе тестирования, это отмечает соответствующий недопустимый экземпляр MeasurementResult.

пример

startMeasuring(testcase,label) определяет запуск контура измерения и маркирует измерение label. Определение контура измерения с меткой подобно определению того без метки. Вызов startMeasuring с меткой должен иметь последующий вызов stopMeasuring с той же меткой в пределах того же метода тестирования. Если метод тестирования имеет несколько контуров с той же меткой, то среда производительности накапливает измерения меткой и вычисляет сумму. Среда производительности не поддерживает вложенные контуры измерения.

Метка добавлена в угловых скобках к тестовому имени элемента в свойствах Samples и TestActivity MeasurementResult.

Входные параметры

развернуть все

Экземпляр теста, заданного как объект matlab.perftest.TestCase.

Метка контура измерения, заданная как допустимый идентификатор MATLAB. Допустимый идентификатор MATLAB является вектором символов или скаляром строки буквенно-цифрового индикатора (AZ, az, 09) и символы нижнего подчеркивания, такие, что первый символ является буквой, и длина вектора символов меньше чем или равна namelengthmax.

Примеры

развернуть все

Создайте класс теста производительности, fprintfTest. Среда тестирования производительности измеряет код между вызовами методов stopMeasuring и startMeasuring. Этот контур ограничивает среду тестирования производительности измерением только вызова функции 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.021089    0.00075099           0.020583    0.020784    0.022207

Создайте класс теста производительности, examplePerfTest. Первый тест маркировал тестовые контуры для генерации массива случайных чисел, измерение вызова svd с одним выводом и измерением вызова svd с несколькими выходными параметрами. Второй тест имеет немаркированный контур вокруг вызова 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