2012-08-14 2 views

답변

1

내가 명명 된 프로파일에 익숙하지 않아요하지만 프로파일 링에 대한 두 가지 방법이 있습니다 :

계측는,이 방법은 일반적으로 예를 들어, 자바, 항상 (재 컴파일이 필요하며 닷넷 응용 프로그램은 동적으로 계측 할 수있다). 이 메소드를 사용하여 루틴이 호출되는 빈도 또는 특정 루프가 얼마나 많은 반복을 하는지를 정확하게 측정 할 수 있습니다.

샘 플링은 다시 컴파일 할 필요가없는 방법으로, 일정 간격으로 스택의 스냅 샷을 찍는 것입니다. 이것은 병목 현상을 찾는 효과적인 방법임이 입증되었습니다.

두 가지 전략에 대한 추가 정보가 있습니다 here

1

저는 Valgrind와 gprof에서 최소한 말할 수 있습니다.

둘을 사용하는 것의 주된 차이점은 기본적으로 이미 말한 것입니다. gprof의 경우 프로파일 링 코드를 포함하도록 특별히 컴파일해야합니다. 그런 다음 실행 파일을 실행하면 (프로그램에 내장되어 있으므로) 프로파일 링 코드가 실행되고 gprof로 처리 할 수있는 gmon.out 파일이 생성되어 프로그램의 런타임 통계를 보여줍니다.

Valgrind는 프로그램을 특별한 방법으로 컴파일 할 필요가 없다는 점에서 다릅니다 (출력을 유용하게하려면 디버그 기호를 추가하는 것을 제외하고). Valgrind는 시뮬레이션 된 CPU에서 실행되는 내부 형식으로 프로그램을 동적으로 변환합니다 (은 느림 임). 즉, 특정 컴파일 작업없이 Valgrind를 통해 모든 프로그램을 실행할 수 있습니다.

또 다른 중요한 차이점은 Valgrind가 gprof보다 훨씬 많은 정보를보고 할 수 있다는 점입니다.하지만이 정보는 gprof와는 관련이 없습니다.

0

프로파일 링 기술은 기호 테이블 정보를 필요로하므로 컴파일 및 링크시 요청해야합니다.

이외에도 일부 프로파일 러는 기록 기능 유지 루틴을 컴파일 링하여 각 기능의 시작 부분과 끝 부분을 컴파일함으로써 작동합니다. 이러한 함수는 함수에서 사용한 시간과 호출 한 위치의 일부 레코드를 기록하려고 시도 할 수 있습니다. 타이밍 기능은 해당 녹음 기능을 호출하는 오버 헤드로 인해 정확하지 않습니다.

다른 프로파일 러는 호출 스택의주기적인 샘플에 의존하지 않고이를 수행 할 필요가 없습니다. 이러한 프로파일 러는 낮은 오버 헤드를가집니다. 타이밍 수치는 샘플링의 통계적 특성으로 인해 정확하지 않습니다.

이 점에있어서 암시 적으로 "병목 현상"을 찾아내는 데 타이밍의 정확성이 필요하며 이는 내 지식으로는 결코 사실이 아니 었습니다. method I've always used은 시간이 얼마나 걸리는지보다는 시간을 소비하면서 프로그램이 무엇을하는지에 대한 통찰력에 의존합니다. 통계적 근거에 관심이 있다면 look here 수 있습니다.

관련 문제