Запустите набор тестов для измерения производительности
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
, это использует три различных метода, чтобы инициализировать 1000
- 1500
матрица из единиц.
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
переменной является 1
- 3
TimeResult
массив. Каждый элемент в массиве соответствует одному из тестов, заданных в секции кода в onesTest.m
.
results
results = 1×3 TimeResult array with properties: Name Valid Samples TestActivity Totals: 3 Valid, 0 Invalid. 4.4113 seconds testing time.
Отобразите результаты измерения для второго теста, который циклично выполняет присвоение без предварительного выделения.
results(2)
ans = TimeResult with properties: Name: 'onesTest/LoopAssignmentWithoutPreallocation' Valid: 1 Samples: [4×7 table] TestActivity: [8×12 table] Totals: 1 Valid, 0 Invalid. 3.1462 seconds testing time.
Отобразите заполненную таблицу тестовых измерений.
results(2).TestActivity
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.39586 warmup 24-Jun-2019 16:50:25 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.38351 warmup 24-Jun-2019 16:50:25 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.37995 warmup 24-Jun-2019 16:50:25 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.38603 warmup 24-Jun-2019 16:50:26 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.38388 sample 24-Jun-2019 16:50:26 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.39803 sample 24-Jun-2019 16:50:27 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.39742 sample 24-Jun-2019 16:50:27 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d onesTest/LoopAssignmentWithoutPreallocation true false false 0.37702 sample 24-Jun-2019 16:50:28 MY-HOSTNAME win64 9.7.0.1141441 (R2019b) Prerelease Update 2 [1×1 matlab.unittest.TestResult] ab95d893-a080-4e98-9297-df697882b09d
Среда тестирования производительности запустила четыре запуска прогрева, сопровождаемые четырьмя запусками измерений (обозначенный как sample
в Objective
столбец).
Отобразитесь среднее значение измерило время для второго теста. Чтобы исключить данные, собранные в запусках прогрева, используйте значения в Samples
поле .
mean(results(2).Samples.MeasuredTime)
ans = 0.3891
Чтобы сравнить различные методы инициализации в скрипте, отобразитесь, среднее значение измерило время для всех тестов. Конкатенация значений от Samples
поле через эти три элемента в results
массив. Затем используйте varfun
сгруппировать записи таблицы по наименованию и вычислить среднее значение.
fullTable = vertcat(results.Samples); varfun(@mean,fullTable,'InputVariables','MeasuredTime','GroupingVariables','Name')
ans = 3×3 table Name GroupCount mean_MeasuredTime ___________________________________________ __________ _________________ onesTest/OnesFunction 65 0.0063079 onesTest/LoopAssignmentWithoutPreallocation 4 0.38909 onesTest/LoopAssignmentWithPreallocation 13 0.018792
В примере выход, ones
функция была самым быстрым способом инициализировать матрицу к единицам. Среда тестирования производительности сделала 65
измерение запускается для этого теста. Ваши результаты могут варьироваться.
В вашей текущей рабочей папке создайте основанный на классах тест, 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 = 1×2 TimeResult array with properties: Name Valid Samples TestActivity Totals: 2 Valid, 0 Invalid. 2.4858 seconds testing time.
Отобразитесь среднее значение измерило время для каждого из тестов. Конкатенация значений от Samples
поле через эти два элемента в results
массив. Затем используйте varfun
сгруппировать записи таблицы по наименованию и вычислить среднее значение.
fullTable = vertcat(results.Samples); varfun(@mean,fullTable,'InputVariables','MeasuredTime','GroupingVariables','Name')
ans = 2×3 table Name GroupCount mean_MeasuredTime __________________________________________ __________ _________________ preallocationTest/testIndexingWithVariable 6 0.16337 preallocationTest/testIndexingOnLHS 13 0.049936
tests
— Комплект тестовКомплект тестов, заданных как массив строк, вектор символов или массив ячеек из символьных векторов. Каждый вектор символов в массиве ячеек может содержать имя тестового файла, тестового класса, имени элемента тестового набора, пакет, содержащий ваши тестовые классы, папка, содержащая ваши тестовые файлы или папку проекта, содержащую тестовые файлы.
Пример: runperf('ATestFile.m')
Пример: runperf('ATestFile/aTest')
Пример: runperf('mypackage.MyTestClass')
Пример: runperf(pwd)
Пример: runperf({'mypackage.MyTestClass','ATestFile.m',pwd,'mypackage.subpackage'})
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. 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
). По умолчанию среда запускает тесты в заданных пакетах, но не в их подпакетах.
Типы данных: логический
'Name'
— Имя элемента комплектаИмя элемента комплекта в виде массива строк, вектора символов или массива ячеек из символьных векторов. Этот аргумент фильтрует TestSuite
элементы массива. Для среды тестирования, чтобы включать тест в комплект, Name
свойство тестового элемента должно совпадать с одним из указанных имен. Если ни один из тестовых элементов не будет иметь соответствующее имя, пустой тестовый набор будет возвращен. Используйте подстановочный символ *
совпадать с любым количеством символов. Используйте символа вопросительного знака, ?
совпадать с отдельным символом.
'ParameterName'
— Имя параметраИмя параметра, используемого элементом тестового набора в виде массива строк, вектора символов или массива ячеек из символьных векторов. Этот аргумент фильтрует TestSuite
элементы массива. Для среды тестирования, чтобы включать тест в комплект, Parameterization
свойство тестового элемента должно содержать по крайней мере одно из заданных названий параметра. Если ни один из тестовых элементов не будет иметь соответствующее название параметра, пустой тестовый набор будет возвращен. Используйте подстановочный символ *
совпадать с любым количеством символов. Используйте символа вопросительного знака, ?
совпадать с отдельным символом.
'ParameterProperty'
— Имя свойства параметризацииИмя свойства, которое задает параметр, используемый элементом тестового набора в виде массива строк, вектора символов или массива ячеек из символьных векторов. Этот аргумент фильтрует TestSuite
элементы массива. Для среды тестирования, чтобы включать тест в комплект, Parameterization
свойство тестового элемента должно содержать по крайней мере одно из заданных имен свойства. Если ни один из тестовых элементов не будет иметь соответствующее имя свойства, пустой тестовый набор будет возвращен. Используйте подстановочный символ *
совпадать с любым количеством символов. Используйте символа вопросительного знака, ?
совпадать с отдельным символом.
'ProcedureName'
— Имя процедуры тестированияИмя процедуры тестирования в виде массива строк, вектора символов или массива ячеек из символьных векторов. Этот аргумент фильтрует TestSuite
элементы массива. Для среды тестирования, чтобы включать тест в комплект, ProcedureName
свойство тестового элемента должно совпадать с одними из заданных имен процедур. Если ни один из тестовых элементов не будет иметь соответствующее имя процедуры, пустой тестовый набор будет возвращен. Используйте подстановочный символ *
совпадать с любым количеством символов. Используйте символа вопросительного знака, ?
совпадать с отдельным символом.
В основанном на классах тесте, ProcedureName
имя метода тестирования. В функциональном тесте это - имя локальной функции, которая содержит тест. В тесте на основе скриптов это - имя, сгенерированное из заголовка экспериментального участка. В отличие от Name
, имя процедуры тестирования не включает класса или имени пакета или информации о параметризации.
'Superclass'
— Имя класса, которые тестируют класс, выводит изИмя класса, из которого выводит тестовый класс в виде массива строк, вектора символов или массива ячеек из символьных векторов. Этот аргумент фильтрует TestSuite
элементы массива. Для среды тестирования, чтобы включать тест в комплект, TestClass
свойство тестового элемента должно указать на тестовый класс, который выводит из одного из заданных классов. Если ни один из тестовых элементов не будет совпадать с классом, пустой тестовый набор будет возвращен.
'Tag'
— Имя тестового тега элементовИмя тестового тега, используемого элементом тестового набора в виде массива строк, вектора символов или массива ячеек из символьных векторов. Этот аргумент фильтрует TestSuite
элементы массива. Для среды тестирования, чтобы включать тест в комплект, Tags
свойство тестового элемента должно содержать по крайней мере одно из заданных имен тега. Если ни один из тестовых элементов не будет иметь соответствующее имя тега, пустой тестовый набор будет возвращен. Используйте подстановочный символ *
совпадать с любым количеством символов. Используйте символа вопросительного знака, ?
совпадать с отдельным символом.
Чтобы настроить статистические цели теста производительности, используйте TimeExperiment
класс, чтобы создать и запустить тест производительности.
Чтобы создать тестовый набор явным образом, можно использовать testsuite
функционируйте или matlab.unittest.TestSuite
методы, чтобы создать комплект. Затем можно запустить тест производительности с run
метод вашего заданного TimeExperiment
.
comparisonPlot
| matlab.perftest.FrequentistTimeExperiment
| matlab.unittest.measurement.MeasurementResult
| runtests
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.