스크립트나 함수를 사용하여 성능 테스트하기
이 예제에서는 네 가지 다른 접근 방식을 사용하여 벡터의 사전할당에 걸리는 시간을 계측하는 스크립트 기반이나 함수 기반 성능 테스트를 생성하고 실행하는 방법을 보여줍니다.
성능 테스트 작성하기
현재 폴더에서 preallocationTest.m
이라는 파일에 성능 테스트를 생성합니다. 이 예제에서는 다음 스크립트 기반 테스트와 함수 기반 테스트 중에서 사용할 테스트를 선택할 수 있습니다. 이 예제에 나와 있는 출력값은 함수 기반 테스트에 대한 것입니다. 스크립트 기반 테스트를 사용할 경우 테스트 이름이 달라집니다.
스크립트 기반 성능 테스트 | 함수 기반 성능 테스트 |
---|---|
vectorSize = 1e7; %% Ones Function x = ones(1,vectorSize); %% Indexing With Variable id = 1:vectorSize; x(id) = 1; %% Indexing On LHS x(1:vectorSize) = 1; %% For Loop for i=1:vectorSize x(i) = 1; end | function tests = preallocationTest tests = functiontests(localfunctions); end function testOnes(testCase) vectorSize = getSize(); x = ones(1,vectorSize()); end function testIndexingWithVariable(testCase) vectorSize = getSize(); id = 1:vectorSize; x(id) = 1; end function testIndexingOnLHS(testCase) vectorSize = getSize(); x(1:vectorSize) = 1; end function testForLoop(testCase) vectorSize = getSize(); for i=1:vectorSize x(i) = 1; end end function vectorSize = getSize() vectorSize = 1e7; end |
성능 테스트 실행하기
runperf
함수를 사용하여 성능 테스트를 실행해 보십시오.
results = runperf("preallocationTest.m")
Running preallocationTest .......... .......... .......... .......... ....... Done preallocationTest __________ results = 1×4 TimeResult array with properties: Name Valid Samples TestActivity Totals: 4 Valid, 0 Invalid. 8.7168 seconds testing time.
results
변수는 1×4 TimeResult
배열입니다. 배열 내의 각각의 요소는 preallocationTest.m
에 정의되어 있는 각각의 테스트에 대응됩니다.
테스트 결과 표시하기
두 번째 테스트에 대한 측정 결과를 표시해 보십시오. 사용자마다 결과는 여기에 표시된 것과 다를 수 있습니다.
results(2)
ans = TimeResult with properties: Name: 'preallocationTest/testIndexingWithVariable' Valid: 1 Samples: [4×7 table] TestActivity: [9×12 table] Totals: 1 Valid, 0 Invalid. 0.87973 seconds testing time.
TestActivity
속성의 크기에서 볼 수 있듯이 9개의 측정값이 수집되었습니다. 이 측정값 개수에는 코드 워밍업 과정에서 얻어진 5개의 측정값이 포함됩니다. Samples
속성에서는 워밍업 측정값이 제외됩니다.
두 번째 테스트에 대한 샘플 측정값을 표시해 보십시오.
results(2).Samples
ans = 4×7 table Name MeasuredTime Timestamp Host Platform Version RunIdentifier __________________________________________ ____________ ____________________ ___________ ________ __________________________________ ____________________________________ preallocationTest/testIndexingWithVariable 0.096513 14-Oct-2022 14:04:00 MY-HOSTNAME win64 9.14.0.2081372 (R2023a) Prerelease 7ff84b09-8a58-4961-bfcb-75c86f4a3ae1 preallocationTest/testIndexingWithVariable 0.097008 14-Oct-2022 14:04:00 MY-HOSTNAME win64 9.14.0.2081372 (R2023a) Prerelease 7ff84b09-8a58-4961-bfcb-75c86f4a3ae1 preallocationTest/testIndexingWithVariable 0.096777 14-Oct-2022 14:04:00 MY-HOSTNAME win64 9.14.0.2081372 (R2023a) Prerelease 7ff84b09-8a58-4961-bfcb-75c86f4a3ae1 preallocationTest/testIndexingWithVariable 0.097157 14-Oct-2022 14:04:00 MY-HOSTNAME win64 9.14.0.2081372 (R2023a) Prerelease 7ff84b09-8a58-4961-bfcb-75c86f4a3ae1
단일 테스트 요소에 대한 통계량 계산하기
두 번째 테스트에 대한 평균 측정 시간을 표시해 보십시오. 워밍업 실행에서 수집된 데이터를 제외하려면 Samples
속성의 값을 사용하십시오.
sampleTimes = results(2).Samples.MeasuredTime; meanTest2 = mean(sampleTimes)
meanTest2 = 0.0969
전체 테스트 요소에 대한 통계량 계산하기
여러 사전할당 방법을 비교하려면 results
에서 요약 통계량 테이블을 만드십시오. 이 예제에서는 ones
함수가 벡터를 1로 초기화하는 가장 빠른 방법이었습니다. 성능 테스트 프레임워크는 이 테스트를 위해 4번의 측정 실행을 수행했습니다.
T = sampleSummary(results)
T = 4×7 table Name SampleSize Mean StandardDeviation Min Median Max __________________________________________ __________ ________ _________________ ________ ________ ________ preallocationTest/testOnes 4 0.016716 0.00018455 0.016515 0.016699 0.016952 preallocationTest/testIndexingWithVariable 4 0.096864 0.0002817 0.096513 0.096892 0.097157 preallocationTest/testIndexingOnLHS 15 0.024099 0.0025168 0.022721 0.0232 0.031685 preallocationTest/testForLoop 4 0.79044 0.016054 0.78203 0.78261 0.81452
통계적 목표를 변경한 후 테스트를 다시 실행하기
시간 실험을 생성하고 실행하여 runperf
함수로 정의된 통계적 목표를 변경해 보십시오. 98%
신뢰수준에 4%
의 상대 오차 범위를 갖는 표본평균을 충족하기 위해 2개의 워밍업 측정값을 수집하고 테스트를 가변적 횟수로 실행하는 시간 실험을 생성하십시오.
테스트 스위트를 만듭니다.
suite = testsuite("preallocationTest");
지정된 요구 사항에 따라 시간 실험을 생성하고 테스트 스위트를 실행하십시오.
import matlab.perftest.TimeExperiment experiment = TimeExperiment.limitingSamplingError("NumWarmups",2, ... "RelativeMarginOfError",0.04,"ConfidenceLevel",0.98); resultsTE = run(experiment,suite);
Running preallocationTest .......... .......... .......... .......... Done preallocationTest __________
전체 테스트 요소에 대한 요약 통계량을 계산하십시오.
T1 = sampleSummary(resultsTE)
T1 = 4×7 table Name SampleSize Mean StandardDeviation Min Median Max __________________________________________ __________ ________ _________________ ________ ________ ________ preallocationTest/testOnes 16 0.017424 0.001223 0.016911 0.017056 0.021938 preallocationTest/testIndexingWithVariable 8 0.099153 0.0039523 0.096619 0.097218 0.10736 preallocationTest/testIndexingOnLHS 4 0.022985 0.00018664 0.022843 0.022921 0.023257 preallocationTest/testForLoop 4 0.80613 0.005993 0.79979 0.80591 0.8129
참고 항목
runperf
| testsuite
| matlab.perftest.TimeExperiment
| matlab.perftest.TimeResult