지금까지 저는 Rational Quantify 만 사용했습니다. Intel의 VTune에 대해 좋은 소식을 들었지만 사용해 본 적이 없습니다!
편집 : 나는 대부분 코드를 계측 할 소프트웨어를 찾고 있는데, 이것이 매우 훌륭한 결과를 얻는 유일한 방법이라고 생각합니다.
지금까지 저는 Rational Quantify 만 사용했습니다. Intel의 VTune에 대해 좋은 소식을 들었지만 사용해 본 적이 없습니다!
편집 : 나는 대부분 코드를 계측 할 소프트웨어를 찾고 있는데, 이것이 매우 훌륭한 결과를 얻는 유일한 방법이라고 생각합니다.
답변:
Linux 개발 용 (일부 도구는 다른 플랫폼에서 작동 할 수 있음) 이것들은 내가 아는 두 가지 큰 이름입니다. 한동안 활발한 발전을 보지 못한 다른 작은 이름이 많이 있습니다.
Linux : Google Perftools
IMHO, 디버거를 사용한 샘플링 이 가장 좋은 방법입니다. 프로그램을 중지 할 수있는 IDE 또는 디버거 만 있으면됩니다. 프로파일 러를 설치하기 전에 성능 문제를 해결합니다.
나는 전에 프로파일 링을 한 적이 없습니다. 어제 저는 시간 저장을 위해 정적 타임 테이블 (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");
이 줄은 어떤 기능이 많은 시간이 걸리는지 추측해야하므로 프로파일 링하려는 모든 기능을 추가하기에는 약간 번거 롭습니다. 그러나 그것은 잘 작동하고 인쇄 기능은 소비 시간을 %로 표시합니다.
(비슷한 "집에서 만든 프로파일 링"으로 작업하는 다른 사람이 있습니까? 아니면 그냥 어리석은 일입니까?하지만 재미 있습니다! 개선 제안이있는 사람이 있습니까?
모든 기능에 자동으로 행을 추가하는 것이 있습니까?)
Visual Studio 2008 의 프로파일 러 는 매우 훌륭합니다. 빠르고 사용자 친화적이며 명확하며 IDE에 잘 통합되어 있습니다.
작업중인 플랫폼에 대해 언급하지 않았으므로 Linux에서 cachegrind라고 말씀 드리겠습니다. 명확히. Valgrind 도구 세트의 일부입니다.
http://valgrind.org/info/tools.html
내 코드 최적화의 대부분은 내부 함수를 위한 것이기 때문에 하위 기능인 Callgrind를 사용한 적이 없습니다 .
사용 가능한 프론트 엔드 KCachegrind가 있습니다.
Windows 개발을 위해 저는 Software Verification의 Performance Validator를 사용 하고 있습니다. 빠르고 합리적으로 정확하며 합리적인 가격입니다. 가장 좋은 점은 실행중인 프로세스를 계측 할 수 있으며 수동 및 호출 스택을 기반으로 런타임시 데이터 수집을 켜고 끌 수 있다는 점입니다. 대규모 프로그램의 작은 섹션을 프로파일 링하는 데 적합합니다.
Windows의 경우 Visual Studio Team Edition에서 AMD Codeanalyst, Intel VTune 및 프로파일 러를 사용해 보았습니다.
Codeanalyst는 버그가 많고 (자주 충돌 함) 내 코드에서 결과가 종종 부정확합니다. UI가 직관적이지 않습니다. 예를 들어, 프로필 결과에서 호출 스택 디스플레이에 도달하려면 "프로세스"탭을 클릭 한 다음 프로그램의 EXE 파일 이름을 클릭 한 다음 작은 글자 "CSS"가있는 도구 모음 단추를 클릭해야합니다. 그러나 프리웨어이므로 시도해 볼 수 있으며 AMD 프로세서 없이도 작동합니다 (더 적은 기능으로).
VTune (700 달러)에는 끔찍한 사용자 인터페이스 IMO가 있습니다. 큰 프로그램에서는 원하는 특정 호출 트리를 찾기가 어렵고 프로그램에서 한 번에 하나의 "노드"만 볼 수 있습니다 (즉시 호출자와 피 호출자가있는 함수). 콜 트리. 콜 그래프보기가 있지만 상대적 실행 시간을 그래프에 표시하는 방법을 찾을 수 없습니다. 즉, 그래프의 함수는 시간이 얼마나 소요되었는지에 관계없이 동일하게 보입니다. 마치 프로파일 링 지점을 완전히 놓친 것처럼 보입니다.
Visual Studio의 프로파일 러는 세 가지 중 최고의 GUI를 가지고 있지만 어떤 이유로 대부분의 코드에서 샘플을 수집 할 수 없습니다 (샘플은 전체 C ++ 프로그램에서 몇 가지 기능에 대해서만 수집됩니다). 또한 직접 구매할 가격이나 방법을 찾을 수 없었습니다. 그러나 그것은 우리 회사의 MSDN 구독과 함께 제공됩니다. Visual Studio는 관리, 네이티브 및 혼합 코드를 지원합니다. 그 점에서 다른 두 프로파일 러에 대해서는 잘 모르겠습니다.
결론적으로 나는 아직 좋은 프로파일 러를 모른다! 여기에서 다른 제안을 확인하겠습니다.
저는 Windows 및 Linux에서 VTune을 수년 동안 사용하여 매우 좋은 결과를 얻었습니다. 이후 버전은 해당 제품을 러시아 개발 팀에 아웃소싱했을 때 품질과 성능이 모두 떨어졌습니다 (VTune 충돌 증가, 종종 분석 파일을 여는 데 15 분 이상 소요됨).
계측과 관련하여 생각보다 유용하지 않다는 것을 알 수 있습니다. 내가 작업 한 애플리케이션의 종류에서 계측을 추가하면 종종 제품 속도가 너무 느려져 더 이상 작동하지 않습니다 (실화 : 앱 시작, 집에 가기, 다음 날 돌아 오기, 앱 초기화 중). 또한 계측되지 않은 프로파일 링을 사용하면 실제 문제에 대응할 수 있습니다. 예를 들어 VTune 원격 날짜 수집기를 사용하면 성능 문제가 발생하는 수백 개의 동시 연결이있는 라이브 서버에 대해 샘플링 세션을 시작하고 테스트 환경에서 복제 할 수없는 프로덕션에서 발생하는 문제를 포착 할 수 있습니다.
내가 가장 좋아하는 도구는 Easy Profiler입니다. http://code.google.com/p/easyprofiler/
컴파일 시간 프로파일 러입니다. 소스 코드는 대상 지역을 설명하기 위해 루틴 세트를 사용하여 수동으로 계측해야합니다. 그러나 일단 응용 프로그램이 실행되고 측정 값이 XML 파일에 자동으로 기록되면 질적 차트에서 결과를보기 전에 Observer 응용 프로그램을 열고 분석 / 비교 도구를 몇 번만 클릭하면됩니다.
EQATEC 용 플러그를 제공하겠습니다. 제가 찾던 것 ... 배우고 사용하기 쉽고 핫스팟을 빠르게 찾는 데 필요한 정보를 제공합니다. 나는 Visual Studio에 내장 된 것보다 훨씬 더 선호합니다 (공평하기 위해 아직 VS 2010을 시도하지는 않았지만).
스냅 샷을 찍는 능력은 엄청납니다. 실제 대상 분석이 실행되기를 기다리는 동안 추가 분석 및 최적화를 수행하는 경우가 많습니다.
아, 기본 버전은 무료입니다!
http://www.eqatec.com/Profiler/