C Profiler 권장사항
모든 사람들이 항상 최적화를 수행하기 전에 프로그램을 프로파일링하라고 말하지만, 그렇게 하는 방법을 설명하는 사람은 없습니다.
C 코드의 프로파일링 방법은 무엇입니까?
사용.gcc
, 컴파일 및 링크합니다.-pg
(예를 들어, 여기서 설명한 바와 같이) 프로그램을 실행하고(또한 해당 URL에서 제안된 원칙에 따라) 다음을 사용하여 계속 진행합니다.gprof
다른 컴파일러 & c 를 사용하고 있는 경우는, 툴은 다릅니다만, 그 경우에도, 코드의 프로파일 방법과 이유에 관한 일반적인 아이디어에 관한 부분은 URL 를 추천합니다.
문의해 주셔서 감사합니다:-) 반대로 괜찮으시다면 다음 답변을 확인해 주십시오.
간단히 설명하겠습니다.
프로그램이 당신을 기다리고 있나요, 아니면 당신은 그것을 기다립니까?그게 당신을 기다리게 하지 않는다면, 당신은 아무 문제가 없으니 그냥 두세요.
기다리셔야 할 것 같으면 계속하세요.
프로그램이 바쁠 때(기다리지 않을 때) 무엇을 하는지 스트로보 X-레이로 촬영하는 샘플링을 추천합니다.프로그램 카운터뿐만 아니라 적어도 콜스택의 샘플을 가져옵니다.프로그램 카운터의 샘플만 얻을 경우 프로그램이 I/O 또는 라이브러리 루틴에 상당한 시간을 할애하면 의미가 없으므로 이에 만족하지 마십시오.
샘플을 많이 구하려면 프로파일러가 필요합니다.몇 개만 필요한 경우 디버거의 일시 중지 버튼은 정상적으로 작동합니다.제 경험상 20개면 충분하고, 5개면 충분할 때가 많습니다.
왜요? 콜 스택의 샘플이 1000개 있다고 가정합니다.각 샘플은 스택 상의 모든 코드 행이 요구했기 때문에 소비되고 있는 벽시계의 시간을 나타내고 있습니다.따라서 1000개 중 557개의 샘플에 코드 행이 표시되어 있는 경우, 그 중 557/1000에 대한 책임이 있다고 가정할 수 있습니다(15개).즉, 전체 실행 시간에 100달러가 든다면, 그 라인 자체는 1.50달러** 정도의 비용이 들기 때문에 꼭 필요한지를 확인해야 합니다.
하지만 1000개의 샘플이 필요한가요?그 라인이 약 55.7%의 시간이 소요된다면, 10개의 샘플만 가져갔을 경우, 6개의 샘플에 1.5개의 샘플이 표시됩니다.따라서 샘플 10개 중 6개에 대한 명세서를 보면 100달러 중 45달러에서 75달러 정도 비용이 든다는 것을 알 수 있습니다.45달러밖에 안 들더라도 꼭 필요한지는 알고 싶지 않으세요?
그렇기 때문에 샘플이 많이 필요하지 않습니다.정확성도 많이 필요하지 않습니다.필요한 것은 스택 샘플이 제공하는 것입니다.최적화할 수 있는 가장 가치 있는 라인을 정확하게 나타냅니다.
** 는 ** 입니다sqrt( f * (1-f) * nsamp )
서 ''는f
라인이 포함된 샘플의 분율입니다.
완성을 위해 oprofile을 추가합니다.커널을 벤치마킹하고 싶다면 특히 흥미롭습니다.
Linux 를 사용하는 경우는 ValGrind 와 CallGrind 와 KCacheGrind 의 조합을 추천합니다.ValGrind는 메모리 누설을 검출하기 위한 뛰어난 방법이며 CallGrind 확장은 우수한 프로파일러가 됩니다.
메모: ValGrind는 이제 Mac OSX에서도 작동한다는 것을 방금 알았습니다.그러나 Call Grind와 KCache Grind는 2005년 이후 업데이트되지 않았습니다.다른 프런트 엔드를 살펴보는 것이 좋습니다.
Shark / Instruments(dtrace 사용)는 Mac에서 사용할 수 있는 프로파일러입니다.꽤 잘하는데.
Visual Studio Team System에는 우수한 프로파일러가 포함되어 있습니다.또, 인텔 VTune도 나쁘지 않습니다.
언급URL : https://stackoverflow.com/questions/1794816/recommendations-for-c-profilers
'IT' 카테고리의 다른 글
NumPy 어레이에서 N개의 최대값 인덱스를 가져오려면 어떻게 해야 합니까? (0) | 2023.01.01 |
---|---|
MYSQL / MariaDB - TokuDB...장치에 남은 공간 없음 (0) | 2023.01.01 |
Larabel 5+에서 클라이언트 IP 주소를 얻는 방법 (0) | 2023.01.01 |
v-model 및 하위 구성 요소 (0) | 2023.01.01 |
Java에서 로컬 변수 스레드가 안전한 이유 (0) | 2023.01.01 |