2012-12-01 3 views
1

Win64 용 Eclipse 3.7 버전 JavaEE를 설치 한 다음 매뉴얼 버전 1.2에서 Ateji 설치 지침을 따랐습니다.Ateji 속도 향상 예기치 않은 결과를 반환합니다.

결과 I는 위해 고속화 예를 실행 얻을 I = J = 100,000 :

PERFORMANCE COMPARISON BETWEEN SEQUENTIAL AND PARALLEL COMPREHENSIONS 

sequential sum: 
    `+ for (int i : I, int j : J) (i*j); 
parallel sum: 
    `+ for || (int i : I, int j : J) (i*j); 
data size : I = 100000; J = 100000 

Wait for the result... 
sequential sum: mean time = 202 ms; standard deviation = 1 ms; (8473 8460 203 202 202 204 203 202 205 202 203 202 203 204 203 202 204 202 203 203) 
parallel sum: mean time = 2017 ms; standard deviation = 961.311 ms; (1787 1800 1790 1847 1457 1442 1698 1457 1455 1439 1467 4083 3239 1461 1458 1469 1470 1469 3077 4311) 

Speed up = 0.10014873574615767 
Available processors = 8 

프로세서 활동 내 모니터가 4 개 코어 실제로 병렬 작업에 사용되는 것을 나타낸다. hello world 예제가 작동합니다 ("hello"및 "world"가 임의 순서로 인쇄됩니다). Ateji 설명서의 문제 해결 섹션을 확인했는데 모두 맞습니다 (JDK 및 JRE 1.7을 사용했습니다)

어디에서 문제가 발생했을 수 있습니까? 감사!

답변

3

이 놀라운 결과는 마이크로 벤치 마크에 의존해서는 안된다는 것입니다. 제 4 코어 노트북에

, 나는 Java6 VM (1.6.0_22-B04 핫스팟 (TM) 64 비트 서버)로 예상되는 속도 향상을 얻을 수 :

sequential sum: mean time = 383 ms; standard deviation = 83,319 ms; 
parallel sum: mean time = 114 ms; standard deviation = 22,271 ms; 
Speed up = 3.3596491228070176 

동일한 시스템에를, 내가 얻을 당신이 Java7 VM (1.7.0_03-B05 핫스팟 (TM) 64 비트 서버)로 언급 놀라운 결과 : 순차적 인 시간이 두 개의 VM 버전 사이에 50 배 구분 된 방법

sequential sum: mean time = 7 ms; standard deviation = 0 ms; 
parallel sum: mean time = 69 ms; standard deviation = 10,863 ms; 
Speed up = 0.10144927536231885 

주의! !! !! 이것은 강력한 최적화가 시작된 신호입니다.

단순한 대수학으로 합계 결과를 정적으로 표현할 수 있으므로 영리한 VM은 아무런 계산도 수행하지 않을 수 있습니다 (시간 = 0ms). 표현. 동일한 최적화를 배제하는 코드의 병렬 버전에는 무언가가 있어야합니다. 따라서 과장된 결과가 나타납니다.

사실, 당신은보다 현실적인로 요약 식을 변경하는 경우

합 멀리 최적화 할 수 있도록 피가수은 다음에 맞춰 속도 향상 결과를 더 얻을, 입력 배열에서 가져
`+ for (int i : I, int j : J) (x[i]*y[j]) 

기대 :

JRE6

sequential sum: mean time = 436 ms; 
parallel sum: mean time = 156 ms; standard deviation = 35,086 ms; 
Speed up = 2.7948717948717947 

JRE7

sequential sum: mean time = 163 ms; standard deviation = 4 ms; 
parallel sum: mean time = 78 ms; standard deviation = 15,362 ms; 
Speed up = 2.08974358974359 

속도 향상 수치가 낮 으면 x 및 y 배열에 동시에 액세스 할 수 있습니다. 각 코어에 대해 배열의 로컬 사본을 사용하면 원래 예제처럼 속도가 4에 가까울 수 있습니다.

패트릭