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