본문 바로가기
멀티코어 프로그래밍/Basic

프로파일링

by 기리의 개발로그 2022. 3. 28.

프로파일링

  • 프로그램의 실행시간, 메모리 사용량, 특정 명렁어 이용, 함수 호출의 빈도 등을 측정하여 프로그램의 성능을 분석하는 방법
  • 프로파일링 작업을 통해서 얻어진 정보는 성능 향상을 위한 프로그램의 최적화에 이용

프로파일러(profilier)

  • 프로파일링을 도와주는 도구로 프로그램에서 사용되는 함수가 몇 번 사용되고 얼마나 많은 시간을 차지하는지 측정

gprof

  • 리눅스 시스템에서 사용하는 프로파일러

  • 프로그램에 대한 함수들의 사용빈도, 수행시간 등을 측정할 수 있는 툴

  • 프로그램을 새로 컴파일해야 사용할 수 있음

  • 컴파일 시에 '-pg' 옵션 추가

    • ex) gcc -o test tes.c -pg
  • 링킹을 위해 .o 파일을 만드는 경우에 컴파일과 링킹 모두에 '-pg' 옵션을 추가해야 함

    • ex) gcc -c test.c -pg
    • ex) gcc -o test test.o -pg
  • 실행 파일을 실행 시키면 'gmon.out' 이라는 파일이 생성됨

  • 'gmon.out' 파일이 생성되면 gprof 명령어를 통해 결과 확인

    • ex) gprof test gmon.out

[실행 결과]

  • % time : 전체 프로그램에서 해당 함수가 차지하는 수행시간의 비율

  • cumulative seconds : 해당 함수의 수행시간과 리스트의 위쪽에 있는 함수들의 수행시간의 합

  • self seconds : 해당 함수의 수행시간. 이 수행시간을 기준으로 프로파일링 결과가 정렬됨

  • calls : 함수가 호출된 횟수. 함수가 호출되지 않았으면 공백

  • self ms/call : 해당 함수가 한 번 호출될 때 해당 함수에서만 소모되는 평균 수행시간(ms 단위)

  • total ms/call : 해당 함수가 한 번 호출되어서 함수의 모든 동작을 수행하는데 소모되는 평균 수행시간(ms 단위)

  • name : 함수의 이름. 결과를 출력할 때 두 번째 우선순위를 가지는 정렬기준


[실행 결과]

  • index : Call grapth 표의 각 항목들에 부여된 숫자.

  • % time : 현재 항목의 함수와 거기서 불리는 모든 함수들의 총 수행시간의 합

  • self : 현재 항목의 함수가 소모한 총 시간

  • children : 현재 항목의 함수가 호출한 함수들의 실행시간의 합

  • called : 함수가 호출된 횟수. 재귀적 호출로 함수가 실행되는 횟수는 제외

  • name : 함수의 이름. index가 함수 이름 뒤에 붙어 있음.


옵션

-s

  • gprof의 결과를 'gmon.sum' 파일에 누적함

  • gmon.out 을 복사하여 gmon.sum 을 만들어야 함

  • 다음 명령어로 프로파일링을 여러 번 수행하면 그 결과가 모두 'gmon.sum' 파일에 저장됨

    • ex) gprof -s executable-file gmon.out gmon.sum
  • 'gmon.sum' 의 결과를 보는 법

    • ex) gprof executable-file gmon.out > output_file

gcov

  • 프로그램에 대한 코드 커버리지(전체 코드 중 얾나 실행이 되었는지) 테스트를 수행할 수 있는 도구
  • 알 수 있는 정보
    • 코드를 구성하는 각 행의 실행 횟수
    • 코드 중 어떤 행이 실제로 실행되는 지에 대한 정보
    • 코드의 특정 부분이 소모한 시간
  • 컴파일 시 '-fprofile-arcs -ftest-coverage' 옵션 추가
    • ex) gcc -fprofile-arcs -ftest-coverage mbym.c

반응형

'멀티코어 프로그래밍 > Basic' 카테고리의 다른 글

Make / Makefile  (41) 2022.03.30
gcc 컴파일러  (13) 2022.03.29
GDB 명령어  (13) 2022.03.27
GDB  (6) 2022.03.26
병렬성  (0) 2015.07.20

댓글