Only 70% of theoretical peak performance on FreeBSD 8/amd64, Corei7 920

Maho NAKATA chat95 at mac.com
Mon Apr 12 23:38:51 UTC 2010


Hi,

Many thanks for interested in.
I used following program to major the FLOPS. I'll provide more in details.
you many need <blas.h> but you can change dgemm_f77 to something else to link
agianst GotoBLAS (ports/math/gotoblas). I think you can use math/atlas but
it takes too long time to compile...
---
#include <complex>
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
#include <sys/resource.h>

#define F77_FUNC(name,NAME) name ## _ 
#include <blas.h>

#define MAXLOOP 10

unsigned long long microseconds()
{
    rusage  t;
    timeval tv;
    getrusage( RUSAGE_SELF, &t );
    tv = t.ru_utime;
    return ((unsigned long long)tv.tv_sec)*1000000 + tv.tv_usec;
}

double gettimeofday_sec()
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return tv.tv_sec + (double)tv.tv_usec*1e-6;
}

int
main()
{
    int n;
    int incx = 1, incy = 1;
    double alpha = 3.14, beta = 2.717;
    double dgemmtime, t1, t2, t_1, t_2;

     for (n = 3000 ; n < 10000; n=n+100) {
	printf("n: %d\n", (int)n);
	double *A = new double[n*n];
	double *B = new double[n*n];
	double *C = new double[n*n];
	for (int i = 0; i < n; i++) {
	  for (int j = 0; j < n; j++) {
	    A[i*n+j] = i * j + 1;
	    B[i*n+j] = (i+1) * (j+1) + 1;
	    C[i*n+j] = (i+1) - (j+1) + 1;
	  }
	}
    t1 = (double)microseconds(); t_1 = gettimeofday_sec();
      for (int p = 0 ; p < MAXLOOP; p++ ){
 	   dgemm_f77("n", "n", &n, &n, &n, &alpha, A, &n, B, &n, &beta, C, &n);
      }
    t2 = (double)microseconds(); t_2 = gettimeofday_sec();
 //	dgemmtime = (t2 - t1) * 1e-6;
 	dgemmtime = (t_2 - t_1);
	printf("time : %lf or %lf \n", (t2 - t1) * 1e-6, t_2 - t_1);
 	printf("Mflops : %lf\n", ( 2.0 * (double)n * (double)n * (double)n + 2.0 * (double)n* (double)n )* MAXLOOP / dgemmtime / (1000*1000) );
	delete[]C;
	delete[]B;
	delete[]A;
    }
}


-- Nakata Maho http://accc.riken.jp/maho/ , http://ja.openoffice.org/ 
   Nakata Maho's PGP public keys: http://accc.riken.jp/maho/maho.pgp.txt


More information about the freebsd-stable mailing list