exponenta event banner

startMeasuring

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

Обозначить начало границы измерения

Описание

пример

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

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