ARM SBCs vs. x86 Reference

Intel Celeron J3455 testing with a Compulab fitlet2 v1.1 (FLT2.0.38.01.00 BIOS) and Intel HD 500 3072MB on Ubuntu 18.04 via the Phoronix Test Suite.

HTML result view exported from: https://openbenchmarking.org/result/1803204-FO-1803201FO76&sor&grr.

ARM SBCs vs. x86 ReferenceProcessorMotherboardMemoryDiskGraphicsMonitorChipsetAudioNetworkOSKernelDesktopDisplay ServerDisplay DriverOpenGLCompilerFile-SystemScreen ResolutionRaspberry Pi 2 Model bASUS TinkerBoardCore i3 8100Celeron J3455ARMv7 rev 5 @ 0.90GHz (4 Cores)BCM2835 Raspberry Pi 2 Model B Rev 1.1926MB32GB GB2MWVC4 V3D 2.1 1024MBVE228Raspbian 9.44.9.80-v7+ (armv7l)LXDE 0.9.3X Server 1.19.2modesetting 1.19.22.1 Mesa 13.0.6 Gallium 0.4GCC 6.3.0 20170516ext41920x1080ARMv7 rev 1 @ 1.80GHz (4 Cores)Rockchip (Device Tree)2048MB8GB SDLLVMpipeDebian 9.44.4.16-00006-g4431f98-dirty (armv7l)3.3 Mesa 13.0.6 Gallium 0.4 (LLVM 3.9 128 bits)Intel Core i3-8100 @ 3.60GHz (4 Cores)ASRock Z370M-ITX/ac (P1.20 BIOS)Intel Device 3e1f8192MB60GB DREVO X1 SSD(1100MHz)Realtek ALC892Intel Connection + Intel Device 24fbUbuntu 17.104.15.0-999-generic (x86_64) 20171231GNOME Shell 3.26.1GCC 8.0.1 20180319Intel Celeron J3455 @ 2.30GHz (4 Cores)Compulab fitlet2 v1.1 (FLT2.0.38.01.00 BIOS)Intel Celeron N3350/Pentium127GB NT-128Intel HD 500 3072MB (750MHz)Realtek ALC1150DELL P2415QIntel I211 Gigabit Connection + Intel Wireless 8260Ubuntu 18.044.15.0-10-generic (x86_64)GNOME Shell 3.27.91modesetting 1.19.64.5 Mesa 18.0.0-rc4GCC 7.3.01920x1080OpenBenchmarking.orgCompiler Details- Raspberry Pi 2 Model b: --build=arm-linux-gnueabihf --disable-browser-plugin --disable-libitm --disable-libquadmath --disable-sjlj-exceptions --enable-checking=release --enable-clocale=gnu --enable-gnu-unique-object --enable-gtk-cairo --enable-java-awt=gtk --enable-java-home --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-multiarch --enable-nls --enable-objc-gc=auto --enable-plugin --enable-shared --enable-threads=posix --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --target=arm-linux-gnueabihf --with-arch-directory=arm --with-arch=armv6 --with-default-libstdcxx-abi=new --with-float=hard --with-fpu=vfp --with-target-system-zlib -v - ASUS TinkerBoard: --build=arm-linux-gnueabihf --disable-browser-plugin --disable-libitm --disable-libquadmath --disable-sjlj-exceptions --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-gnu-unique-object --enable-gtk-cairo --enable-java-awt=gtk --enable-java-home --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-multiarch --enable-nls --enable-objc-gc=auto --enable-plugin --enable-shared --enable-threads=posix --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- --target=arm-linux-gnueabihf --with-arch-directory=arm --with-arch=armv7-a --with-default-libstdcxx-abi=new --with-float=hard --with-fpu=vfpv3-d16 --with-mode=thumb --with-target-system-zlib -v - Core i3 8100: --disable-multilib --enable-checking=release --enable-languages=c,c++,fortran- Celeron J3455: --build=x86_64-linux-gnu --disable-vtable-verify --disable-werror --enable-checking=release --enable-clocale=gnu --enable-default-pie --enable-gnu-unique-object --enable-languages=c,ada,c++,go,brig,d,fortran,objc,obj-c++ --enable-libmpx --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-multiarch --enable-multilib --enable-nls --enable-objc-gc=auto --enable-offload-targets=nvptx-none --enable-plugin --enable-shared --enable-threads=posix --host=x86_64-linux-gnu --program-prefix=x86_64-linux-gnu- --target=x86_64-linux-gnu --with-abi=m64 --with-arch-32=i686 --with-default-libstdcxx-abi=new --with-gcc-major-version-only --with-multilib-list=m32,m64,mx32 --with-target-system-zlib --with-tune=generic --without-cuda-driver -v Processor Details- Raspberry Pi 2 Model b: Scaling Governor: BCM2835 Freq ondemand- ASUS TinkerBoard: Scaling Governor: cpufreq-dt interactive- Core i3 8100: Scaling Governor: intel_pstate powersave- Celeron J3455: Scaling Governor: intel_pstate powersavePython Details- Raspberry Pi 2 Model b: Python 2.7.13 + Python 3.5.3- ASUS TinkerBoard: Python 2.7.13 + Python 3.5.3- Core i3 8100: Python 2.7.14 + Python 3.6.3- Celeron J3455: Python 2.7.14+ + Python 3.6.4+Security Details- Celeron J3455: KPTI + __user pointer sanitization + Full generic retpoline Protection

ARM SBCs vs. x86 Referencegimp: resizegimp: unsharp-maskgimp: auto-levelsgit: Time To Complete Common Git Commandsphpbench: PHP Benchmark Suitepybench: Total For Average Test Timesredis: SETredis: GETgimp: unsharp-maskgimp: auto-levelsgimp: resizeopenssl: RSA 4096-bit Performanceperl-benchmark: Interpreterperl-benchmark: Pod2htmlencode-mp3: WAV To MP3aobench: 2048 x 2048 - Total Timestockfish: Total Timec-ray: Total Timeebizzy: graphics-magick: Resizingscimark2: Jacobi Successive Over-Relaxationscimark2: Dense LU Matrix Factorizationscimark2: Sparse Matrix Multiplyscimark2: Fast Fourier Transformscimark2: Monte Carloscimark2: Compositecachebench: Writecachebench: Readmafft: Multiple Sequence Alignmentnetperf: 192.168.1.55 - UDP Stream - Server To Client - 10G - 10 Secondsnetperf: 192.168.1.55 - TCP Stream - Server To Client - 10 Secondsnetperf: 192.168.1.55 - TCP Stream - Client To Server - 10 Secondsnetperf: 192.168.1.55 - UDP Request Response - 10 Secondsnetperf: 192.168.1.55 - TCP Request Response - 10 Secondsnetperf: 192.168.1.55 - TCP Send File - 10 SecondsRaspberry Pi 2 Model bASUS TinkerBoardCore i3 8100Celeron J3455106.88209523820066149.30112559.06179.6973.4242.2325.770.012656262.45780646513.43668.6068581490.4545001954.0431.4719.559.2613.9925.662238.201657.4389.3896.0293.5894.05722.51660.0693.5429.57659009273216013.27315325.9473.7529.2218.5985.420.004105940.71310443145.61192.1219893155.401920055355.13168.10112.8921.2640.93139.668813.662734.6126.53634.19939.90783.73345.95226.13938.8510.445.415.7353707814452158315.833264425.581056.930.000951080.1320233133.5944.87338721.612114171871020.90813.80653.78201.86121.61562.3925255.883047.614.85961.58941.30787.50121.67127.98941.3910.3733.4317.6515.872083754215601592.64733499.05215.570.004023430.4520452985.63109.23885271.83919786468.25191.92220.6744.8350.93195.3210270.001935.3413.56959.56938.86786.12236.82276.44938.86OpenBenchmarking.org

GIMP

Test: resize

OpenBenchmarking.orgSeconds, Fewer Is BetterGIMP 2.8.20Test: resizeCeleron J34553691215SE +/- 0.15, N = 310.37

GIMP

Test: unsharp-mask

OpenBenchmarking.orgSeconds, Fewer Is BetterGIMP 2.8.20Test: unsharp-maskCore i3 8100Celeron J3455816243240SE +/- 0.01, N = 3SE +/- 0.02, N = 310.4433.43

GIMP

Test: auto-levels

OpenBenchmarking.orgSeconds, Fewer Is BetterGIMP 2.8.20Test: auto-levelsCore i3 8100Celeron J345548121620SE +/- 0.01, N = 3SE +/- 0.02, N = 35.4117.65

Git

Time To Complete Common Git Commands

OpenBenchmarking.orgSeconds, Fewer Is BetterGitTime To Complete Common Git CommandsCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b20406080100SE +/- 0.02, N = 3SE +/- 0.22, N = 6SE +/- 3.14, N = 6SE +/- 5.53, N = 65.7315.8729.57106.881. Core i3 8100: git version 2.14.12. Celeron J3455: git version 2.15.13. ASUS TinkerBoard: git version 2.11.04. Raspberry Pi 2 Model b: git version 2.11.0

PHPBench

PHP Benchmark Suite

OpenBenchmarking.orgScore, More Is BetterPHPBench 0.8.1PHP Benchmark SuiteCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b120K240K360K480K600KSE +/- 365.01, N = 3SE +/- 342.93, N = 3SE +/- 49.03, N = 3SE +/- 114.02, N = 35370782083756590020952

PyBench

Total For Average Test Times

OpenBenchmarking.orgMilliseconds, Fewer Is BetterPyBench 2018-02-16Total For Average Test TimesCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b8K16K24K32K40KSE +/- 6.23, N = 3SE +/- 13.91, N = 3SE +/- 17.24, N = 3SE +/- 113.95, N = 314454215927338200

Redis

Test: SET

OpenBenchmarking.orgRequests Per Second, More Is BetterRedis 4.0.8Test: SETCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b500K1000K1500K2000K2500KSE +/- 6761.21, N = 3SE +/- 6734.69, N = 3SE +/- 2568.46, N = 3SE +/- 495.26, N = 32158315.83601592.64216013.2766149.301. (CC) gcc options: -ggdb -rdynamic -lm -ldl -pthread

Redis

Test: GET

OpenBenchmarking.orgRequests Per Second, More Is BetterRedis 4.0.8Test: GETCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b700K1400K2100K2800K3500KSE +/- 3548.42, N = 3SE +/- 997.32, N = 3SE +/- 2325.31, N = 3SE +/- 560.95, N = 33264425.58733499.05315325.94112559.061. (CC) gcc options: -ggdb -rdynamic -lm -ldl -pthread

GIMP

Test: unsharp-mask

OpenBenchmarking.orgSeconds, Fewer Is BetterGIMP 2.8.18Test: unsharp-maskASUS TinkerBoardRaspberry Pi 2 Model b4080120160200SE +/- 0.26, N = 3SE +/- 0.46, N = 373.75179.69

GIMP

Test: auto-levels

OpenBenchmarking.orgSeconds, Fewer Is BetterGIMP 2.8.18Test: auto-levelsASUS TinkerBoardRaspberry Pi 2 Model b1632486480SE +/- 0.24, N = 3SE +/- 0.19, N = 329.2273.42

GIMP

Test: resize

OpenBenchmarking.orgSeconds, Fewer Is BetterGIMP 2.8.18Test: resizeASUS TinkerBoardRaspberry Pi 2 Model b1020304050SE +/- 0.46, N = 6SE +/- 0.59, N = 618.5942.23

OpenSSL

RSA 4096-bit Performance

OpenBenchmarking.orgSigns Per Second, More Is BetterOpenSSL 1.1.0fRSA 4096-bit PerformanceCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b2004006008001000SE +/- 0.15, N = 3SE +/- 0.20, N = 3SE +/- 3.22, N = 6SE +/- 0.03, N = 31056.93215.5785.4225.77-m64-m641. (CC) gcc options: -O3 -pthread -lssl -lcrypto -ldl

Perl Benchmarks

Test: Interpreter

OpenBenchmarking.orgSeconds, Fewer Is BetterPerl BenchmarksTest: InterpreterCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b0.00280.00560.00840.01120.014SE +/- 0.00005500, N = 6SE +/- 0.00001924, N = 3SE +/- 0.00009055, N = 6SE +/- 0.00001921, N = 30.000951080.004023430.004105940.01265626

Perl Benchmarks

Test: Pod2html

OpenBenchmarking.orgSeconds, Fewer Is BetterPerl BenchmarksTest: Pod2htmlCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b0.5531.1061.6592.2122.765SE +/- 0.00061183, N = 3SE +/- 0.00054440, N = 3SE +/- 0.01896498, N = 6SE +/- 0.00655717, N = 30.132023310.452045290.713104432.45780646

LAME MP3 Encoding

WAV To MP3

OpenBenchmarking.orgSeconds, Fewer Is BetterLAME MP3 Encoding 3.100WAV To MP3Core i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b110220330440550SE +/- 0.00, N = 3SE +/- 0.06, N = 3SE +/- 0.06, N = 3SE +/- 0.03, N = 333.5985.63145.61513.431. (CC) gcc options: -lm

AOBench

Size: 2048 x 2048 - Total Time

OpenBenchmarking.orgSeconds, Fewer Is BetterAOBenchSize: 2048 x 2048 - Total TimeCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b140280420560700SE +/- 0.01, N = 3SE +/- 0.02, N = 3SE +/- 0.10, N = 3SE +/- 1.11, N = 344.87109.23192.12668.601. (CC) gcc options: -lm -O3

Stockfish

Total Time

OpenBenchmarking.orgms, Fewer Is BetterStockfish 2014-11-26Total TimeCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b15K30K45K60K75KSE +/- 2.33, N = 3SE +/- 13.58, N = 3SE +/- 372.92, N = 6SE +/- 845.64, N = 3338788521989368581-msse -msse3 -mpopcnt1. (CXX) g++ options: -lpthread -fno-exceptions -fno-rtti -ansi -pedantic -O3 -flto

C-Ray

Total Time

OpenBenchmarking.orgSeconds, Fewer Is BetterC-Ray 1.1Total TimeCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b110220330440550SE +/- 0.02, N = 3SE +/- 0.01, N = 3SE +/- 1.29, N = 3SE +/- 0.93, N = 321.6171.83155.40490.451. (CC) gcc options: -lm -lpthread -O3

ebizzy

OpenBenchmarking.orgRecords/s, More Is Betterebizzy 0.3Core i3 8100ASUS TinkerBoardCeleron J3455Raspberry Pi 2 Model b50K100K150K200K250KSE +/- 296.45, N = 3SE +/- 220.50, N = 3SE +/- 25.58, N = 3SE +/- 8.89, N = 321141719200919745001. (CC) gcc options: -pthread -lpthread -O3 -march=native

GraphicsMagick

Operation: Resizing

OpenBenchmarking.orgIterations Per Minute, More Is BetterGraphicsMagick 1.3.28Operation: ResizingCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b4080120160200SE +/- 0.33, N = 3SE +/- 0.67, N = 3187865519-ljbig -lwebp -lwebpmux -ltiff -ljpeg -lXext -lSM -lICE -lX11 -llzma -ldl-lXext -lSM -lICE -lX11 -lgomp-lgomp-lgomp1. (CC) gcc options: -fopenmp -O2 -pthread -lz -lm -lpthread

SciMark

Computational Test: Jacobi Successive Over-Relaxation

OpenBenchmarking.orgMflops, More Is BetterSciMark 2.0Computational Test: Jacobi Successive Over-RelaxationCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b2004006008001000SE +/- 0.08, N = 3SE +/- 0.11, N = 3SE +/- 2.17, N = 3SE +/- 0.01, N = 31020.90468.25355.1354.041. (CC) gcc options: -lm

SciMark

Computational Test: Dense LU Matrix Factorization

OpenBenchmarking.orgMflops, More Is BetterSciMark 2.0Computational Test: Dense LU Matrix FactorizationCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b2004006008001000SE +/- 0.25, N = 3SE +/- 0.11, N = 3SE +/- 2.61, N = 3SE +/- 0.01, N = 3813.80191.92168.1031.471. (CC) gcc options: -lm

SciMark

Computational Test: Sparse Matrix Multiply

OpenBenchmarking.orgMflops, More Is BetterSciMark 2.0Computational Test: Sparse Matrix MultiplyCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b140280420560700SE +/- 0.06, N = 3SE +/- 0.14, N = 3SE +/- 3.08, N = 3SE +/- 0.01, N = 3653.78220.67112.8919.551. (CC) gcc options: -lm

SciMark

Computational Test: Fast Fourier Transform

OpenBenchmarking.orgMflops, More Is BetterSciMark 2.0Computational Test: Fast Fourier TransformCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b4080120160200SE +/- 0.14, N = 3SE +/- 0.02, N = 3SE +/- 0.05, N = 3SE +/- 0.00, N = 3201.8644.8321.269.261. (CC) gcc options: -lm

SciMark

Computational Test: Monte Carlo

OpenBenchmarking.orgMflops, More Is BetterSciMark 2.0Computational Test: Monte CarloCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b306090120150SE +/- 0.08, N = 3SE +/- 0.00, N = 3SE +/- 0.50, N = 3SE +/- 0.00, N = 3121.6150.9340.9313.991. (CC) gcc options: -lm

SciMark

Computational Test: Composite

OpenBenchmarking.orgMflops, More Is BetterSciMark 2.0Computational Test: CompositeCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b120240360480600SE +/- 0.02, N = 3SE +/- 0.04, N = 3SE +/- 1.66, N = 3SE +/- 0.00, N = 3562.39195.32139.6625.661. (CC) gcc options: -lm

CacheBench

Test: Write

OpenBenchmarking.orgMB/s, More Is BetterCacheBenchTest: WriteCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b5K10K15K20K25KSE +/- 1.03, N = 3SE +/- 5.31, N = 3SE +/- 28.35, N = 3SE +/- 0.58, N = 325255.8810270.008813.662238.201. (CC) gcc options: -lrt

CacheBench

Test: Read

OpenBenchmarking.orgMB/s, More Is BetterCacheBenchTest: ReadCore i3 8100ASUS TinkerBoardCeleron J3455Raspberry Pi 2 Model b7001400210028003500SE +/- 3.20, N = 3SE +/- 7.48, N = 3SE +/- 0.36, N = 3SE +/- 6.59, N = 33047.612734.611935.341657.431. (CC) gcc options: -lrt

Timed MAFFT Alignment

Multiple Sequence Alignment

OpenBenchmarking.orgSeconds, Fewer Is BetterTimed MAFFT Alignment 7.392Multiple Sequence AlignmentCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b20406080100SE +/- 0.01, N = 3SE +/- 0.24, N = 6SE +/- 0.72, N = 6SE +/- 0.93, N = 34.8513.5626.5389.381. (CC) gcc options: -std=c99 -O3 -lm -lpthread

Netperf

Server: 192.168.1.55 - Test: UDP Stream - Server To Client - 10G - Duration: 10 Seconds

OpenBenchmarking.orgMegabits/sec Throughput, More Is BetterNetperf 2.7.0Server: 192.168.1.55 - Test: UDP Stream - Server To Client - 10G - Duration: 10 SecondsCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b2004006008001000SE +/- 0.00, N = 3SE +/- 0.25, N = 3SE +/- 161.98, N = 6SE +/- 0.03, N = 3961.58959.56634.1996.021. (CC) gcc options: -O3 -march=native -lm

Netperf

Server: 192.168.1.55 - Test: TCP Stream - Server To Client - Duration: 10 Seconds

OpenBenchmarking.orgMegabits/sec Throughput, More Is BetterNetperf 2.7.0Server: 192.168.1.55 - Test: TCP Stream - Server To Client - Duration: 10 SecondsCore i3 8100ASUS TinkerBoardCeleron J3455Raspberry Pi 2 Model b2004006008001000SE +/- 0.02, N = 3SE +/- 0.89, N = 3SE +/- 0.09, N = 3SE +/- 0.22, N = 3941.30939.90938.8693.581. (CC) gcc options: -O3 -march=native -lm

Netperf

Server: 192.168.1.55 - Test: TCP Stream - Client To Server - Duration: 10 Seconds

OpenBenchmarking.orgMegabits/sec Throughput, More Is BetterNetperf 2.7.0Server: 192.168.1.55 - Test: TCP Stream - Client To Server - Duration: 10 SecondsCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b2004006008001000SE +/- 0.13, N = 3SE +/- 0.99, N = 3SE +/- 0.80, N = 3SE +/- 0.05, N = 3787.50786.12783.7394.051. (CC) gcc options: -O3 -march=native -lm

Netperf

Server: 192.168.1.55 - Test: UDP Request Response - Duration: 10 Seconds

OpenBenchmarking.orgTransaction Rate Per Second, More Is BetterNetperf 2.7.0Server: 192.168.1.55 - Test: UDP Request Response - Duration: 10 SecondsRaspberry Pi 2 Model bASUS TinkerBoardCeleron J3455Core i3 8100160320480640800SE +/- 6.10, N = 3SE +/- 155.80, N = 6SE +/- 15.02, N = 6SE +/- 4.00, N = 6722.51345.95236.82121.671. (CC) gcc options: -O3 -march=native -lm

Netperf

Server: 192.168.1.55 - Test: TCP Request Response - Duration: 10 Seconds

OpenBenchmarking.orgTransaction Rate Per Second, More Is BetterNetperf 2.7.0Server: 192.168.1.55 - Test: TCP Request Response - Duration: 10 SecondsRaspberry Pi 2 Model bCeleron J3455ASUS TinkerBoardCore i3 8100140280420560700SE +/- 3.34, N = 3SE +/- 3.49, N = 3SE +/- 145.28, N = 6SE +/- 5.04, N = 6660.06276.44226.13127.981. (CC) gcc options: -O3 -march=native -lm

Netperf

Server: 192.168.1.55 - Test: TCP Send File - Duration: 10 Seconds

OpenBenchmarking.orgMegabits/sec Throughput, More Is BetterNetperf 2.7.0Server: 192.168.1.55 - Test: TCP Send File - Duration: 10 SecondsCore i3 8100Celeron J3455ASUS TinkerBoardRaspberry Pi 2 Model b2004006008001000SE +/- 0.04, N = 3SE +/- 0.12, N = 3SE +/- 0.93, N = 3SE +/- 0.05, N = 3941.39938.86938.8593.541. (CC) gcc options: -O3 -march=native -lm


Phoronix Test Suite v10.8.4