가장 좋아하는 프로파일 링 도구는 무엇입니까 (C ++ 용) [닫힘]


83

지금까지 저는 Rational Quantify 만 사용했습니다. Intel의 VTune에 대해 좋은 소식을 들었지만 사용해 본 적이 없습니다!

편집 : 나는 대부분 코드를 계측 할 소프트웨어를 찾고 있는데, 이것이 매우 훌륭한 결과를 얻는 유일한 방법이라고 생각합니다.


또한보십시오:

Windows에서 네이티브 C ++를위한 좋은 프로파일 러는 무엇입니까?


1) 측정을 원하십니까, 아니면 2) 속도 향상을 원하십니까? 2를 원하고 1이 필요하다고 생각한다면 그렇지 않습니다. 속도 향상을 찾기 위해 "매우 좋은 결과"가 필요하지 않습니다. 프로그램이 90 %의 시간을 소비하고 있다면 제거 할 수있는 작업이 무엇인지 알고 있다면 스택 샘플 은이를 10 개 중 9 번 보여줍니다. 10 개 샘플을 보면 10 번, 9 번, 8 번? 어느 쪽이든 그것이 무엇인지 알고 있습니다. 측정 된 백분율은 중요하지 않습니다.
Mike Dunlavey

답변:


35

Linux 개발 용 (일부 도구는 다른 플랫폼에서 작동 할 수 있음) 이것들은 내가 아는 두 가지 큰 이름입니다. 한동안 활발한 발전을 보지 못한 다른 작은 이름이 많이 있습니다.


28

Linux : Google Perftools

  • valgrind보다 빠름 (아직 미세하지 않음)
  • 코드 계측이 필요하지 않습니다.
  • 멋진 그래픽 출력 (-> kcachegrind)
  • 메모리 프로파일 링, CPU 프로파일 링, 누출 검사를 수행합니다.

9

IMHO, 디버거를 사용한 샘플링 이 가장 좋은 방법입니다. 프로그램을 중지 할 수있는 IDE 또는 디버거 만 있으면됩니다. 프로파일 러를 설치하기 전에 성능 문제를 해결합니다.


3
예! 이것은 나를 위해 잘 작동합니다. 계측이 필요하지 않습니다. 프로파일 러 등을 설치할 필요가 없습니다. Linux에서는 gdb를 사용할 수 있습니다. 프로그램이 최고 속도로 실행됩니다. 중지하려면 Ctrl-c를 누르십시오. 스택 추적을 표시하려면 'bt'를 입력하십시오. 계속하려면 'c'를 누른 다음 다시 Ctrl-c를 누르십시오. 잘 작동합니다! 이 기술을 사용하여 복잡한 프로그램에서 실행 시간을 20 % 단축했습니다. 대박!
Hugh Perkins

@HughPerkins : 편집 해 주셔서 감사합니다. 성공하게되어 기쁩니다. (나는 :) 더 나은 20 % 이상을 수행 할 수 있습니다 내기
마이크 Dunlavey

1
네, 핫스팟 :-) 찾습니다 만 GDB + CTRL-C를 사용하여, 몇 시간 작업에, 200 밀리에 1200ms에서 반복 시간 아래있어
휴 퍼킨스

@HughPerkins : 내 자신의 코드로 작업하는 경우 시도를 중단해야 할 때를 알기가 어렵습니다. 항상 더 짜낼 수있는 것 같습니다. 다른 사람의 코드를 작업 할 때 문제가있을 수 있습니다. 코드의 "소유자"가 문제를 해결하도록 항상 설득 할 수는 없으므로 프로세스가 중단됩니다. 흥미로운 수수께끼입니다.
Mike Dunlavey 2014

인스 트루먼 테이션없이이 작업을 수행하려면 Linux에서 디버거 나 IDE가 필요하지 않습니다. 실행중인 현재 명령을 추적하려면 "pstack <pid>"를 실행하십시오. 디버거를 시작한 다음 수동으로 중단 한 다음 스택 추적을 찾는 것보다 훨씬 간단합니다.
Manish Sogi

7

C ++ 코드를 프로파일 링하는 유일한 경험은 AutomatedQA (현재 SmartBear Software)의 AQTime 입니다. 여러 유형의 프로파일 러 (성능, 메모리, Windows 핸들, 예외 추적, 정적 분석 등)가 내장되어 있으며 결과를 얻기 위해 코드를 계측합니다.

저는 그것을 사용하는 것을 즐겼습니다. 코드를 조금만 변경해도 성능이 크게 향상 될 수있는 지점을 찾는 것은 항상 재미있었습니다.


불행히도 Windows에서만 작동합니다.
Bram

6

나는 전에 프로파일 링을 한 적이 없습니다. 어제 저는 시간 저장을 위해 정적 타임 테이블 (map <std :: string, long long>)이있는 ProfilingTimer 클래스를 프로그래밍했습니다.

생성자는 시작 눈금을 저장하고 소멸자는 경과 시간을 계산하여지도에 추가합니다.

ProfilingTimer::ProfilingTimer(std::string name)
 : mLocalName(name)
{
 sNestedName += mLocalName;
 sNestedName += " > ";

 if(sTimetable.find(sNestedName) == sTimetable.end())
  sTimetable[sNestedName] = 0;

 mStartTick = Platform::GetTimerTicks();
}

ProfilingTimer::~ProfilingTimer()
{
 long long totalTicks = Platform::GetTimerTicks() - mStartTick;

 sTimetable[sNestedName] += totalTicks;

 sNestedName.erase(sNestedName.length() - mLocalName.length() - 3);
}

프로파일 링하려는 모든 기능 (또는 {block})에서 다음을 추가해야합니다.

ProfilingTimer _ProfilingTimer("identifier");

이 줄은 어떤 기능이 많은 시간이 걸리는지 추측해야하므로 프로파일 링하려는 모든 기능을 추가하기에는 약간 번거 롭습니다. 그러나 그것은 잘 작동하고 인쇄 기능은 소비 시간을 %로 표시합니다.

(비슷한 "집에서 만든 프로파일 링"으로 작업하는 다른 사람이 있습니까? 아니면 그냥 어리석은 일입니까?하지만 재미 있습니다! 개선 제안이있는 사람이 있습니까?

모든 기능에 자동으로 행을 추가하는 것이 있습니까?)


5

저는 과거에 Glowcode를 광범위하게 사용 했으며 긍정적 인 경험 만했습니다. Visual Studio 통합은 정말 훌륭하며 지금까지 사용해 본 것 중 가장 효율적이고 직관적 인 프로파일 러입니다 (관리 코드 용 프로파일 러와 비교해도 마찬가지 임).

분명히 Windows에서 실행되지 않으면 쓸모가 없지만 질문으로 인해 요구 사항이 정확히 무엇인지 명확하지 않습니다.


5

의심 할 여지없이 oprofile; 간단하고 신뢰할 수 있으며 작업을 수행하며 모든 종류의 멋진 데이터 분석을 제공 할 수 있습니다.


5

Visual Studio 2008 의 프로파일 러 는 매우 훌륭합니다. 빠르고 사용자 친화적이며 명확하며 IDE에 잘 통합되어 있습니다.


2
프로파일 러는 팀 버전에만 있지 않나요?
dwj

@dwj : 잘 모르겠습니다. Visual Studio Team System 2008 Development Edition을 사용하고 있습니다.
Dimitri C.

2010 년 이전 버전의 경우 팀 에디션 ( stackoverflow.com/questions/61669/… ) 에만있는 것 같습니다 .
dwj

4

Windows의 경우 Xperf를 확인하십시오 . 샘플링 된 프로필을 사용하고 유용한 UI가 있으며 계측이 필요하지 않습니다. 성능 문제를 추적하는 데 매우 유용합니다. 다음과 같은 질문에 답할 수 있습니다.

  • 누가 가장 많은 CPU를 사용하고 있습니까? 호출 스택을 사용하여 함수 이름으로 드릴 다운합니다.
  • 누가 가장 많은 메모리를 할당하고 있습니까?
  • 누가 레지스트리 쿼리를 가장 많이 수행합니까?
  • 디스크 쓰기? 기타

예상했던 곳이 아닐 수 있으므로 병목 현상을 발견하면 상당히 놀랄 것입니다!


3

프로파일 링에는 다양한 요구 사항이 있습니다. 인스트루먼트 된 코드가 정상입니까, 아니면 최적화 된 코드 (또는 이미 컴파일 된 코드)를 프로파일 링해야합니까? 라인 별 프로필 정보가 필요하십니까? 어떤 OS를 실행하고 있습니까? 공유 라이브러리도 프로파일 링해야합니까? 시스템 호출에 대한 추적은 어떻습니까?

개인적으로 저는 제가하는 모든 일에 oprofile을 사용하지만 모든 경우에 이것이 최선의 선택이 아닐 수도 있습니다. Vtune과 Shark도 훌륭합니다.


3

작업중인 플랫폼에 대해 언급하지 않았으므로 Linux에서 cachegrind라고 말씀 드리겠습니다. 명확히. Valgrind 도구 세트의 일부입니다.

http://valgrind.org/info/tools.html

내 코드 최적화의 대부분은 내부 함수를 위한 것이기 때문에 하위 기능인 Callgrind를 사용한 적이 없습니다 .

사용 가능한 프론트 엔드 KCachegrind가 있습니다.


3

Windows 개발을 위해 저는 Software Verification의 Performance Validator를 사용 하고 있습니다. 빠르고 합리적으로 정확하며 합리적인 가격입니다. 가장 좋은 점은 실행중인 프로세스를 계측 할 수 있으며 수동 및 호출 스택을 기반으로 런타임시 데이터 수집을 켜고 끌 수 있다는 점입니다. 대규모 프로그램의 작은 섹션을 프로파일 링하는 데 적합합니다.


3

Windows의 경우 Visual Studio Team Edition에서 AMD Codeanalyst, Intel VTune 및 프로파일 러를 사용해 보았습니다.

Codeanalyst는 버그가 많고 (자주 충돌 함) 내 코드에서 결과가 종종 부정확합니다. UI가 직관적이지 않습니다. 예를 들어, 프로필 결과에서 호출 스택 디스플레이에 도달하려면 "프로세스"탭을 클릭 한 다음 프로그램의 EXE 파일 이름을 클릭 한 다음 작은 글자 "CSS"가있는 도구 모음 단추를 클릭해야합니다. 그러나 프리웨어이므로 시도해 볼 수 있으며 AMD 프로세서 없이도 작동합니다 (더 적은 기능으로).

VTune (700 달러)에는 끔찍한 사용자 인터페이스 IMO가 있습니다. 큰 프로그램에서는 원하는 특정 호출 트리를 찾기가 어렵고 프로그램에서 한 번에 하나의 "노드"만 볼 수 있습니다 (즉시 호출자와 피 호출자가있는 함수). 콜 트리. 콜 그래프보기가 있지만 상대적 실행 시간을 그래프에 표시하는 방법을 찾을 수 없습니다. 즉, 그래프의 함수는 시간이 얼마나 소요되었는지에 관계없이 동일하게 보입니다. 마치 프로파일 링 지점을 완전히 놓친 것처럼 보입니다.

Visual Studio의 프로파일 러는 세 가지 중 최고의 GUI를 가지고 있지만 어떤 이유로 대부분의 코드에서 샘플을 수집 할 수 없습니다 (샘플은 전체 C ++ 프로그램에서 몇 가지 기능에 대해서만 수집됩니다). 또한 직접 구매할 가격이나 방법을 찾을 수 없었습니다. 그러나 그것은 우리 회사의 MSDN 구독과 함께 제공됩니다. Visual Studio는 관리, 네이티브 및 혼합 코드를 지원합니다. 그 점에서 다른 두 프로파일 러에 대해서는 잘 모르겠습니다.

결론적으로 나는 아직 좋은 프로파일 러를 모른다! 여기에서 다른 제안을 확인하겠습니다.


3

PC 플랫폼에는 devpartner 를 사용 합니다.


코드를 계측합니다. 코드 커버리지와 경계 검사 (계측 및 비 계측)가 있습니다
EvilTeach

2

나는 Quantify an AQTime을 시도했고, Quantify는 귀중한 '서브 트리에 초점'및 '서브 트리 삭제'기능으로 인해 우승했습니다.


전체 확인. 저는 C ++ 애플리케이션에 대해 몇 가지 프로파일 링을 수행해야했으며, 이것이 바로 제 하루를 만든 정확한 기능이었습니다.
Enno

2

유일한 민감한 대답은 인텔의 PTU 입니다. 물론 인텔 프로세서에서 사용하고 아키텍처 자체가 의미있는 프로필을 제공하기가 더 쉽기 때문에 적어도 C2D 시스템에서 훨씬 더 가치있는 결과를 얻는 것이 가장 좋습니다.


2

저는 Windows 및 Linux에서 VTune을 수년 동안 사용하여 매우 좋은 결과를 얻었습니다. 이후 버전은 해당 제품을 러시아 개발 팀에 아웃소싱했을 때 품질과 성능이 모두 떨어졌습니다 (VTune 충돌 증가, 종종 분석 파일을 여는 데 15 분 이상 소요됨).

계측과 관련하여 생각보다 유용하지 않다는 것을 알 수 있습니다. 내가 작업 한 애플리케이션의 종류에서 계측을 추가하면 종종 제품 속도가 너무 느려져 더 이상 작동하지 않습니다 (실화 : 앱 시작, 집에 가기, 다음 날 돌아 오기, 앱 초기화 중). 또한 계측되지 않은 프로파일 링을 사용하면 실제 문제에 대응할 수 있습니다. 예를 들어 VTune 원격 날짜 수집기를 사용하면 성능 문제가 발생하는 수백 개의 동시 연결이있는 라이브 서버에 대해 샘플링 세션을 시작하고 테스트 환경에서 복제 할 수없는 프로덕션에서 발생하는 문제를 포착 할 수 있습니다.



1

내가 가장 좋아하는 도구는 Easy Profiler입니다. http://code.google.com/p/easyprofiler/

컴파일 시간 프로파일 러입니다. 소스 코드는 대상 지역을 설명하기 위해 루틴 세트를 사용하여 수동으로 계측해야합니다. 그러나 일단 응용 프로그램이 실행되고 측정 값이 XML 파일에 자동으로 기록되면 질적 차트에서 결과를보기 전에 Observer 응용 프로그램을 열고 분석 / 비교 도구를 몇 번만 클릭하면됩니다.


1

Windows에서 Visual Studio 2010 프로파일 러. VTune은 훌륭한 콜 그래프 도구를 가지고 있었지만 Windows Vista / 7에서는 고장났습니다. 그들이 그것을 고쳤는지 모르겠습니다.


0

EQATEC 용 플러그를 제공하겠습니다. 제가 찾던 것 ... 배우고 사용하기 쉽고 핫스팟을 빠르게 찾는 데 필요한 정보를 제공합니다. 나는 Visual Studio에 내장 된 것보다 훨씬 더 선호합니다 (공평하기 위해 아직 VS 2010을 시도하지는 않았지만).

스냅 샷을 찍는 능력은 엄청납니다. 실제 대상 분석이 실행되기를 기다리는 동안 추가 분석 및 최적화를 수행하는 경우가 많습니다.

아, 기본 버전은 무료입니다!
http://www.eqatec.com/Profiler/

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.