2008-09-16 6 views
7

그 성능이 단지 몇 가지 기능에 크게 의존하는 프로그램을 가지고 있고 단일 루프 또는 코드 세그먼트의 속도를 단일 클럭 정밀도까지 측정하여 변경 사항이 실제로 개선되고 있는지 여부를 알 수 있기를 원하는 프로그램은 일반적이지 않습니다. 성능이나 내가 "낙관적 인"코드의 위약에 떨어지는 지 여부에 따라 달라질 수 있습니다.좋아하는 저수준 프로파일 링 도구는 무엇입니까?

저는 직접 ffmpeg의 "bench.h"을 사용합니다.이 매크로는 시계 시간을 측정하기 위해 rdtsc를 사용하고 컨텍스트 스위치 등을 자동으로 보정하는 C 매크로 세트입니다. 물론이 접근법에는 자체 약점이 있습니다. StackOverflow 사용자가 사용하는 다른 저수준 프로파일 링 메소드는 무엇입니까?

답변

2

지금은 저수준 프로그래밍을하지 않지만, 그렇게했다면 나는 확실히 dtrace을 조사 할 것입니다. 내가 읽은 바로는 매우 흥미로웠다. OS X 사용자의 경우 shark도 있습니다.

0

valgrind은 유닉스 기반 시스템에서 가장 많이 사용되는 도구입니다.

0

주요 문제는 벤치마킹을 컴파일 할 때 구현 방법 및시기에 따라 결과를 잠재적으로 수정할 수 있다는 것입니다. 그리고 저수준의 것들을 사용하면 아마도 컴파일러의 최적화에 크게 영향을받을 것입니다.

리눅스에서는 개인적으로 oprofile (oprofile)에 대한 부드러운 점이 있습니다.이 정보는 커널 모듈로 포함 된 시스템 전반의 프로파일 러이며 주기적으로 응용 프로그램이 소요되는 시간을 추적합니다. 따라서 이것은 하나의 응용 프로그램뿐만 아니라 전체 시스템을 프로파일 링합니다. 그러나 그것은 당신에게 충분한 세분화를 제공하지 않을 수 있습니다.

0

프로파일 링을 위해 코드를 계측하지 말 것을 권합니다. 내가 제공 할 수있는 가장 좋은 대답은 인텔의 PTU (성능 튜닝 유틸리티)을 사용하는 것입니다. 여기에서 찾을 수 있습니다 :

이 유틸리티는 VTune의 직계 후손이며 사용 가능한 최상의 샘플링 프로파일 러를 제공합니다. CPU 사용량 또는 사용 가능한 하드웨어 이벤트의 도움으로 시간 낭비를 추적 할 수 있으며 응용 프로그램이 느려지거나 프로필이 불안정하지 않습니다.

1

Valgrind의 이미 언급되어 있지만 callgrind 도구에 특히 유용하다 :

$ valgrind --tool=callgrind your_program 

는 그런 다음 데이터를 시각화하는 KCacheGrind를 사용할 수 있습니다. Linux의 경우

0

: Google Perftools

  • Valgrind의보다 빠르게 (아직 그레인 그렇게 잘되지 않음)
  • 코드 수단을 필요로하지 않습니다
  • 멋진 그래픽 출력 (-> kcachegrind)
  • 합니까 메모리 프로파일 링, CPU 프로파일 링, 누설 검사
0

좋아, -spot 상황 - 많은 시간을 차지하고 함수 호출을 포함하지 않는 고정 루프입니다.

변경 사항이 효과가 있는지 알고 싶습니다.여기

내가 할 것이 무엇 :

  • 만들기 위해 변경을 확인하려면보다 빠르고, 두 가지 방법, 골 간단 : 내부 루프를 통해

1) 단일 단계 그것이하고있는 일과 그 이유를 정확히 알 수 있습니다. 기회가 꽤 좋았습니다. 나는 더 잘할 수있는 몇 가지 것을 볼 것입니다.

및/또는

2) 큰 외부 루프에서 실행 한 다음 수동으로 중단 가져옵니다. 이것을 여러 번하십시오. 가장 많은 시간을 차지하는 지침/진술은 비용에 비례하여 샘플에 나타납니다.

  • 내가 어떤 차이
    , 다른 뼈 간단한 기술했다면 말할 : 외부 루프에

실행이 억 시간과 초를 계산합니다. 이는 내부 루프가 얼마나 많은 나노초를 사용 하는지를 알려줍니다.