이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

profile

함수 실행 시간 프로파일링

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

구문

profile action
profile action option1 ... optionN
profile option1 ... optionN
p = profile('info')
s = profile('status')

설명

예제

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')는 프로파일러 상태 정보를 포함한 구조체를 반환합니다.

예제

모두 축소

이 예제는 MATLAB Online™에서 지원되지 않습니다.

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

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

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

profile viewer

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

profsave

다음 메인 함수와 로컬 함수를 사용하여 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 -nohistory

프로파일러를 켜고 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
s = profile('status')
s = 

     ProfilerStatus: 'off'
        DetailLevel: 'mmex'
              Timer: 'performance'
    HistoryTracking: 'off'
        HistorySize: 1000000

입력 인수

모두 축소

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

옵션결과
on

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

off

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

resume

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

clear

기록된 통계량을 지웁니다.

viewer

프로파일러를 중지하고 프로파일러 창에 결과를 표시합니다. 자세한 내용은 성능 개선을 위해 프로파일링하기 항목을 참조하십시오. 프로파일러 사용자 인터페이스는 MATLAB Online에서 사용할 수 없습니다.

info

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

status

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

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

  • profile on option1 ... optionN

  • profile resume option1 ... optionN

  • profile option1 ... optionN

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

내역 옵션

옵션결과
-history

함수 진입, 종료 이벤트를 포함한 정확한 함수 호출 순서를 기록합니다. 기본적으로, -history 옵션은 활성화되지 않습니다.

-historysize integer

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

-nohistory

디폴트 설정. 정확한 함수 호출 순서 기록 기능을 비활성화합니다. profile 함수는 기타 모든 프로파일링 통계량을 수집합니다.

클록 옵션

옵션결과
-timer 'performance'

디폴트 설정. 운영 체제에서 제공하는 클록의 실제 경과 시간을 사용하여 성능을 측정합니다.

-timer 'processor'

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

-timer 'real'

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

-timer 'cpu'

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

출력 인수

모두 축소

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

필드

설명

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 내 함수 정보 구조체에 대한 인덱스.

ClockPrecision

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

ClockSpeed

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

Name

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

Overhead

향후 사용을 위해 예약됨.

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

필드

디폴트 값

ProfilerStatus

'on' 또는 'off'

'off'

DetailLevel

'mmex'

'mmex'

Timer

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

'performance'

HistoryTracking

'on' 또는 'off'

'off'

HistorySize

정수

1000000

제한 사항

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

  • 프로파일러 사용자 인터페이스를 열려면 profile viewer 구문을 사용하거나 성능 개선을 위해 프로파일링하기 항목을 참조하십시오. 프로파일러 사용자 인터페이스는 MATLAB Online에서 사용할 수 없습니다.

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

R2006a 이전에 개발됨