root / tests / benchfgemm.C

Revision 76, 1.4 kB (checked in by pernet, 5 months ago)

Add simple benchmarking examples

Line 
1//#include "goto-def.h"
2
3#include <iostream>
4
5#include "fflas-ffpack/fflas.h"
6#include "fflas-ffpack/modular-balanced.h"
7#include "timer.h"
8#include "Matio.h"
9
10using namespace std;
11
12int main(int argc, char** argv) {
13
14  // parameter: p, n, iteration, file1, file2
15
16  double    p    = atof(argv[1]);
17  int n    = atoi(argv[2]);
18  size_t w = atoi (argv[3]);
19  size_t iter = atoi(argv[4]);
20
21  //typedef ModularBalanced<double> Field;
22  typedef ModularBalanced<float> Field;
23  typedef Field::Element Element;
24     
25  Field F(p);
26  Element one,zero;
27  F.init(one, 1.0);
28  F.init(zero,0.0);
29
30  Timer chrono;
31  double time=0.0, time2=0.0;
32  int singular;
33 
34  Element * A, * B, * C;
35
36  for (size_t i=0;i<iter;++i){
37       
38    Field::RandIter G(F);
39    A = new Element[n*n];
40    for (size_t i=0; i<n*n; ++i)
41      G.random (*(A+i));     
42
43    B = new Element[n*n];
44    for (size_t i=0; i<n*n; ++i)
45      G.random(*(B+i));
46
47    C = new Element[n*n];
48
49    chrono.clear();
50    chrono.start();
51    FFLAS::fgemm (F, FFLAS::FflasNoTrans, FFLAS::FflasNoTrans, n,n,n, one,
52                  A, n, B, n, zero, C,n, w);
53    chrono.stop();
54    time+=chrono.realtime();
55
56    delete[] A;
57    delete[] B;
58    delete[] C;
59  }
60 
61  std::cerr<<"n: "<<n <<" p: "<<p<<" w: "<<w<<std::endl
62           <<" time:  "<<time/iter<<" s"<<std::endl
63           <<" speed: "<<2.0*n/1000.0*n/1000.0/time*n/1000.0*iter<<" Gffops"
64           <<std::endl;
65
66  return 0;
67}
Note: See TracBrowser for help on using the browser.