Запустите набор тестов для измерения производительности
results = runperf
results = runperf(tests)
results = runperf(tests,Name,Value)
results = runperf
запускает все тесты в вашей текущей папке для измерений производительности и возвращает массив объектов matlab.perftest.TimeResult
. Каждый элемент в results
соответствует элементу в тестовом наборе.
Среда теста производительности запускает тесты с помощью переменного количества измерений, чтобы достигнуть демонстрационного среднего значения с 0,05 относительными пределами погрешности на 0,95 доверительных уровнях. Это запускает тесты четыре раза, чтобы нагреть код, и затем между 4 и 256 разами, чтобы собрать измерения, которые достигают статистических целей. Если демонстрационное среднее значение не соответствует 0,05 относительным пределам погрешности на 0,95 доверительных уровнях после того, как 256 тестовых прогонов, среда теста производительности прекратит запускать тест и выведет предупреждение. В этом случае объект matlab.perftest.TimeResult
содержит информацию для 4 выполнений прогрева и 256 выполнений измерения.
Функция runperf
обеспечивает простой способ запустить набор тестов как эксперимент производительности.
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 .......... .......... .......... .......... .......... ....... Done onesTest __________
Отобразите результаты. Переменная results
является массивом 1x3 TimeResult
. Каждый элемент в массиве соответствует одному из тестов, заданных в секции кода в onesTest.m
.
results
results = 1×3 TimeResult array with properties: Name Valid Samples TestActivity Totals: 3 Valid, 0 Invalid.
Отобразите результаты измерения для второго теста, который циклично выполняет присвоение без предварительного выделения.
results(2)
ans = TimeResult with properties: Name: 'onesTest/LoopAssignmentWithoutPreallocation' Valid: 1 Samples: [4×7 table] TestActivity: [8×12 table] Totals: 1 Valid, 0 Invalid.
Отобразите заполненную таблицу тестовых измерений.
results(2).TestActivity
ans = 8×12 table Name Passed Failed Incomplete MeasuredTime Objective Timestamp Host Platform Version TestResult RunIdentifier ___________________________________________ ______ ______ __________ ____________ _________ ____________________ ___________ ________ _____________________ ________________________________ ____________________________________ onesTest/LoopAssignmentWithoutPreallocation true false false 0.32388 warmup 05-Oct-2018 10:38:19 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.31146 warmup 05-Oct-2018 10:38:19 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.30751 warmup 05-Oct-2018 10:38:20 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.31201 warmup 05-Oct-2018 10:38:20 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.31579 sample 05-Oct-2018 10:38:20 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.30977 sample 05-Oct-2018 10:38:21 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.30909 sample 05-Oct-2018 10:38:21 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d onesTest/LoopAssignmentWithoutPreallocation true false false 0.30911 sample 05-Oct-2018 10:38:21 MY-HOSTNAME win64 9.6.0.966561 (R2019a) [1x1 matlab.unittest.TestResult] b05f851b-8150-4b27-afc6-6cc917a90b9d
Среда тестирования производительности запустила четыре выполнения прогрева, сопровождаемые четырьмя выполнениями измерений (обозначенный как sample
в столбце Objective
).
Отобразитесь среднее значение измерило время для второго теста. Чтобы исключить данные, собранные в выполнениях прогрева, используйте значения в поле Samples
.
mean(results(2).Samples.MeasuredTime)
ans = 0.3109
Чтобы сравнить различные методы инициализации в скрипте, отобразитесь, среднее значение измерило время для всех тестов. Конкатенация значений от поля Samples
через эти три элемента в массиве results
. Затем используйте varfun
, чтобы сгруппировать записи таблицы по наименованию и вычислить среднее значение.
fullTable = vertcat(results.Samples); varfun(@mean,fullTable,'InputVariables','MeasuredTime','GroupingVariables','Name')
ans = 3×3 table Name GroupCount mean_MeasuredTime ___________________________________________ __________ _________________ onesTest/OnesFunction 4 0.0084816 onesTest/LoopAssignmentWithoutPreallocation 4 0.31094 onesTest/LoopAssignmentWithPreallocation 37 0.025127
В примере вывод функция ones
была самым быстрым способом инициализировать матрицу к единицам. Среда тестирования производительности сделала 45 выполнений измерения для этого теста. Ваши результаты могут отличаться.
В вашей текущей рабочей папке создайте основанный на классах тест, 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
tests
— Комплект тестовКомплект тестов, заданных как вектор символов или массив ячеек из символьных векторов. Каждый вектор символов в массиве ячеек может содержать имя тестового файла, тестового класса, имени элемента тестового набора, пакет, содержащий ваши тестовые классы, папка, содержащая ваши тестовые файлы или папку проекта, содержащую тестовые файлы.
Пример: runperf('ATestFile.m')
Пример: runperf('ATestFile/aTest')
Пример: runperf('mypackage.MyTestClass')
Пример: runperf(pwd)
Пример: runperf({'mypackage.MyTestClass','ATestFile.m',pwd,'mypackage.subpackage'})
Укажите необязательные аргументы в виде пар ""имя, значение"", разделенных запятыми.
Имя (Name) — это имя аргумента, а значение (Value) — соответствующее значение.
Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN.
runperf(tests,'Name','productA_*')
запускает тестовые элементы с именем, которое запускается с 'productA_'
.'BaseFolder'
Имя основной папкиИмя основной папки, которая содержит файл, задающий тестовый класс, функцию или скрипт, заданный как вектор символов. Этот аргумент фильтрует элементы массива TestSuite.
Для тестового элемента, который будет включен в комплект, тестовый элемент должен содержаться в заданной основной папке. Используйте символ подстановки *, чтобы соответствовать любому количеству символов.
Используйте символ вопросительного знака ?
, чтобы совпадать с отдельным символом. Для тестовых файлов, заданных в пакетах, основная папка является родительским элементом папки пакета верхнего уровня.
'IncludeSubfolders'
Индикатор, чтобы запустить тесты в подпапкахfalse
(значение по умолчанию) | true
| 0
| 1
Индикатор, чтобы запустить тесты в подпапках, заданных как false
или true
(0
или 1
). По умолчанию среда запускает тесты в заданных папках, но не в их подпапках.
Типы данных: логический
'IncludeSubpackages'
Индикатор, чтобы запустить тесты в подпакетахfalse
(значение по умолчанию) | true
| 0
| 1
Индикатор, чтобы запустить тесты в подпакетах, заданных как false
или true
(0
или 1
). По умолчанию среда запускает тесты в заданных пакетах, но не в их подпакетах.
Типы данных: логический
Имя
Имя элемента комплектаИмя элемента комплекта, указанного как вектор символов. Этот аргумент фильтрует элементы массива TestSuite.
Для среды тестирования, чтобы запустить тест, свойство Name
тестового элемента должно совпадать с указанным именем. Используйте символ подстановки *, чтобы соответствовать любому количеству символов.
Используйте символ вопросительного знака, ?
, чтобы совпадать с отдельным символом.
'ParameterName'
Имя параметраИмя параметра используется элементом тестового набора, указанным как вектор символов. Этот аргумент фильтрует элементы массива TestSuite.
Используйте символ подстановки *, чтобы соответствовать любому количеству символов.
Используйте символ вопросительного знака ?
, чтобы совпадать с отдельным символом.
'ParameterProperty'
Имя свойства параметризацииИмя свойства параметризации используется элементом тестового набора, указанным как вектор символов. Этот аргумент фильтрует элементы массива TestSuite.
Используйте символ подстановки *, чтобы соответствовать любому количеству символов.
Используйте символ вопросительного знака ?
, чтобы соответствовать к отдельному символу.
'ProcedureName'
Имя процедуры тестирования в тестеИмя процедуры тестирования, заданной как вектор символов. Этот аргумент фильтрует элементы массива TestSuite.
Используйте символ подстановки *, чтобы соответствовать любому количеству символов.
Используйте символ вопросительного знака, ?
, чтобы соответствовать точно к одному символу.
В основанном на классах тесте ProcedureName
является именем метода тестирования. В функциональном тест это - имя локальной функции, которая содержит тест. В тесте на основе скриптов это - имя, сгенерированное из заголовка экспериментального участка. В отличие от Name
, имя процедуры тестирования не включает класса или имени пакета или информации о параметризации.
'Superclass'
— Имя класса, от которого выводит тестовый классИмя класса, который тестовый класс выводит от, заданный как скаляр строки или вектор символов. Этот аргумент фильтрует элементы массива TestSuite.
Тег
Имя тестового тега элементовИмя тестового тега элементов, заданного как вектор символов или скаляр строки. Этот аргумент фильтрует элементы массива TestSuite.
Используйте символ подстановки *, чтобы соответствовать любому количеству символов.
Используйте символ вопросительного знака ?
, чтобы совпадать с отдельным символом.
Чтобы настроить статистические цели теста производительности, используйте класс TimeExperiment
, чтобы создать и запустить тест производительности.
Чтобы создать тестовый набор явным образом, можно использовать функцию testsuite
или методы matlab.unittest.TestSuite
, чтобы создать комплект. Затем можно запустить тест производительности с методом run
заданного TimeExperiment
.
matlab.perftest.FrequentistTimeExperiment
| matlab.unittest.measurement.MeasurementResult
| runtests
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.