This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Integer performance regression on alpha


The following simple code is much slower compiled with yesterday's CVS
sources than it is compiled with 2.95.1 on alphaev6-unknown-linux-gnu:

popov-246% /export/u10/egcs-test/bin/gcc -O9 -funroll-all-loops -ffast-math -o massimo massimo.c
popov-247% ./massimo
     16K ( 131072/  65536)  14.145 sec INT   2.957 sec FLOAT
     32K (  65536/  32768)  14.144 sec INT   2.956 sec FLOAT
     48K (  43690/  21845)  14.220 sec INT   2.969 sec FLOAT
     64K (  32768/  16384)  14.339 sec INT   3.165 sec FLOAT
     80K (  26214/  13107)  18.706 sec INT   5.086 sec FLOAT
     96K (  21845/  10922)  21.944 sec INT   6.364 sec FLOAT
    128K (  16384/   8192)  21.930 sec INT   6.427 sec FLOAT
    256K (   8192/   4096)  21.881 sec INT   6.422 sec FLOAT
    512K (   4096/   2048)  23.029 sec INT   6.973 sec FLOAT
   1024K (   2048/   1024)  25.203 sec INT   7.997 sec FLOAT
   8192K (    256/    128)  38.823 sec INT  14.798 sec FLOAT
popov-248% /export/u10/egcs-test/bin/gcc -v
Reading specs from /export/u10/egcs-test/lib/gcc-lib/alphaev6-unknown-linux-gnu/2.97/specs
gcc version 2.97 20001005 (experimental)
popov-249% gcc -O9 -funroll-all-loops -ffast-math -o massimo massimo.c
popov-250% ./massimo
     16K ( 131072/  65536)   7.832 sec INT   2.594 sec FLOAT
     32K (  65536/  32768)   7.828 sec INT   2.592 sec FLOAT
     48K (  43690/  21845)   7.865 sec INT   2.606 sec FLOAT
     64K (  32768/  16384)   7.910 sec INT   2.648 sec FLOAT
     80K (  26214/  13107)  12.787 sec INT   5.116 sec FLOAT
     96K (  21845/  10922)  16.039 sec INT   6.479 sec FLOAT
    128K (  16384/   8192)  20.658 sec INT   8.849 sec FLOAT
    256K (   8192/   4096)  18.368 sec INT   7.616 sec FLOAT
    512K (   4096/   2048)  18.142 sec INT   7.852 sec FLOAT
   1024K (   2048/   1024)  20.527 sec INT   8.804 sec FLOAT
   8192K (    256/    128)  32.418 sec INT  15.218 sec FLOAT
popov-251% gcc -v
Reading specs from /export/u10/gcc-2.95.1/lib/gcc-lib/alphaev6-unknown-linux-gnu/2.95.1/specs
gcc version 2.95.1 19990816 (release)

This is going in the wrong direction!

Brad Lucier

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

#define FLOAT float

void bench (int nvec)
{
  int *idat;
  float *fdat;
  int ireps,freps;
  int num;
  int i,j;
  time_t debut,fin;
  double temps_int,temps_float;

  ireps = 1024*2048/nvec;
  num = nvec*1024/sizeof(int);

  idat = (int *) malloc(num*sizeof(int));

  debut = clock();

  for (j=0; j<ireps; ++j) {
    for (i=0; i<num; ++i) {
      idat[i] = 18;
    }
    for (i=0; i<num; ++i) {
      idat[i] += 13;
    }
    for (i=0; i<num; ++i) {
      idat[i] *= 17;
    }
    for (i=0; i<num; ++i) {
      idat[i] /= 5;
    }
  }

  fin = clock();
  temps_int = ((double)(fin-debut))/CLOCKS_PER_SEC;

  free(idat);

  freps = 1024*1024/nvec;
  num = nvec*1024/sizeof(float);

  fdat = (float *) malloc(num*sizeof(float));

  debut = clock();

  for (j=0; j<freps; ++j) {
    for (i=0; i<num; ++i) {
      fdat[i] = 183.7463123456;
    }
    for (i=0; i<num; ++i) {
      fdat[i] += 13;
    }
    for (i=0; i<num; ++i) {
      fdat[i] *= 17;
    }
    for (i=0; i<num; ++i) {
      fdat[i] /= 5;
    }
  }

  fin = clock();
  temps_float = ((double)(fin-debut))/CLOCKS_PER_SEC;

  free(fdat);

  printf("%7dK (%7d/%7d) %7.3f sec INT %7.3f sec FLOAT\n",nvec,ireps,freps,temps_int,temps_float);
}

main (int argc, char *argv[])
{
  int nvec;

  if (argc < 2) {
    bench(16);
    bench(32);
    bench(48);
    bench(64);
    bench(80);
    bench(96);
    bench(128);
    bench(256);
    bench(512);
    bench(1024);
    bench(8192);
  } else {
    nvec = atoi(argv[1]);
    bench(nvec);
  }
  
}

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]