Linux에서 사용하기 쉬운 C ++ 용 프로파일 러는 무엇입니까? [닫은]


79

Linux에서 C ++를 실행하는 일부 코드를 프로파일 링해야합니다. 프로파일 러를 추천 해 주시겠습니까?


1
Linux 및 C ++ 태그를 추가해야합니다. 아마 더 나은 반응과 다양한 의견을 얻을 수있을 것입니다.
Duck

2
stackoverflow.com/questions/375913/… 의 복제본처럼 보입니다 .
Michael Myers

예 : likwid, LLTng, oprofile, valgrind, vtune, gprof, perf, gperftools, pTop
Shan

이 경사에 대한 질문을 참조하십시오 slant.co/improve/topics/1005
ideasman42

답변:


37

gprof를 사용하십시오.

-pg플래그를 사용하여 컴파일하고 (확실하지 않지만) 최적화를 설정해야한다고 생각합니다. gprof를 사용하여 실행 파일이 생성 할 gmon.out 파일을 분석합니다.

예 :

gcc -pg -o whatever whatever.c

./whatever

gprof whatever gmon.out

g ++ 및 cpp도 마찬가지입니다.


32
최적화되지 않은 코드를 프로파일 링하는 것은 약간 무의미하지 않습니까? 마찬가지로, -pg로 많이 수정 된 프로파일 링 코드는 종종 잘못된 지점을 최적화하도록 잘못 안내합니다.
연방

1
-pg하지 컴파일러 링커 옵션입니다
민달팽이 PUE

24

valgrind 는 잘 알려진 Linux 프로파일 러입니다.


생각 Valgrind의 내가 함수 등이라고 얻고있다 확인할하려합니다 .. 더 많은 메모리 누출 검사에 있었다
shergill

14
"callgrind"라는 제품군 도구 사용
dfa

2
Valgrind는 단순히 동적 도구를 구축하기위한 프레임 워크입니다. 하지만 Valgrind에 구축 된 도구 인 Memcheck와 동의어가되었습니다. Callgrind는 프로파일 러에 꽤 능숙합니다.
Falaina


13

RotateRight ( http://www.rotateright.com )의 확대 / 축소 는 제가 사용해온 것입니다. 함수의 나비보기가 있으며 함수를 두 번 클릭하여 소스 또는 asm 코드로 이동할 수 있습니다. 소스를 보려면 디버깅 정보 (-g)로 빌드하지만 최적화 된 코드를 빌드하고 프로파일 링해야 합니다.


1
이 프로그램을 한 번 해보면 정말 멋져요! 현재 Linux에서 가장 좋아하는 프로파일 러입니다. 그러나 -fno-omit-frame-pointer효과적인 프로파일 링 을 위해 코드를 빌드해야한다는 점을 언급 할 가치가 있습니다 .
Nik Reiman

1
링크가 죽은 것 같습니다. 다른 곳에서 찾을 수있는 위치 (또는 경우)를 아는 사람이 있습니까?
Simon F

12

나는 Oprofile 의 팬입니다 . 그것은 커널 모듈 설치를 포함하고 그것에 대한 약간의 학습 곡선을 가지고 있지만 상당히 강력하고 디버깅 기호없이 최적화 된 프로그램 / 프로그램에 매우 잘 작동합니다.

Vtune 은 Intel에서 만든 또 다른 매우 강력한 프로파일 러입니다. Linux 버전은 비상업적 소프트웨어에 대해 무료라고 생각합니다.

도있다 Valgrind의의 DFA에 의해 제안 된 도구 제품군. Callgrind는 아마도 여러분이 가장 관심을 가질 것입니다. Cachegrind (이 기능 세트는 Callgrind의 하위 집합입니다)와 Massif도 흥미롭지 만 후자에 대해서는 경험이 없습니다.


"쉬운 도구"가 아닌 oprofile의 +1
dfa 2009-07-22

1
하하, 사실. 나는 그 소리를 그렇게 쉽게 만들지 않을 것입니다. :) Vtune과 Valgrind 도구만큼 "그 아래에서 프로그램을 실행"하는 것만 큼 간단하지는 않지만 꽤 빨리 익숙해집니다.
Falaina

oprofile이 흥미로워 보입니다-x86_64를 지원합니까?
LiraNuna

불행히도 VTune은 어떤 용도로도 무료가 아닙니다.
rustyx



2

gprof는 프로파일 링을위한 표준 gnu 도구입니다.


2

Sysprof를 살펴 보십시오 . 배포판이 이미 사용 가능할 가능성이 높습니다.

언급 된 모든 프로파일 러는 응용 프로그램이 프레임 포인터로 컴파일 된 경우 가장 잘 작동합니다. 즉, gcc 명령 줄에서 -fno-omit-frame-pointer를 사용해야합니다.


1

.NET에서 수집 한 1000 개의 샘플 대신 수동으로 수집 한 10 개의 샘플을 기반으로 병목 현상을 판단 할 수 있습니다 prof.
Dmitry Grigoryev

1
@DmitryGrigoryev : 맞습니다. 실제로 수정해야 할 사항을 알려줍니다. 통계적 설명은 여기에 있습니다 . 사실, 사람들이 저지르는 첫 번째 실수는 완벽하지만 낭비적인 코드보다는 "병목 현상"을 찾고 있다고 생각하는 것입니다. ;-)
Mike Dunlavey

읽어 주셔서 감사합니다. 디버거에서 실제 함수 호출을 볼 때 최적화가 훨씬 쉽다는 점을 완전히 이해합니다. 그리고 저는 "병목 현상"이 "좋은 최적화 목표"가 아니라 잠재적 인 목표를 의미한다는 것을 이해합니다. 그래도 prof어쨌든 시작하는 것이 합리적이라고 생각합니다. 그것이 f()통계적으로 가장 문제가되는 f()함수라고 생각되면 처음에 멈춘 임의의 함수로 시작하는 대신에 착륙 할 때까지 프로그램을 여러 번 중지 할 것입니다.
Dmitry Grigoryev
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.