Запустите набор тестов для измерения производительности
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 элементы массива. Используйте подстановочный символ * совпадать с любым количеством символов. Используйте символа вопросительного знака, ? совпадать с отдельным символом.
'ParameterProperty' — Имя свойства параметризацииИмя свойства параметризации используется элементом тестового набора, указанным как вектор символов. Этот аргумент фильтрует TestSuite элементы массива. Используйте подстановочный символ * совпадать с любым количеством символов. Используйте символа вопросительного знака, ? соответствовать к отдельному символу.
'ProcedureName' — Имя процедуры тестирования в тестеИмя процедуры тестирования, заданной как вектор символов. Этот аргумент фильтрует TestSuite элементы массива. Используйте подстановочный символ, *, совпадать с любым количеством символов. Используйте символа вопросительного знака, ?чтобы соответствовать только одному символу.
В основанном на классах тесте, ProcedureName имя метода тестирования. В функциональном тест это - имя локальной функции, которая содержит тест. В тесте на основе скриптов это - имя, сгенерированное из заголовка экспериментального участка. В отличие от Name, имя процедуры тестирования не включает класса или имени пакета или информации о параметризации.
'Superclass' — Имя класса, из которого выводит тестовый классИмя класса, который тестовый класс выводит из, заданный как скаляр строки или вектор символов. Этот аргумент фильтрует TestSuite элементы массива.
'Tag' — Имя тестового тега элементовИмя тестового тега элементов, заданного как вектор символов или скаляр строки. Этот аргумент фильтрует TestSuite элементы массива. Используйте подстановочный символ * совпадать с любым количеством символов. Используйте символа вопросительного знака, ? совпадать с отдельным символом.
Чтобы настроить статистические цели теста производительности, используйте TimeExperiment класс, чтобы создать и запустить тест производительности.
Чтобы создать тестовый набор явным образом, можно использовать testsuite функционируйте или matlab.unittest.TestSuite методы, чтобы создать комплект. Затем можно запустить тест производительности с run метод вашего заданного TimeExperiment.
comparisonPlot | matlab.perftest.FrequentistTimeExperiment | matlab.unittest.measurement.MeasurementResult | runtests
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.