Main Content

profile

함수 실행 시간 프로파일링

설명

프로파일러를 사용하여 실행 시간을 추적합니다. MATLAB® 코드의 실행 시간을 알면 코드를 디버그하고 최적화하는 데 도움이 됩니다. 프로파일러에 대한 사용자 인터페이스에 대한 내용은 프로파일러를 참조하십시오.

예제

profile action은 함수의 실행 시간을 프로파일링합니다. action을 사용하여 프로파일러를 시작, 중지, 다시 시작하고 프로파일 통계를 보거나 지우십시오. 예를 들어, profile on은 프로파일러를 시작합니다.

예제

profile action option1 ... optionN은 지정된 옵션을 사용해 프로파일러를 시작하거나 다시 시작합니다. 예를 들어, profile resume -history는 프로파일러를 다시 시작하고 함수 호출 순서를 기록합니다.

예제

profile option1 ... optionN은 지정된 프로파일러 옵션을 설정합니다. 프로파일러가 켜진 상태에서 이 중 한 옵션을 지정하면 MATLAB에서 오류가 발생합니다. 옵션을 변경하려면 먼저 profile off를 지정한 다음 새 옵션을 지정하십시오.

예제

p = profile('info')는 프로파일러를 중지하고 결과값을 포함하는 구조체를 표시합니다. profile로 생성된 데이터에 액세스하려면 이 구문을 사용하십시오.

예제

s = profile('status')는 프로파일러 상태 정보를 포함한 구조체를 반환합니다.

예제

모두 축소

프로파일러를 켜고 magic 함수를 호출합니다.

profile on
n = 100;
M = magic(n);

프로파일러 창에서 결과를 확인합니다.

profile viewer

결과를 HTML 파일로 저장합니다. 기본적으로 profsave는 파일을 현재 작업 폴더에 있는 profile_results 하위 폴더에 저장합니다.

profsave

프로파일러를 켜고 magic 함수를 호출합니다.

profile on
n = 100;
M = magic(n);

결과를 MAT 파일로 저장합니다.

p = profile('info')
save myprofiledata p
p = 

      FunctionTable: [1x1 struct]
    FunctionHistory: [2x2 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0

다음 메인 함수와 로컬 함수를 사용하여 myFunction.m 파일을 생성합니다.

function c = myFunction(a,b)
c = sqrt(square(a)+square(b));
end

function y = square(x)
y = x.^2;
end

프로파일러를 켜고 함수 호출 내역 옵션을 활성화합니다. myFunction 함수에 대한 호출을 프로파일링합니다.

profile on -history
a = rand(5);
b = rand(5);
c = myFunction(a,b);

프로파일링 결과를 저장합니다.

p = profile('info')
p = 

      FunctionTable: [2x1 struct]
    FunctionHistory: [2x6 double]
     ClockPrecision: 3.3475e-07
         ClockSpeed: 3.0600e+09
               Name: 'MATLAB'
           Overhead: 0

함수 호출 내역을 표시합니다.

p.FunctionHistory
ans =

     0     0     1     0     1     1
     1     2     2     2     2     1

함수 호출 내역을 반복하여 함수 진입과 함수 종료 정보를 표시합니다.

numEvents = size(p.FunctionHistory,2);
for n = 1:numEvents
    name = p.FunctionTable(p.FunctionHistory(2,n)).FunctionName;
    
    if p.FunctionHistory(1,n) == 0
        disp(['Entered ' name]);
    else
        disp(['Exited ' name]);
    end
end
Entered myFunction
Entered myFunction>square
Exited myFunction>square
Entered myFunction>square
Exited myFunction>square
Exited myFunction

함수 호출 내역을 디폴트 값으로 설정합니다.

profile -timestamp
s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'timestamp'
        HistorySize: 5000000

입력 인수

모두 축소

프로파일러에 대한 컨트롤 옵션으로, 다음과 같은 옵션 중 하나로 지정됩니다.

옵션결과
on

이전에 기록된 프로파일 통계량을 지우며 프로파일러를 시작합니다.

off

프로파일러를 중지합니다.

clear

프로파일러를 중지하고 기록된 통계량을 지웁니다.

viewer

프로파일러를 중지하고 프로파일러 창에 결과를 표시합니다. 자세한 내용은 프로파일러를 참조하십시오. 프로파일러 사용자 인터페이스는 MATLAB Online™에서 지원되지 않습니다.

info

프로파일러를 중지하고 결과값을 포함하는 구조체를 표시합니다.

resume이전에 기록된 통계량을 지우지 않고 프로파일러를 다시 시작합니다.
status

프로파일러 상태 정보를 포함한 구조체를 반환합니다.

하나 이상의 프로파일링 옵션으로, 내역 옵션표와 클록 옵션표에 있는 유효한 설정에 대응하는 문자형 벡터로 지정됩니다.

프로파일러 설정을 변경할 경우, 프로파일러를 중지하거나 통계량을 지워도 변경된 설정이 유지됩니다. 디폴트 프로파일러 동작으로 되돌리려면 수동으로 옵션을 디폴트 값으로 설정하거나 새로 MATLAB 세션을 시작하십시오.

내역 옵션

옵션결과
-nohistory

기본 프로파일링 통계량을 기록합니다.

-history

기본 프로파일링 통계량뿐 아니라 함수 진입, 종료 이벤트를 포함한 정확한 함수 호출 순서를 기록합니다.

-timestamp

디폴트 값입니다. 기본 프로파일링 통계량뿐 아니라 진입, 종료 이벤트를 포함한 정확한 함수 호출 순서 및 각 이벤트의 타임스탬프를 기록합니다.

-historysize integer

기록하고자 하는 함수 진입 이벤트와 종료 이벤트의 수를 지정합니다. 기본적으로 historysize는 5,000,000입니다. 함수 호출 수가 지정한 historysize를 초과할 경우, profile 함수는 호출 순서를 제외한 나머지 프로파일링 통계량을 계속해서 기록합니다.

클록 옵션

옵션결과
-timer 'performance'

디폴트 값입니다. 운영 체제에서 제공하는 클록의 wall-clock 시간을 사용하여 성능을 측정합니다.

-timer 'processor'

프로세서에서 계산된 wall-clock 시간을 직접 가져와 사용합니다. 절전 설정이나 다중 프로세서 사용은 때때로 이 측정값에 영향을 줄 수 있습니다.

-timer 'real'

운영 체제에서 보고한 시스템 시간을 사용합니다. 이 옵션은 가장 많은 계산량이 필요한 측정법으로, 프로파일링된 코드 성능에 가장 많은 영향을 미칩니다. 운영 체제 클록의 시간을 변경하면 이 측정값에 영향을 미칩니다.

-timer 'cpu'

컴퓨터 시간을 사용하며 모든 스레드에서의 시간을 합산합니다. 이 측정값은 wall-clock 시간과 다릅니다. 예를 들어, pause 함수에 대한 컴퓨터 시간은 일반적으로 작지만, wall-clock 시간은 실제로 일시 중지가 이루어진 시간도 고려하여 이보다는 더 큽니다.

출력 인수

모두 축소

프로파일러 통계량으로, 다음 필드를 포함하는 구조체로 반환됩니다.

필드

설명

FunctionTable

함수에 대한 통계량으로, 구조체 배열로 반환됩니다. 배열의 각 구조체는 프로파일링 중 호출된 함수나 로컬 함수 중 하나에 대한 정보를 포함합니다. 각 구조체는 다음 필드를 포함합니다.

  • CompleteNameFunctionName의 전체 경로.

  • FunctionName – 함수의 이름. 함수가 로컬 함수인 경우, FunctionName에는 메인 함수가 포함됩니다.

  • FileNameFunctionName에 대한 전체 경로로, 파일 확장자를 포함합니다. 함수가 로컬 함수인 경우, FileName은 메인 함수에 대한 전체 경로입니다.

  • Type – 함수의 유형입니다. 예를 들어, MATLAB 함수, MEX 함수, 로컬 함수 또는 중첩 함수가 될 수 있습니다.

  • NumCalls – 프로파일링된 코드가 함수를 호출한 횟수입니다.

  • TotalTime – 함수와 그 자식 함수에 소요된 총 시간입니다.

  • TotalRecursiveTime – MATLAB에서는 더 이상 이 필드를 사용하지 않습니다.

  • Children – 함수가 호출한 함수에 대한 정보입니다. 배열의 각 항목은 한 자식 함수에 대한 정보를 포함합니다. 구조체에는 다음 필드가 있습니다.

    • IndexFunctionTable 내 자식 함수 정보 구조체에 대한 인덱스입니다.

    • NumCalls – 프로파일링된 코드가 자식 함수를 호출한 횟수입니다.

    • TotalTime – 자식 함수에 소요된 총 시간입니다.

  • ParentsFunctionName의 부모 함수에 대한 정보입니다. 배열의 각 구조체는 부모 함수 중 하나에 대한 정보를 포함합니다. 구조체에는 다음 필드가 있습니다.

    • IndexFunctionTable 내 부모 함수 정보 구조체에 대한 인덱스입니다.

    • NumCalls – 부모 함수가 이 함수를 호출한 횟수입니다.

  • ExecutedLines – 프로파일링된 함수에 대한 라인 단위 세부 정보를 포함하는 배열입니다.

    • 열 1 – FileName에서 코드의 실행된 라인에 대한 라인 번호.

    • 열 2 – 프로파일링된 코드가 코드 라인을 실행한 횟수.

    • 열 3 – 코드 라인에 소요된 총 시간. 열 3 항목의 합계가 반드시 TotalTime과 일치하지는 않습니다.

  • IsRecursive – 함수가 재귀적인지 여부를 나타내는 표시자. 값이 1(true)인 경우 함수는 재귀적입니다. 값이 0(false)인 경우 함수는 비재귀적입니다.

  • PartialData – 프로파일 통계량이 불완전한지 여부를 나타내는 표시자. 값이 논리값 1(true)인 경우 함수는 프로파일링 도중 수정되었다는 의미입니다. 예를 들어, 함수를 편집하거나 메모리에서 함수를 지운 경우가 이에 해당합니다. 이러한 경우, 프로파일러는 함수를 수정했을 때까지의 데이터만 수집합니다.

FunctionHistory

함수 호출 내역으로, 배열로 반환됩니다.

  • 행 1 – 함수 진입 또는 종료의 표시자. 프로파일러는 함수 진입을 0으로 기록하고, 함수 종료를 1로 기록합니다.

  • 행 2 – FunctionTable 내 함수 정보 구조체에 대한 인덱스.

  • 행 3 – 함수 진입 또는 종료 타임스탬프의 초 부분. 운영 체제 Epoch 시간 이후에 경과한 시간으로 지정됩니다. 이 행은 -timestamp 내역 옵션이 지정된 경우에만 반환됩니다.

  • 행 4 – 함수 진입 또는 종료 타임스탬프의 마이크로초 부분. 운영 체제 Epoch 시간 이후에 경과한 시간으로 지정됩니다. 이 행은 -timestamp 내역 옵션이 지정된 경우에만 반환됩니다.

ClockPrecision

profile 함수의 시간 측정 정밀도로, double형으로 반환됩니다.

ClockSpeed

추정 CPU 클록 속도로, double형으로 반환됩니다.

Name

프로파일러의 이름으로, 문자형 배열로 반환됩니다.

Overhead

향후 사용을 위해 예약됨.

프로파일러 상태로, 다음 필드를 포함하는 구조체로 반환됩니다.

필드

디폴트 값

ProfilerStatus

'on', 'off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

'performance', 'processor', 'cpu' 또는 'real'

'performance'

HistoryTracking

'on', 'off' 또는 'timestamp'

'timestamp'

HistorySize

정수

5000000

제한 사항

  • MATLAB 프로파일러는 코드가 실행되는 동안 계산을 수행하며 데이터를 수집합니다. 이 작업에는 계산 리소스가 추가로 필요하기 때문에 동일한 코드를 프로파일러 없이 실행할 때보다 프로파일러를 켜 놓고 실행할 때 속도가 더 느립니다. 이러한 이유로 프로파일러가 측정한 실행 시간은 코드를 실행한 절대적인 측정값이 아니라 상대적인 측정값으로 취급해야 합니다.

  • 프로파일링된 코드가 간접(또는 상호) 재귀를 사용하는 경우, 프로파일러가 부정확한 결과를 반환할 수 있습니다. 직접 재귀인 경우(단일 함수가 자신을 호출) 프로파일러는 해당 함수에 대한 총 비재귀적 호출 시간을 반환합니다. 프로파일링된 코드의 함수가 재귀적(직접 또는 간접)인지 확인하려면 FunctionTable 항목에서 IsRecursive 필드의 값을 확인하십시오.

  • 코드 섹션을 실행할 때는 프로파일러가 지원되지 않습니다.

  • 프로파일러 사용자 인터페이스를 열려면 profile viewer 구문을 사용하거나 프로파일러를 참조하십시오. 프로파일러 사용자 인터페이스는 MATLAB Online에서 지원되지 않습니다.

  • MATLAB R2015b 기준으로 디폴트 타이머는 'performance'입니다. MATLAB의 이전 버전에서 디폴트 프로파일러 타이머는 'cpu'였는데 이는 wall-clock 시간 대신 컴퓨터 시간을 측정했습니다.

버전 내역

R2006a 이전에 개발됨