Posts Tagged ‘compilador gcc llvm clang benchmark’

Carreras de compiladores!

Hoy jugaremos con compiladores.
En OSX nos encontramos con gcc y llvm instalado en el sistema (último Xcode) y por supuesto, toca compararlos :^)

Para ello usaremos el software de benchmarks nbench-byte-2.2.3:

GCC

TEST                : Iterations/sec.  : Old Index   : New Index
:                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          1221.9  :      31.34  :      10.29
STRING SORT         :          305.78  :     136.63  :      21.15
BITFIELD            :      4.2614e+08  :      73.10  :      15.27
FP EMULATION        :           242.2  :     116.22  :      26.82
FOURIER             :           35235  :      40.07  :      22.51
ASSIGNMENT          :          31.992  :     121.74  :      31.58
IDEA                :          5519.6  :      84.42  :      25.07
HUFFMAN             :          2258.2  :      62.62  :      20.00
NEURAL NET          :          50.278  :      80.77  :      33.97
LU DECOMPOSITION    :          1533.5  :      79.44  :      57.36
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 81.266
FLOATING-POINT INDEX: 63.586
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 :
L2 Cache            :
OS                  : Darwin 10.5.0
C compiler          : gcc version 4.2.1 (Apple Inc. build 5664)
libc                :
MEMORY INDEX        : 21.684
INTEGER INDEX       : 19.285
FLOATING-POINT INDEX: 35.267
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.


CLANG

TEST                : Iterations/sec.  : Old Index   : New Index
:                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          1378.8  :      35.36  :      11.61
STRING SORT         :          307.33  :     137.32  :      21.26
BITFIELD            :      4.1904e+08  :      71.88  :      15.01
FP EMULATION        :          317.05  :     152.14  :      35.11
FOURIER             :           35979  :      40.92  :      22.98
ASSIGNMENT          :          30.987  :     117.91  :      30.58
IDEA                :          5419.2  :      82.89  :      24.61
HUFFMAN             :          2189.6  :      60.72  :      19.39
NEURAL NET          :          44.611  :      71.66  :      30.14
LU DECOMPOSITION    :          1554.7  :      80.54  :      58.16
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 84.791
FLOATING-POINT INDEX: 61.811
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 :
L2 Cache            :
OS                  : Darwin 10.5.0
C compiler          : clang
libc                :
MEMORY INDEX        : 21.371
INTEGER INDEX       : 21.001
FLOATING-POINT INDEX: 34.283
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.


LLVM-GCC

TEST                : Iterations/sec.  : Old Index   : New Index
:                  : Pentium 90* : AMD K6/233*
--------------------:------------------:-------------:------------
NUMERIC SORT        :          1376.8  :      35.31  :      11.60
STRING SORT         :           307.7  :     137.49  :      21.28
BITFIELD            :      4.1864e+08  :      71.81  :      15.00
FP EMULATION        :          310.04  :     148.77  :      34.33
FOURIER             :           35692  :      40.59  :      22.80
ASSIGNMENT          :          31.145  :     118.51  :      30.74
IDEA                :          5520.8  :      84.44  :      25.07
HUFFMAN             :          2407.7  :      66.77  :      21.32
NEURAL NET          :          45.261  :      72.71  :      30.58
LU DECOMPOSITION    :          1567.3  :      81.20  :      58.63
==========================ORIGINAL BYTEMARK RESULTS==========================
INTEGER INDEX       : 85.950
FLOATING-POINT INDEX: 62.111
Baseline (MSDOS*)   : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0
==============================LINUX DATA BELOW===============================
CPU                 :
L2 Cache            :
OS                  : Darwin 10.5.0
C compiler          : llvm-gcc
libc                :
MEMORY INDEX        : 21.409
INTEGER INDEX       : 21.478
FLOATING-POINT INDEX: 34.449
Baseline (LINUX)    : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38
* Trademarks are property of their respective holder.

Comprobando los resultados, es evidente que LLVM gana a GCC en las operaciones de enteros. Ahora probaremos a compilar el rcrack en GCC y en LLVM a ver si se nota diferencia entre ellos.

Lanzamos rcrack 4 veces seguidas contra unas rainbow md5 con el hash “admin” y nos quedamos con la media de los resultados:

GCC

statistics
-------------------------------------------------------
plaintext found:            1 of 1 (100.00%)
total disk access time:     610.57 s
total cryptanalysis time:   14.58 s
total pre-calculation time: 27.82 s
total chain walk step:      99970002
total false alarm:          11906
total chain walk step due to false alarm: 43995212

result
-------------------------------------------------------
21232f297a57a5a743894a0e4a801fc3        admin   hex:61646d696e

Ahora realizamos la misma operación compilando rcrack con LLVM:

LLVM

statistics
-------------------------------------------------------
plaintext found:            1 of 1 (100.00%)
total disk access time:     410.01 s
total cryptanalysis time:   12.26 s
total pre-calculation time: 26.85 s
total chain walk step:      99970002
total false alarm:          11906
total chain walk step due to false alarm: 43995212

result
-------------------------------------------------------
21232f297a57a5a743894a0e4a801fc3        admin   hex:61646d696e

¡Un 68.75% de mejoría en LLVM!
No está nada mal, son resultados a tener en cuenta a la hora de compilar procesos intensivos, jeje.

Happy hacking!

There once was was a user that whined

Share via email
Share on Facebook+1Share on Twitter