본문 바로가기

Programing Language/C, C++

C언어 프로파일하기, gcc profiler gprof

반응형

프로그램에서 시간을 재는 방법으로 가장 쉬운 방법은 time.h 에 있는 clock() 함수를 이용하는 방법이다.


이 함수를 이용하면 내가 원하는 부분의 시간을 직접 잴 수 있다. 관련 포스팅은 너무나도 많아서 검색하면 쉽게 나온다.

이 글에서 다룰 내용은, 한 단계 앞서서 복잡한 프로그램에서 속도를 재는 것이다. 


이름하여 프로파일링 (profiling), 프로파일링이란 보통 범죄 수사를 할 때 증거와 다양한 데이터를 가지고 범죄자의 심리를 추적하여 범인의 프로필 즉, '범인은 이런 사람일 것이다.' 라는 것을 추측 하는 수사법이다. 

나무위키: 프로파일링


하지만, 프로그래밍에서 profiling은 다르다. 내가 짠 프로그램에서 어느 부분이 얼마나 속도를 잡아먹는지, 프로그램의 최적화를 위해 각 모듈 (부분) 별로 걸리는 시간을 측정해준다. 

python에는 cProfile 이라는 모듈이 있어서 비슷한 역할을 해준다.


C에도 비슷한 역할을 하는 다양한 프로파일러가 있는데, 리눅스에는 gcc나 g++ 컴파일러에 내장된 gprof가 있다.



gprof의 사용법은 단순히 다음의 단계를 따르면 된다.


0. 설치하기


보통 리눅스에 기본적으로 설치가 되어있지만, 혹시라도 설치가 안되어있다면 apt-get을 이용해 설치를 하자.

(혹시 centOS라면 apt-get 대신 yum으로 설치하면 된다.) 또한 당연하겠지만 gcc / g++ compiler가 있어야 한다.


sudo apt-get install binutils



1. 컴파일 


우선 컴파일을 할 때 -pg 옵션을 준다.


g++ example.c -o gprofTest -pg


2. 바이너리 파일 실행


이 단계는 일반적으로 컴파일 한 바이너리 파일을 실행하는 것과 같다.


./gprofTest


3. gprof


앞의 단계에서 -pg 옵션을 주고 실행을 하면 gmon.out 파일이 나타난다. 여기에 profiling information이 들어있지만 아직 우리가 읽을 수 있는 형태가 아닌 raw form이기 때문에 gprof를 통해 읽을 수 있는 format으로 변환을 시켜줘야 한다.

용법은 다음과 같다.


gprof [binary file] gmon.out


위와 같이 실행하면 결과가 바로 나오고, 결과를 저장하고 싶다면 다음의 예제 폼을 따르면 된다.


gprof gprofTest gmon.out > profOutput.txt


4. 결과 확인


이제 profOutput.txt에 우리가 읽을 수 있는 format으로 결과가 저장되었기 때문에 읽어보면 된다.


cat profOutput.txt


이후 나오는 그림은 실제 내가 연구할 때 사용한 실행 결과 모습이다.

스크린샷 아리에도 훨씬 많은 내용들을 담고있으니, 직접 실행해서 참고하면 된다!



질문은 댓글로 언제든지 받습니다. :)

반응형

'Programing Language > C, C++' 카테고리의 다른 글

C언어 프로파일링 gprof#2 - 예제코드  (0) 2020.06.05