programing

라즈베리 파이의 성능이 오픈 JDK와 오라클 JDK 사이에 그렇게 차이가 나는 이유는 무엇입니까?

instargram 2023. 7. 16. 12:30
반응형

라즈베리 파이의 성능이 오픈 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

반응형