#include using namespace std; using namespace Grid; using namespace Grid::QCD; int main (int argc, char ** argv) { Grid_init(&argc,&argv); const int Nvec=8; typedef Lattice< iVector< vReal,Nvec> > LatticeVec; int Nloop=1000; std::vector simd_layout = GridDefaultSimd(Nd,vReal::Nsimd()); std::vector mpi_layout = GridDefaultMpi(); int threads = GridThread::GetThreads(); std::cout << "Grid is setup to use "< latt_size ({lat,lat,lat,lat}); GridCartesian Grid(latt_size,simd_layout,mpi_layout); //GridParallelRNG pRNG(&Grid); pRNG.SeedRandomDevice(); LatticeVec z(&Grid); //random(pRNG,z); LatticeVec x(&Grid); //random(pRNG,x); LatticeVec y(&Grid); //random(pRNG,y); double a=2.0; double start=usecond(); for(int i=0;i &ret,double a,const Lattice &lhs,const Lattice &rhs){ axpy(z,a,x,y); } double stop=usecond(); double time = (stop-start)/Nloop*1000; double flops=lat*lat*lat*lat*Nvec*2;// mul,add double bytes=3*lat*lat*lat*lat*Nvec*sizeof(Real); std::cout< latt_size ({lat,lat,lat,lat}); GridCartesian Grid(latt_size,simd_layout,mpi_layout); //GridParallelRNG pRNG(&Grid); pRNG.SeedRandomDevice(); LatticeVec z(&Grid); //random(pRNG,z); LatticeVec x(&Grid); //random(pRNG,x); LatticeVec y(&Grid); //random(pRNG,y); double a=2.0; double start=usecond(); for(int i=0;i latt_size ({lat,lat,lat,lat}); GridCartesian Grid(latt_size,simd_layout,mpi_layout); //GridParallelRNG pRNG(&Grid); pRNG.SeedRandomDevice(); LatticeVec z(&Grid); //random(pRNG,z); LatticeVec x(&Grid); //random(pRNG,x); LatticeVec y(&Grid); //random(pRNG,y); RealD a=2.0; double start=usecond(); for(int i=0;i latt_size ({lat,lat,lat,lat}); GridCartesian Grid(latt_size,simd_layout,mpi_layout); //GridParallelRNG pRNG(&Grid); pRNG.SeedRandomDevice(); LatticeVec z(&Grid); //random(pRNG,z); LatticeVec x(&Grid); //random(pRNG,x); LatticeVec y(&Grid); //random(pRNG,y); RealD a=2.0; ComplexD nn; double start=usecond(); for(int i=0;i