라즈베리 파이의 성능이 오픈 JDK와 오라클 JDK 사이에 그렇게 차이가 나는 이유는 무엇입니까?
저는 라즈베리에서 두 개의 JVM으로 CaffinMark와 SciMark와 같은 성능 테스트를 했습니다.차이가 아주 작다고 들었는데도 성능 차이가 많이 납니다.저는 또한 부동소수로 계산을 시도했고 Oracle JDK는 둘 다 하드 부동소수를 지원해야 함에도 불구하고 더 나은 점수를 받았습니다.
사용합니다Linux raspberrypi 3.18.11-v7+
OS로서
OpenJDK:
java version "1.7.0_79"
OpenJDK Runtime Environment (IcedTea 2.5.5) (7u79-2.5.5-1~deb7u1+rpi1)
OpenJDK Zero VM (build 24.79-b02, mixed mode)
OracleJDK:
java version "1.7.0_40"
Java(TM) SE Runtime Environment (build 1.7.0_40-b43)
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode)
SciMark results:
OpenJDK OracleJDK
Composite Score 14.280735577363213 || 32.24948180361924
FFT (1024) 9.482866845055302 || 26.447121360843663
SOR (100x100) 27.14938943220646 || 59.68022533004399
Monte Carlo 3.6298604956147384 || 10.561671865446971
Sparse matmult 15.603809523809524 || 26.64931580928407
LU (100x100) 15.53775159013005 || 37.90907465247749
저는 플로트를 600000까지 0.1단계로 세는 프로그램을 사용했습니다.플로트 처리 시 JVM의 성능을 테스트해 보았습니다.
OpenJDK: 257ms
Oracle JDK: 151ms
1200000까지 0.1단계:
OpenJDK: 457ms
Oracle JDK: 263ms
public class Testing {
/**
* @param args
*/
public static long Test()
{
float counter=0.0f;
long startTime = System.currentTimeMillis();
while (counter <= 1_200_000.0f)
{
counter += 0.1f;
}
return System.currentTimeMillis() - startTime;
}
public static void main(String[] args){
System.out.println(Test());
}
}
저는 SlickySeal에서 언급한 개선사항을 시도해보고 테스트를 루프에 넣었습니다.저도 c2 컴파일러를 사용해 보았지만 결과는 다르지 않았습니다.
OpenJDK Zero VM은 인터프리터 전용 JVM입니다.한편으로는 아키텍처별 어셈블리 코드가 없기 때문에 이식하기가 더 쉽지만 다른 한편으로는 아키텍처별 어셈블리 코드가 없기 때문에 성능이 떨어집니다.
Oracle JDK는 플랫폼의 부동 소수점 ABI(RP1의 소프트 플로트 및 RP2의 하드 플로트)를 활용합니다.ARM 아키텍처에 특화된 상당한 양의 어셈블리 코드를 가지고 있다는 것을 짐작할 수 있으며, 그것이 더 나은 점수를 받는 이유입니다.
LLVM 기반의 샤크라는 JIT 컴파일러는 일찍이 OpenJDK Zero VM에 도입되었습니다.당신의 시스템의 OpenJDK가 Shark로 빌드되었는지는 모르겠지만 아마 그럴 것입니다.어셈블리 코드가 없는 것과 효율적인 네이티브 코드를 계속 실행하는 것 사이의 절충점을 제공합니다.Shark가 활성화되지 않은 경우 Shark가 활성화된 Iceed Tea를 구축하면 성능이 향상됩니다.Shark가 활성화된 경우 OpenJDK가 많이 빨리지 않는 이유입니다.
2018년 4월 업데이트입니다.
저는 Raspbian Stretch와 함께 Raspy Pi 3에서 Java Wethstone 오프라인 벤치마크를 실행합니다.소스 코드는 파일에서 찾을 수 있습니다.Raspberry_Pi_Benchmarks/java/source code/whetstone-off-line/whetstc.java
.
결론적으로 openjdk-9-jre는 openjdk-8-jre(테스트된 버전 1.8.0_162)보다 빠르며 이는 oracle-java8-jdk(테스트된 버전 1.8.0_65)보다 빠릅니다.또한 Oracle-java8-jdk와 함께 이전 커널을 사용했습니다.
Raspbian 저장소에서 openjdk-9-jdk:
$ java -version
openjdk version "9-Raspbian"
OpenJDK Runtime Environment (build 9-Raspbian+0-9b181-4bpo9rpt1)
OpenJDK Server VM (build 9-Raspbian+0-9b181-4bpo9rpt1, mixed mode)
$ java whetstc
Whetstone Benchmark Java Version, apr. 26 2018, 23:15:40
1 Pass
Test Result MFLOPS MOPS millisecs
N1 floating point -1,124750137 333,22 0,0576
N2 floating point -1,131330490 293,19 0,4584
N3 if then else 1,000000000 185,95 0,5566
N4 fixed point 12,000000000 412,95 0,7628
N5 sin,cos etc. 0,499110132 22,40 3,7140
N6 floating point 0,999999821 212,70 2,5360
N7 assignments 3,000000000 105,66 1,7490
N8 exp,sqrt etc. 0,825148463 16,70 2,2280
MWIPS 829,02 12,0624
Operating System Linux, Arch. arm, Version 4.14.34-v7+
Java Vendor Oracle Corporation, Version 9-Raspbian
CPU null
Raspbian 저장소에서 openjdk-8-jdk:
$ java -version
openjdk version "1.8.0_162"
OpenJDK Runtime Environment (build 1.8.0_162-8u162-b12-1~deb9u1-b12)
OpenJDK Client VM (build 25.162-b12, mixed mode)
$ java whetstc
Whetstone Benchmark Java Version, Apr 27 2018, 13:13:26
1 Pass
Test Result MFLOPS MOPS millisecs
N1 floating point -1.124750137 181.82 0.1056
N2 floating point -1.131330490 175.92 0.7640
N3 if then else 1.000000000 88.61 1.1680
N4 fixed point 12.000000000 389.85 0.8080
N5 sin,cos etc. 0.499110132 9.35 8.8980
N6 floating point 0.999999821 76.27 7.0720
N7 assignments 3.000000000 275.82 0.6700
N8 exp,sqrt etc. 0.825148463 7.15 5.2060
MWIPS 405.00 24.6916
Operating System Linux, Arch. arm, Version 4.14.34-v7+
Java Vendor Oracle Corporation, Version 1.8.0_162
CPU null
Raspbian 저장소의 oracle-java8-jdk:
$ java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) Client VM (build 25.65-b01, mixed mode)`
$ java whetstc
Whetstone Benchmark Java Version, Nov 15 2017, 11:16:37
1 Pass
Test Result MFLOPS MOPS millisecs
N1 floating point -1.124750137 91.52 0.2098
N2 floating point -1.131330490 89.01 1.5100
N3 if then else 1.000000000 44.27 2.3380
N4 fixed point 12.000000000 229.76 1.3710
N5 sin,cos etc. 0.499110103 3.01 27.6400
N6 floating point 0.999999821 44.95 12.0000
N7 assignments 3.000000000 137.09 1.3480
N8 exp,sqrt etc. 0.751108646 0.58 63.9100
MWIPS 90.64 110.3268
Operating System Linux, Arch. arm, Version 4.9.35-v7+
Java Vendor Oracle Corporation, Version 1.8.0_65
CPU null
언급URL : https://stackoverflow.com/questions/31153584/why-is-there-such-a-performance-difference-on-raspberry-pi-between-open-and-orac
'programing' 카테고리의 다른 글
PHPExcel 기본 워크시트 이름을 다른 이름으로 변경 (0) | 2023.07.16 |
---|---|
둘 이상의 필드에 대한 항목에 대한 중복 항목 찾기 Mongo (0) | 2023.07.16 |
단일 파일/디렉토리를 '기트 커밋'하는 방법 (0) | 2023.07.16 |
Oracle의 익명 TABLE 또는 VARRAY 유형 (0) | 2023.07.11 |
Javascript로 클라이언트의 MongoDB 사용 (0) | 2023.07.11 |