2011-02-26 2 views
1

이것은 Windows XP 및 Java 1.6.0_07이 포함 된 듀얼 코어 Athlon II에 있습니다. 몇 가지 스레드를 사용하여 계산을 수행하는 벤치 마크 프로그램이 있으며 실행하는 데 10 초가 걸립니다.듀얼 코어 프로세서에서 다른 프로그램이 동시에 실행되는 경우 프로그램이 더 빠르게 실행됩니다!

데모 용으로 스레드를 사용하지 않고 동일한 계산을 수행하는 다른 프로그램이 있습니다. Math.cos()를 호출하는 메서드를 호출하는 루프를 사용하면 매우 간단합니다. 이것이 실행되면 java.exe는 CPU의 50 %를 사용하고 시스템 유휴 프로세스는 50 %를 사용합니다. 내가 예상했던대로. 하지만 예상했던대로 약 20 초 정도 걸리는 대신 30 초 정도 걸립니다. 작업 관리자는 각 코어의 사용률이 약 50 %임을 보여줍니다.

두 개의 명령 프롬프트 창을 열고 각각 두 번째 프로그램을 실행하면 두 프로세스가 동시에 실행되고 약 19 초 걸립니다. 각 코어의 사용량은 100 %입니다.

하나의 프로그램 만 실행 중일 때 스케줄러는 컨텍스트 전환시 사용할 코어와 시간의 1/3을 결정할 수 없습니다.

내 질문에 :이 일이 발생할 것으로 기대하거나, 어떤 종류의 잘못된 구성을 나타 냅니까?

실험이 이상한 결과를 공개 할 수 있다는 사실이다 UPDATE. 여기에 대한 답변 (및 링크 된 기사)은 매우 유용했습니다. 왜냐하면 내가 더 큰 그림이 아닌 세부 사항에 집중했기 때문입니다.

질문을 한 결과,이 특별한 경우는 프로세서가 완전히로드되지 않은 경우 클럭 속도를 줄이는 전원 관리 소프트웨어와 관련이 있음을 발견했습니다. 이것은 다중 스레드를 사용하지 않는 프로그램에 불이익을줍니다.

+0

실제 응답은이 유형의 마이크로 벤치마킹을 수행 할 때 이상한 결과가 나타날 것으로 예상해야한다는 것입니다. –

+0

당신은 그것이 일어날 것을 "기대"하지 않아도된다고 이미 말했습니다. – Cosmin

답변

0

조슈아 블로흐 (Joshua Bloch)가 이런 종류의 벤치 마크에 어려움을 겪고있는 것에 대해 큰 대화가 있습니다. http://java.dzone.com/articles/joshua-bloch-performance

일반 결론 : 여기를 요약 한 기사가 (너무이 이야기에 대한 링크있다)의 프로세서와 VM이 복잡하고 예측할 수없는 최적화 모든 종류의 수행이는 것과 같은 직관적 방법에 벤치 마크에 영향을 미치는 너는 설명했다. 특정 경우에는 시스템의 엄청난 복잡성으로 인해 무엇이 예외인지를 판단 할 수있는 방법이 없습니다. 성능을 향상시키는 유일한 방법은 벤치 마크 데이터의 실험 및 통계 분석을 사용하는 것입니다.

관련 문제