runperf

Запустите набор тестов для измерения производительности

Синтаксис

results = runperf
results = runperf(tests)
results = runperf(tests,Name,Value)

Описание

results = runperf запускает все тесты в вашей текущей папке для измерений производительности и возвращает массив объектов MeasurementResult. Каждый элемент в results соответствует элементу в тестовом наборе.

Среда теста производительности запускает тесты с помощью переменного количества измерений, чтобы достигнуть демонстрационного среднего значения с 0,05 относительными пределами погрешности на 0,95 доверительных уровнях. Это запускает тесты четыре раза, чтобы нагреть код, и затем между 4 и 32 разами, чтобы собрать измерения, которые достигают статистических целей. Если демонстрационное среднее значение не соответствует 0,05 относительным пределам погрешности на 0,95 доверительных уровнях после того, как 32 тестовых прогона, среда теста производительности прекратит запускать тест и отобразит предупреждение. В этом случае объект MeasurementResult содержит информацию для 4 выполнений прогрева и 32 выполнений измерения.

Функция runperf обеспечивает простой способ запустить набор тестов как эксперимент производительности.

пример

results = runperf(tests) запускает заданный набор тестов.

пример

results = runperf(tests,Name,Value) запускает набор тестов с дополнительными опциями, заданными одним или несколькими аргументами пары Name,Value.

Примеры

свернуть все

В вашей текущей рабочей папке создайте тест на основе скриптов, onesTest.m, который использует три различных метода, чтобы инициализировать матрицу 1000x1500 из единиц.

rows = 1000;
cols = 1500;

%% Ones Function
X = ones(rows,cols);

%% Loop Assignment Without Preallocation
for r = 1:rows
    for c = 1:cols
        X(r,c) = 1;
    end
end

%% Loop Assignment With Preallocation
X = zeros(rows,cols);
for r = 1:rows
    for c = 1:cols
        X(r,c) = 1;
    end
end

Запустите скрипт как тест производительности. Ваши результаты могут отличаться.

results = runperf('onesTest');
Running onesTest
..........
..........
..........
......Warning: The target Relative Margin of Error was not met after running the MaxSamples for onesTest/OnesFunction.
....
..........
..........
..........
....
Done onesTest
__________

В примере вывод среда тестирования производительности запустила тест OnesFunction максимальное количество времен, но не достигла 0,05 относительных пределов погрешности с 0,95 доверительными уровнями.

Отобразите результаты. Переменная results является массивом 1x3 MeasurementResult. Каждый элемент в массиве соответствует одному из тестов, заданных в секции кода в onesTest.m m.

results
results = 

  1x3 MeasurementResult array with properties:

    Name
    Valid
    Samples
    TestActivity

Totals:
   3 Valid, 0 Invalid.

Отобразите результаты измерения для второго теста, который циклично выполняет присвоение без предварительного выделения.

results(2)
ans = 

  MeasurementResult with properties:

            Name: 'onesTest/LoopAssignmentWithoutPreallocation'
           Valid: 1
         Samples: [4x7 table]
    TestActivity: [8x12 table]

Totals:
   1 Valid, 0 Invalid.

Отобразите заполненную таблицу тестовых измерений.

results(2).TestActivity
ans = 

                       Name                        Passed    Failed    Incomplete    MeasuredTime    Objective         Timestamp             Host        Platform           Version                      TestResult                          RunIdentifier            
    ___________________________________________    ______    ______    __________    ____________    _________    ____________________    ___________    ________    _____________________    ________________________________    ____________________________________

    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.42843         warmup       29-Dec-2015 15:26:46    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.38467         warmup       29-Dec-2015 15:26:46    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.34094         warmup       29-Dec-2015 15:26:46    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.34076         warmup       29-Dec-2015 15:26:47    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.36286         sample       29-Dec-2015 15:26:47    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.39701         sample       29-Dec-2015 15:26:48    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.38368         sample       29-Dec-2015 15:26:48    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4
    onesTest/LoopAssignmentWithoutPreallocation    true      false     false         0.39277         sample       29-Dec-2015 15:26:48    MY-HOSTNAME    win64       9.0.0.320924 (R2016a)    [1x1 matlab.unittest.TestResult]    03232d6b-d0b7-4ab5-b4b1-5aa5061336b4

Среда тестирования производительности запустила четыре выполнения прогрева, сопровождаемые четырьмя выполнениями измерений (обозначенный как sample в столбце Objective).

Отобразитесь среднее значение измерило время для второго теста. Чтобы исключить данные, собранные в выполнениях прогрева, используйте значения в поле Samples.

mean(results(2).Samples.MeasuredTime)
ans =

    0.3841

Чтобы сравнить различные методы инициализации в скрипте, отобразитесь, среднее значение измерило время для всех тестов. Конкатенация значений от поля Samples через эти три элемента в массиве results. Затем используйте varfun, чтобы сгруппировать записи таблицы по наименованию и вычислить среднее значение.

fullTable = vertcat(results.Samples);
varfun(@mean,fullTable,'InputVariables','MeasuredTime','GroupingVariables','Name')
ans = 

                       Name                        GroupCount    mean_MeasuredTime
    ___________________________________________    __________    _________________

    onesTest/OnesFunction                          32            0.0031614        
    onesTest/LoopAssignmentWithoutPreallocation     4              0.38408        
    onesTest/LoopAssignmentWithPreallocation       26             0.016025        

В примере вывод функция ones была самым быстрым способом инициализировать матрицу к единицам. Среда тестирования производительности сделала 32 выполнения измерения для этого теста. Ваши результаты могут отличаться.

В вашей текущей рабочей папке создайте основанный на классах тест, preallocationTest.m, который сравнивает различные методы предварительного выделения.

classdef preallocationTest < matlab.perftest.TestCase
    methods(Test)
        function testOnes(testCase)
            x = ones(1,1e7);
        end
        
        function testIndexingWithVariable(testCase)
            id = 1:1e7;
            x(id) = 1;
        end
        
        function testIndexingOnLHS(testCase)
            x(1:1e7) = 1;
        end
        
        function testForLoop(testCase)
            for i=1:1e7
                x(i) = 1;
            end
        end
        
    end
end

Контур измерения для класса preallocationTest является методом тестирования. Измерение времени для каждого метода тестирования включает весь код в метод. Для получения информации об обозначении контуров измерения смотрите startMeasuring и методы stopMeasuring matlab.perftest.TestCase.

Запустите тесты производительности для всех элементов, которые содержат 'Indexing' на имя. Ваши результаты могут отличаться, и вы можете видеть предупреждение, если runperf не достигает статистических целей.

results = runperf('preallocationTest','Name','*Indexing*')
Running preallocationTest
..........
..........
..........
..........
..
Done preallocationTest
__________


results = 

  1x2 MeasurementResult array with properties:

    Name
    Valid
    Samples
    TestActivity

Totals:
   2 Valid, 0 Invalid.

Отобразитесь среднее значение измерило время для каждого из тестов. Конкатенация значений от поля Samples через эти два элемента в массиве results. Затем используйте varfun, чтобы сгруппировать записи таблицы по наименованию и вычислить среднее значение.

fullTable = vertcat(results.Samples);
varfun(@mean,fullTable,'InputVariables','MeasuredTime','GroupingVariables','Name')
ans = 

                       Name                       GroupCount    mean_MeasuredTime
    __________________________________________    __________    _________________

    preallocationTest/testIndexingWithVariable     4             0.16637         
    preallocationTest/testIndexingOnLHS           30            0.076792         

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

свернуть все

Комплект тестов, заданных как вектор символа или массив ячеек из символьных векторов. Каждый вектор символа в массиве ячеек может содержать имя тестового файла, тестового класса, имени элемента тестового набора, пакет, содержащий ваши тестовые классы или папку, содержащую ваши тестовые файлы.

Пример: runperf ('ATestFile. m

Пример: runperf ('ATestFile/aTest')

Пример: runperf ('mypackage. MyTestClass)

Пример: runperf (pwd)

Пример: runperf ({'mypackage. MyTestClass','ATestFile.m', pwd, 'mypackage.subpackage'})

Аргументы в виде пар имя-значение

Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми. Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение. Имя должно появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.

Пример: runperf (тесты, 'Имя', 'productA_ *') запускает тестовые элементы с именем, которое запускается с 'productA _'.

Имя основной папки, которая содержит файл, задающий тестовый класс, функцию или скрипт, заданный как вектор символа. This argument filters TestSuite array elements. Для тестового элемента, который будет включен в комплект, тестовый элемент должен содержаться в заданной основной папке. Use the wildcard character * to match any number of characters. Use the question mark character ?, чтобы совпадать с отдельным символом. Для тестовых файлов, заданных в пакетах, основная папка является родительским элементом папки пакета верхнего уровня.

Индикатор, чтобы запустить тесты в подпапках, заданных как false или true (0 или 1). По умолчанию среда запускает тесты в заданных папках, но не в их подпапках.

Типы данных: логический

Индикатор, чтобы запустить тесты в подпакетах, заданных как false или true (0 или 1). По умолчанию среда запускает тесты в заданных пакетах, но не в их подпакетах.

Типы данных: логический

Имя элемента комплекта, заданного как вектор символа. This argument filters TestSuite array elements. Для среды тестирования, чтобы запустить тест, свойство Name тестового элемента должно совпадать с указанным именем. Use the wildcard character, *, to match any number of characters. Use the question mark character, ?, чтобы совпадать с отдельным символом.

Имя параметра используется элементом тестового набора, заданным как вектор символа. This argument filters TestSuite array elements. Use the wildcard character * to match any number of characters. Use the question mark character ?, чтобы совпадать с отдельным символом.

Имя свойства параметризации используется элементом тестового набора, заданным как вектор символа. This argument filters TestSuite array elements. Use the wildcard character * to match any number of characters. Use the question mark character ?, чтобы соответствовать к отдельному символу.

Имя процедуры тестирования, заданной как вектор символа. This argument filters TestSuite array elements. Use the wildcard character, *, to match any number of characters. Use the question mark character, ?, to match to exactly one character.

В основанном на классах тесте ProcedureName является именем метода тестирования. В функциональном тест это - имя локальной функции, которая содержит тест. В тесте на основе скриптов это - имя, сгенерированное из заголовка экспериментального участка. В отличие от Name, имя процедуры тестирования не включает класса или имени пакета или информации о параметризации.

Имя класса, который тестовый класс выводит от, заданный как скаляр строки или вектор символа. Этот аргумент фильтрует элементы массива TestSuite.

Имя тестового тега элементов, заданного как вектор символа или скаляр строки. This argument filters TestSuite array elements. Use the wildcard character * to match any number of characters. Use the question mark character ?, чтобы совпадать с отдельным символом.

Советы

  • Чтобы настроить статистические цели теста производительности, используйте класс TimeExperiment, чтобы создать и запустить тест производительности.

Альтернативы

Чтобы создать тестовый набор явным образом, можно использовать функцию testsuite или методы matlab.unittest.TestSuite, чтобы создать комплект. Затем можно запустить тест производительности с методом run заданного TimeExperiment.

Введенный в R2016a

Была ли эта тема полезной?