나는 소음과 계산을 제거하여 내 코드의 특정 부분을 (Callgrind로) 프로파일 링하려고합니다. 여기 내가 뭘 원하는지의 예입니다Callgrind : 내 코드의 특정 부분 프로필 작성
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
//Method to be profiled with these data
//Post operation on the data
}
내 사용 사례는 회귀 테스트, 난 문제의 방법 미만 10 % 추가와 같은 (일이 충분히 빨리 여전히이 있는지 확인하려면 마지막 구현 이후 지침). 이 때문에 Callgrind 출력 형식을보다 깨끗하게하고 싶습니다. 는
내 첫 번째 시도가 코드를 변경하는 것이 었습니다 (나는 프로필하려는 방법의 행동의 좋은 평가를하기 위해 처리 상당한 양의 데이터를하기 위해 루프를 필요) :
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_START_INSTRUMENTATION;
//Method to be profiled with these data
CALLGRIND_STOP_INSTRUMENTATION;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
계측을 제어하기위한 Callgrind 매크로 추가. 또한 --instr-atstart = no 옵션을 추가하여 필자가 원하는 코드의 일부만 프로파일 링하도록했습니다 ...
불행하게도이 구성은 callgrind를 사용하여 실행 파일을 시작할 때 끝나지 않습니다. ... 느린 문제는 아닙니다. 1 분 이내에 전체 계측을 실행해야하기 때문입니다.
가 나는 또한
for (int i=0; i<maxSample; ++i) {
//Prepare data to be processed...
CALLGRIND_TOGGLE_COLLECT;
//Method to be profiled with these data
CALLGRIND_TOGGLE_COLLECT;
//Post operation on the data
}
CALLGRIND_DUMP_STATS;
(또는 --toggle-수집 = "MyMethod라는"옵션) 을 시도하지만 Callgrind 어떤 전화없이 나에게 로그를 반환 (KCachegrind는 :(눈처럼 흰색과 제로 지침을 말한다 ...)
내가 올바르게 매크로/옵션을 사용 했습니까? 내가 예상 된 결과를 얻기 위해 변경할 필요가 무엇인지 어떤 생각을?
계측을 시작하거나 중지하지 않으시겠습니까? – Paschalis
@Paschalis start/stop은 stop을 호출 할 때마다 새로운 덤프를 생성합니다. 하나의 단일 보고서에서 집계를 가져 오려면 토글을 사용하는 것이 좋습니다 (기본적으로 활성/비활성 계측을 넘김). – joetde
@joetde 응답에 감사드립니다. callgrind 나 다른 도구의 콜백/매크로가 호출되지 않는 문제에 직면했기 때문에 물었습니다. 기타 [여기] (http://goo.gl/08OM3c)! – Paschalis