Запустите набор тестов для измерения производительности
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
tests
— Комплект тестовКомплект тестов, заданных как вектор символа или массив ячеек из символьных векторов. Каждый вектор символа в массиве ячеек может содержать имя тестового файла, тестового класса, имени элемента тестового набора, пакет, содержащий ваши тестовые классы или папку, содержащую ваши тестовые файлы.
Пример: 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 _'
.'BaseFolder'
Имя основной папкиИмя основной папки, которая содержит файл, задающий тестовый класс, функцию или скрипт, заданный как вектор символа. This argument filters TestSuite array elements.
Для тестового элемента, который будет включен в комплект, тестовый элемент должен содержаться в заданной основной папке. Use the wildcard character * to match any number of characters.
Use the question mark character ?
, чтобы совпадать с отдельным символом. Для тестовых файлов, заданных в пакетах, основная папка является родительским элементом папки пакета верхнего уровня.
'IncludeSubfolders'
Индикатор, чтобы запустить тесты в подпапкахfalse
(значение по умолчанию) | true
| 0
| 1
Индикатор, чтобы запустить тесты в подпапках, заданных как false
или true
(0
или 1
). По умолчанию среда запускает тесты в заданных папках, но не в их подпапках.
Типы данных: логический
'IncludeSubpackages'
Индикатор, чтобы запустить тесты в подпакетах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, ?
, чтобы совпадать с отдельным символом.
'ParameterName'
Имя параметраИмя параметра используется элементом тестового набора, заданным как вектор символа. This argument filters TestSuite array elements.
Use the wildcard character * to match any number of characters.
Use the question mark character ?
, чтобы совпадать с отдельным символом.
'ParameterProperty'
Имя свойства параметризацииИмя свойства параметризации используется элементом тестового набора, заданным как вектор символа. This argument filters TestSuite array elements.
Use the wildcard character * to match any number of characters.
Use the question mark character ?
, чтобы соответствовать к отдельному символу.
'ProcedureName'
Имя процедуры тестирования в тестеИмя процедуры тестирования, заданной как вектор символа. 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
, имя процедуры тестирования не включает класса или имени пакета или информации о параметризации.
'Superclass'
— Имя класса, от которого выводит тестовый классИмя класса, который тестовый класс выводит от, заданный как скаляр строки или вектор символа. Этот аргумент фильтрует элементы массива 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
.
matlab.perftest. FrequentistTimeExperiment
| matlab.unittest.measurement. MeasurementResult
| runtests
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.