프로파일링

프로파일링 (Profiling)

어떤 함수가 시간을 가장 많이 잡아먹는지 알고 싶을 때가 있죠. Octave는 함수 단위로 코드 실행을 프로파일링하는 기능을 지원해요. 프로파일링을 켜 두면 Octave 코드를 실행하는 동안 함수를 호출할 때마다(내장 함수, 연산자, oct·mex 파일 함수, Octave 코드의 사용자 정의 함수, 익명 함수를 포함해서) 기록이 남아요. 이 데이터는 코드 동작을 분석하는 데 도움이 되고, 특히 계산 시간을 많이 쓰는 '핫스팟'을 찾는 데 유용해요. 최적화 노력을 쏟기 가장 좋은 지점이기도 하죠.

출처: Profiling

본문

프로파일링의 핵심 명령은 profile이에요. 프로파일러를 시작·중지하고, 모인 데이터를 나중에 조회하는 데도 쓰죠. 데이터는 Octave 데이터 구조체로 돌아오는데, 다른 루틴이나 도구로 더 살펴보거나 처리할 수 있어요.

profile

profile on
profile off
profile resume
profile clear
S = profile ("status")
T = profile ("info")

내장 프로파일러를 제어합니다.

  • profile on — 프로파일러를 시작합니다. 이전에 모인 데이터는 지워져요.
  • profile off — 프로파일링을 중지합니다. 모인 데이터는 나중에 T = profile ("info")로 꺼내 볼 수 있어요.
  • profile clear — 모인 프로파일러 데이터를 모두 지우고 프로파일링을 중지합니다.
  • profile resume — 이전 데이터를 지우지 않고 프로파일링을 다시 시작합니다. 새로 모인 통계는 기존 것에 더해져요.
  • S = profile ("status") — 프로파일러의 현재 상태에 대한 구조체를 돌려줍니다. 현재 유일한 필드는 "on" 또는 "off" 값의 ProfilerStatus예요.
  • T = profile ("info") — 모인 프로파일링 통계를 구조체 T로 돌려줍니다. 평면 프로파일(flat profile)은 FunctionTable 필드에 있는데, 호출된 각 함수마다 하나씩 대응하는 구조체 배열이에요. 또 Hierarchical 필드에는 계층적 호출 트리가 들어 있어요. 각 노드는 FunctionTable의 인덱스를 가리켜서 대응하는 함수를 식별하고, 호출 수와 그 단계에서 쓴 시간 데이터도 담고 있어요.

See also: profshow, profexplore.

모은 데이터를 한눈에 보는 쉬운 방법은 profshow예요. 이 함수는 profile이 돌려준 프로파일러 데이터를 입력으로 받아 평면 프로파일을 출력해요. 예를 들어:

 Function Attr     Time (s)        Calls
----------------------------------------
   >myfib    R        2.195        13529
binary <=             0.061        13529
 binary -             0.050        13528
 binary +             0.026         6764

이걸 보면 실행 시간의 대부분이 myfib 함수를 실행하는 데 쓰였고, 나열된 이진 연산자들을 평가하는 데는 작은 비율이 쓰였음을 알 수 있어요. 게다가 함수가 몇 번 호출됐는지도 보이고, 프로파일러가 재귀 함수라는 사실도 기록해 줘요.

profshow

profshow (data)
profshow (data, n)
profshow ()
profshow (n)

함수별 평면 프로파일 결과를 표시합니다. 프로파일 데이터(실행 시간, 호출 수)를 가장 핵심적인 n개 함수에 대해 출력해요. 결과는 각 함수에 쓴 총 시간의 내림차순으로 정렬됩니다. n을 지정하지 않으면 기본값은 20이에요.

입력 dataprofile ("info")가 돌려준 구조체예요. 지정하지 않으면 profshow는 현재 프로파일 데이터셋을 사용합니다.

속성(attribute) 열은 재귀 함수에 R을 표시하고, 다른 종류의 함수에는 비어 있어요.

See also: profexplore, profile.

profexport

profexport (dir)
profexport (dir, data)
profexport (dir, name)
profexport (dir, name, data)

프로파일러 데이터를 HTML로 내보냅니다. data의 프로파일링 데이터를 폴더 dir에 일련의 HTML 파일로 내보내요. 첫 파일은 dir/index.html이 됩니다. name을 지정하면 내보내는 프로파일의 '이름'을 담는 문자열이어야 하고, 이 이름이 HTML에 포함돼요.

입력 dataprofile ("info")가 돌려준 구조체예요. 지정하지 않으면 profexport는 현재 프로파일 데이터셋을 사용합니다.

See also: profshow, profexplore, profile.

profexplore

profexplore ()
profexplore (data)

계층적 프로파일러 출력을 대화형으로 탐색합니다. dataprofile ("info")가 돌려준 프로파일 데이터 구조체라고 하면, 이 명령은 호출 트리를 탐색하는 데 쓸 수 있는 대화형 프롬프트를 엽니다. 가능한 명령 목록을 보려면 help를 입력하세요. data를 생략하면 profile ("info")를 호출해서 그 결과를 사용합니다.

See also: profile, profshow.

더 알아보기

  • octave-profiling-and-debugging — 프로파일링과 디버깅