2016-08-11 2 views
0

나는 똑같은 일을하는 두 가지 다른 방법을 썼다. 어느 것이 더 빨리 실행되는지 비교하고 싶습니다. 물론 벤치 마크는 항상 가능하지만 프로그램 벤치 마크는 기계마다 다를 수 있으며 많은 외부 요인의 영향을받을 수 있습니다. 벤치 마킹없이 어느 것이 더 빠를지 어떻게 계산할 수 있습니까? 내 생각은 당신이 프로그램에서 수행 된 모든 작업의 ​​시간을 합산하는 것입니다. 이것은 표준적인 일입니까? 벤치마킹을 할 때 많은 오류가있는 것처럼 보입니다.프로그램의 이론적 인 속도를 계산 하시겠습니까?

+0

[알고리즘 복잡성] (https://en.wikipedia.org/wiki/Analysis_of_algorithms)에 대한 연구입니다. – Phylogenesis

+2

나는 루비 프로그램에서 각 작업이 어떻게 해석되는지, 어떤 객체가 만들어 지는지 등에 대한 깊은 지식이 필요하기 때문에 이것은 매우 어렵다고 생각한다. 많은 반복을 통한 벤치마킹이 최선의 방법이라고 생각합니다. – Albin

+0

또한 벤치마킹이 표준입니다. 맞습니까? – thesecretmaster

답변

3

제 생각에는 프로그램에서 수행 한 모든 작업의 ​​시간을 합산하는 것입니다.

예, 그렇지만 벤치마킹 이외의 다른 방법으로는 해당 시간을 쉽고 확실하게 파악할 수 없습니다.

문제는 이러한 시간이 이전에 프로그램에서 (또는 시스템 전체에서) 발생한 동적 컨텍스트에 달려 있다는 것입니다. CPU는 복잡한 짐승이며, 캐시 효과 (데이터 캐시 및 명령어 캐시)는 종종 중요한 요소입니다. 분기 예측도 마찬가지입니다. Why is it faster to process a sorted array than an unsorted array?

어셈블리 언어로 된 작은 루프의 정적 분석이 가능합니다. 예 : Agner Fog's microarchictecture pdf and instruction tables에 기반한 캐시 미스가 없다고 가정하면, 간단한 루프가 인텔 하스웰에서 실행할 수있는 반복 횟수를 정확하게 예측할 수 있습니다. 그 이상으로 가면 추측이 더 많이 포함됩니다.

Ruby와 같은 고급 해석 언어의 성능은 코드를 튜닝하는 데 많은 시간을 소비하는 전문가에게는 다소 예측할 수 있지만 "실제로는"이 마이크로 초의 숫자가 걸릴 것 "이 아니라"이것은 아마도 조금이나 그보다 훨씬 빠르다. "

2

알고리즘의 복잡성은 알고리즘에 대한 이론적 인 속도 비교를 제공합니다.

귀하의 질문은 임의의 프로그램에 관한 것이지만 프로그램은 알고리즘 모음 이상입니다.

프로그램의 실행 속도는 실행중인 컨텍스트 (I/O, 운영 체제 (멀티 태스킹 여부), 하드웨어)에 따라 다릅니다.

따라서 벤치 마크에 대한 정의 인 측정 값에 대한 통계 이외의 다른 방법은 없습니다.

관련 문제