2011-05-04 6 views
3

두 경우 모두 동일한 데이터 세트를 사용하여 실제 알고리즘의 두 가지 구현에서 일반적인 "A/B 테스트"와 같은 방식으로 접근하려고합니다. 이 알고리즘은 실행 측면에서 결정적이므로 결과를 반복 할 수있을 것으로 기대합니다.i7에서 Java 성능을 측정하는 방법은 무엇입니까?

코어 2 듀오에서도 마찬가지입니다. linux "time"명령을 사용하면 약 0.1 % (10 회 이상 실행)의 실행 시간이 다양해집니다.

i7에서 모든 종류의 변형을 얻을 수 있으며 평균에서 30 %의 변형을 쉽게 얻을 수 있습니다. 나는 이것이 i7이하는 다양한 CPU 최적화 (동적 오버 클럭킹 등)로 인한 것이라고 생각하지만, 실제로 이런 종류의 테스트를하기가 어렵습니다. 2 가지 알고리즘 중 "가장 좋은"알고리즘, 사용할 수있는 다른 유용한 메트릭스를 결정하는 다른 방법이 있습니까?

편집 : 알고리즘은 매우 오래 지속되지 않으며 실제로 벤치마킹하려는 실제 시나리오입니다. 반복적으로 달리기는 실제로 그런 선택 사항이 아닙니다.

+0

이러한 CPU 최적화를 비활성화 할 수 있습니까? 아마도 커스텀 커널을 컴파일하거나/proc 플래그를 설정하는 것일까? –

답변

3

BIOS에서 동적 오버 클러킹을 해제 할 수 있는지 확인하십시오. 또한 벤치마킹을 수행 할 때 실행 가능한 다른 모든 프로세스도 실행하십시오.

+0

아, 그래, 한 가지만 잊었습니다. 벤치마킹에서 네트워크 통신을 사용하지 않는 경우 벤치 마크를 실행하기 전에 NIC를 비활성화하고 재부팅하십시오. – Christo

1

알고리즘의 성능을 결정할 때 O 표기 원칙을 사용할 수 있습니다. 이것은 알고리즘의 이론적 인 속도를 결정합니다. 다음은 시스템의 벤치 마크를해야 OFC

http://en.wikipedia.org/wiki/Big_O_notation

당신이 절대적으로 alogorithm의 실제 속도를 알고해야합니다. 그러나 O 표기법을 사용하면 모든 것을 지나서 볼 수 있으며 중요한 요인/변수에만 집중할 수 있습니다.

0

벤치마킹 방법을 명시하지 않았습니다. 아직 읽지 않은 경우이 내용을 읽어 볼 수 있습니다. How do I write a correct micro-benchmark in Java?

지속적인 테스트를 진행중인 경우 동적 클럭킹이 유사 콘텐츠를 유발하는지 의심 스럽습니다. 최대 터보 속도로 유지되어야합니다. 너가 너무 오랫동안 그것을 달리고 있으면 아마 열을 위해 하나의 승수가 될 것이다. 나는 그것이 의심스럽지 만, 당신이 과도한 시간을 보내지 않고 열 봉쇄 근처에있다면.

하이퍼 스레딩 역할을 맡을 수 있습니다. BIOS에서 해당 설정을 비활성화하고 숫자에 차이가 있는지 확인할 수 있습니다.

+0

이것은 마이크로 벤치 마크가 아닙니다. 실제 계산이지만 너무 오랫동안 지속되지 않습니다. 이것은 내가 벤치마킹하고자하는 것입니다 – krosenvold

+0

아마 아마도 동적 클럭킹이 당신에게 영향을 미치고있을 것입니다. 그것들을 배제하기 위해 하이퍼 - 스레딩을 비활성화해야하는 것 같습니다. 보다 일관된 결과를 얻기 위해 오랫동안 지속하기 위해 (100 배와 같은) 계산을 반복 할 수없는 이유가 있습니까? – WhiteFang34

0

리눅스에서는 클럭 속도 변동을 막기 위해 CPU 속도를 잠글 수 있습니다. ;)

가능한 한 현실적인 벤치 마크를 만들어야합니다. 예를 들어 알고리즘을 평평하게 실행하고 평균을 취하면 10ms마다 동일한 작업을 수행하는 것과 매우 다른 결과가 발생할 수 있습니다. 즉, 클럭 속도가 잠겨 있어도 플랫 아웃과 상대적으로 낮은로드 사이에서 2 배에서 10 배까지의 변화를 보았습니다.

관련 문제