/* time various approaches to su3_matrix * su3_vector */ #include "complex.h" #include "su3.h" #include #include #include #include #include #include #include void sse_mult_su3_mat_vec(su3_matrix *, su3_vector *, su3_vector *); int main(int argc, char **argv) { su3_matrix a; su3_vector b, c, d = {{{0.0},{0.0}}}; int i,j,iter=1; struct sched_param param={sched_priority:20}; volatile unsigned long long timeA, timeB, timeMILC, timeSSE; unsigned int seed=1; int randomfd; if ((randomfd=open("/dev/urandom", O_RDONLY)) < 0) perror("Attempt to open /dev/urandom"); if (read(randomfd, &seed, sizeof(seed)) < sizeof(seed)) perror("Attempt to read /dev/urandom"); close(randomfd); srand(seed); if (sched_setscheduler(0, SCHED_FIFO, ¶m) < 0) perror("Attempt to put in real time queue"); if (argc > 1) sscanf(argv[1],"%d",&iter); for (i=0; i<3; i++) { for (j=0; j<3; j++) { a.e[i][j].real = (float)(rand() - RAND_MAX/2)/(float)(RAND_MAX/2)*2.0; a.e[i][j].imag = (float)(rand() - RAND_MAX/2)/(float)(RAND_MAX/2)*2.0; } } for (i=0; i<3; i++) { b.c[i].real = (float)(rand() - RAND_MAX/2)/(float)(RAND_MAX/2)*2.0; b.c[i].imag = (float)(rand() - RAND_MAX/2)/(float)(RAND_MAX/2)*2.0; } rdtscll(timeA); for (i=0; i