Main Content

스크립트나 함수를 사용하여 성능 테스트하기

이 예제에서는 네 가지 다른 접근 방식을 사용하여 벡터의 사전할당에 걸리는 시간을 계측하는 스크립트 기반이나 함수 기반 성능 테스트를 생성하고 실행하는 방법을 보여줍니다.

성능 테스트 작성하기

현재 폴더에서 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

참고 항목

| | |

관련 항목