2016-06-28 2 views
1

저는 현재 cProfile을 사용하여 파이썬에서 프로파일 작업을하고 있습니다. documentation에서는 말한다 :왜 결정 론적 프로파일 러는 '결정 론적'이라고 불리는가?

cprofile 명령 및 프로파일이

프로파일 링하는 동안 파이썬 프로그램의 결정 프로파일을 제공, 나는 전체 프로그램뿐만 아니라 개별 기능 cprofile 명령과 약간 다른 결과가 계속. 괜찮 았는데, 적어도 그 이유 중 일부는 이해하고 있다고 생각합니다. 예를 들어 일부 OS 작업은 백그라운드에서 실행될 수 있고 프로그램이 느려질 수 있습니다. cProfile은 결국 CPU 시간이 아닌 실시간으로 작동합니다.

그러나 여전히 질문이 제기됩니다. 매번 같은 결과가 나오지 않으면 왜 결정 론적 프로파일 링이라고 불리는가?

+0

[문서를 아래로 스크롤하십시오.] (https://docs.python.org/2/library/profile.html#what-is-deterministic-profiling) – Pointy

+0

10 센트짜리 10 센트짜리 단어입니다. 개념. 그것은 측정이 당신이 * 가능한 속도 향상을 찾는데 도움이된다는 빈 가정에 기반하고 있습니다. 거기서부터 당신의 목표를 잊어 버리고 측정의 정확성 *에 집중하는 것은 바보 같은 발걸음 만 한 것입니다. 이 사이트의 많은 열심히 일하는 프로그래머들은 차이점을 알고 있습니다. [* 여기에 떠있는 열 가지 아이디어가 있는데 실제로 작동하는 것입니다.] (http://stackoverflow.com/a/1779343/23771) –

+0

10 달러 대 10 센트 :) 게시물, 첫눈에 흥미로운 것 같습니다. –

답변

0

문제는 documentation에 대한 답변 :

27.4.5합니다. 결정 성 프로파일이란 무엇입니까?

결정 론적 프로파일 링은 모든 함수 호출, 함수 반환 및 예외 이벤트를 모니터링하고 이러한 이벤트 사이의 간격 (사용자 코드가 실행되는 동안)에 대한 정확한 타이밍을 반영한다는 것을 의미합니다. 대조적으로, 통계적 프로파일 링 (이 모듈에 의해 수행되지 않음)은 유효 명령 포인터를 무작위로 샘플링하여 시간이 소비되는 곳을 추론합니다. 후자의 기술은 전통적으로 오버 헤드가 적으며 (코드를 인스트루먼트 할 필요가 없으므로) 시간이 소비되는 상대적인 표시 만 제공합니다.

파이썬에서는 실행 중에 인터프리터가 활성화되어 있기 때문에 인스트루먼트 된 코드가 있으면 결정적 프로파일 링을 수행 할 필요가 없습니다. 파이썬은 각 이벤트에 대해 자동으로 후크 (선택적 콜백)를 제공합니다. 또한, 파이썬의 해석 된 특성은 실행에 많은 오버 헤드를 추가하는 경향이 있으며, 결정 론적 프로파일 링은 일반적인 응용 프로그램에서 작은 처리 오버 헤드를 추가하는 경향이 있습니다. 결과적으로 결정 론적 프로파일 링은 비싸지는 않지만 Python 프로그램 실행에 대한 광범위한 실행 시간 통계를 제공합니다.

호출 횟수 통계는 코드의 버그를 식별하고 (놀라운 횟수) 가능한 인라인 확장 지점 (높은 호출 횟수)을 식별하는 데 사용할 수 있습니다. 내부 시간 통계는주의 깊게 최적화되어야하는 "핫 루프"를 식별하는 데 사용될 수 있습니다. 누적 시간 통계는 알고리즘 선택에서 높은 수준의 오류를 식별하는 데 사용해야합니다. 이 프로파일 러의 누적 시간을 비정상적으로 처리하면 알고리즘의 재귀 구현에 대한 통계를 반복 구현과 직접 비교할 수 있습니다.

즉, 일부 샘플링에 의존하지 않으며 동일한 조건에서 데이터를 재생해야 함을 의미합니다.

+0

아, 그래서 'deterministic'이라는 용어는 통계적 프로파일 러와 구별하기 위해 사용됩니까?나는 의미 론적 문제 일 뿐이라고 생각하지만, '결정 론적'프로파일 러가 동일한 입력에 대해 다른 결과를 반환 할 수 있다는 사실은 나에게 잘못된 길을 가르쳐 준다. cProfile이 실제 시간 대신 실제로 CPU 시간을 측정하는 것이 더 합리적입니다. 오 잘 .....하지만 어쨌든 답변 주셔서 감사합니다! –

관련 문제