• # Re: Comparatif Intel C++ 7.0 / Gcc 3.2.1

    Posté par (site web personnel) . En réponse à la dépêche Comparatif Intel C++ 7.0 / Gcc 3.2.1. Évalué à 10.

    Les bench ça vaut ce que ça vaut mais bon, les perf affichées pour le scimark me paraissent vraiment mauvaises pour un pIII-600 qui est censé savoir faire 42 choses à la fois tout en accelerant l'internette: 100MFlops pour une factorisation LU (juste une série d'additions multiplications bien bourrine) c'est vraiment pas terrible. D'autant qu'il ne fait pas trop intervenir le cache puisque la matrice en question est 100x100 soit 80ko d'occupation mémoire ça loge à peu près dans n'importe quel cache L2.

    [Dans la suite je fais un blocage sur les perf du bench LU, qui est représentatif de la puissance du processeur et de la capacité du compilo à bien optimiser des petites boucles assez simples de calcul en virgule flottante -- je n'ai pas regardé les autres résultats]

    Du coup j'ai essaye sur mon celeron-450 (un bon vieux celeron avec juste le mmx)
    Composite Score: 70.06
    FFT Mflops: 65.28 (N=1024)
    SOR Mflops: 108.50 (100 x 100)
    MonteCarlo: Mflops: 17.16
    Sparse matmult Mflops: 52.35 (N=1000, nz=5000)
    LU Mflops: 107.00 (M=100, N=100)
    (gcc-3.2.1 -O3 -funroll-all-loops -fomit-frame-pointer -ffast-math)

    (on notera que j'ai viré l'option -mcpu)

    ah ben c'est con, les perfs sont les mêmes que sur le pIII du gars! peut-être que le test ne tire pas partie du SSE puisque si je ne m'abuse celui-ci travaille en simple précision et le bench est en double-prec. Passons.

    Pour continue à voir, je vais sur un celeron-600 (qui doit avoir le SSE, enfin j'en sais trop rien)

    rebelote:
    Composite Score: 82.21
    FFT Mflops: 94.39 (N=1024)
    SOR Mflops: 101.21 (100 x 100)
    MonteCarlo: Mflops: 35.32
    Sparse matmult Mflops: 44.16 (N=1000, nz=5000)
    LU Mflops: 135.99 (M=100, N=100)
    (gcc-3.2.1 -O3 -funroll-all-loops -fomit-frame-pointer -ffast-math -march=pentium2)

    Flute alors, son bi-pIII est vraiment pas fougueux, un céléron-600 est 33% plus véloce... on va mettre ça sur le compte du SMP :-/

    Sur la machine en question, il y a aussi icc-6.0 alors autant faire la comparaison:
    Composite Score: 122.48
    FFT Mflops: 88.27 (N=1024)
    SOR Mflops: 157.43 (100 x 100)
    MonteCarlo: Mflops: 89.48
    Sparse matmult Mflops: 72.82 (N=1000, nz=5000)
    LU Mflops: 204.39 (M=100, N=100)
    (icc -O3 -ipo -axK)

    Mazette ! sur ce coup, icc est 60% plus performant que gcc ! Bon, on va dire que c'est parce que c'est du intel, allons voir sur un athlon.

    La machine en question est un athlon-XP 1400, une machine bas de gamme d'assembleur.
    Composite Score: 345.81
    FFT Mflops: 320.63 (N=1024)
    SOR Mflops: 324.40 (100 x 100)
    MonteCarlo: Mflops: 112.32
    Sparse matmult Mflops: 327.68 (N=1000, nz=5000)
    LU Mflops: 644.03 (M=100, N=100)
    (gcc-3.2.1 -O3 -funroll-all-loops -fomit-frame-pointer -ffast-math -march=pentium2)


    Composite Score: 436.18
    FFT Mflops: 339.35 (N=1024)
    SOR Mflops: 448.13 (100 x 100)
    MonteCarlo: Mflops: 267.10
    Sparse matmult Mflops: 409.60 (N=1000, nz=5000)
    LU Mflops: 716.71 (M=100, N=100)
    (icc -O3 -ipo -axK)

    Alors là je suis plus qu'impressionné! Les perf sont vraiment bluffantes à croire qu'il y a un bug dans le bench. La bonne nouvelle c'est que gcc n'est pas tellement à la rue. Par contre j'ai pas de p4 sous la main pour faire la comparaison..


    A titre d'info j'ai aussi lancé le bench sur une Bi-Alpha (21264A à 667MHz). A côté de l'athlon elle fait plutot pâle figure (là aussi je suis plus que surpris)

    Composite Score: 194.86
    FFT Mflops: 214.46 (N=1024)
    SOR Mflops: 236.93 (100 x 100)
    MonteCarlo: Mflops: 48.22
    Sparse matmult Mflops: 175.55 (N=1000, nz=5000)
    LU Mflops: 312.68 (M=100, N=100)
    (cc -O3 -arch ev67 -fast)
    A sa décharge, il faut dire que la machine est assez chargée (load = 2.7) et que le test n'évalue que la puissance brute du processeur, il ne tire pas partie du cache assez gros de cette machine.

    Par contre on peut comparer le compilateur compaq avec gcc (3.2):


    Composite Score: 155.17
    FFT Mflops: 199.73 (N=1024)
    SOR Mflops: 167.08 (100 x 100)
    MonteCarlo: Mflops: 50.65
    Sparse matmult Mflops: 220.92 (N=1000, nz=5000)
    LU Mflops: 137.46 (M=100, N=100)
    (gcc -O3 -funroll-all-loops -fomit-frame-pointer -ffast-math -mcpu=ev67 -mtune=ev67)

    ... mouaif vraiment pas convainquant, sur le LU le compilo compaq a été plus de 2 fois plus performant que gcc.. je n'ai peut-être pas utilisé les bonnes options pour gcc :-/ (en particulier pour les histoires d'aliasing mais j'ai la flemme de chercher)


    Allez, un dernier coup sur une Origin 2000 pas très fraiche (à base r12k à 400MHz):

    Composite Score: 148.34
    FFT Mflops: 129.78 (N=1024)
    SOR Mflops: 242.08 (100 x 100)
    MonteCarlo: Mflops: 64.22
    Sparse matmult Mflops: 108.86 (N=1000, nz=5000)
    LU Mflops: 196.73 (M=100, N=100)
    (cc -Ofast -OPT:alias=restrict:roundoff=3)


    et avec gcc (3.0.4):
    Composite Score: 114.10
    FFT Mflops: 124.23 (N=1024)
    SOR Mflops: 155.90 (100 x 100)
    MonteCarlo: Mflops: 20.97
    Sparse matmult Mflops: 102.08 (N=1000, nz=5000)
    LU Mflops: 167.32 (M=100, N=100)
    (gcc-3 -O3 -funroll-all-loops -fomit-frame-pointer -ffast-math -mips3)

    bon, gcc n'est pas trop ridicule sur ce coup il s'en sort bien :)


    au final c'est bien dur de tirer des conclusions .. mis à part que je ne comprends comment l'auteur du bench a obtenu des performances bien plus mauvaise que celles que j'ai sur un celeron-600.