mirror of
https://github.com/paboyle/Grid.git
synced 2025-04-09 21:50:45 +01:00
introduced assertions in Benchmark_wilson, removed data output from Benchmark_dwf
This commit is contained in:
parent
10a34312dc
commit
015d8bb38a
@ -1,5 +1,5 @@
|
|||||||
/*************************************************************************************
|
/*************************************************************************************
|
||||||
Grid physics library, www.github.com/paboyle/Grid
|
Grid physics library, www.github.com/paboyle/Grid
|
||||||
Source file: ./benchmarks/Benchmark_dwf.cc
|
Source file: ./benchmarks/Benchmark_dwf.cc
|
||||||
Copyright (C) 2015
|
Copyright (C) 2015
|
||||||
|
|
||||||
@ -77,7 +77,7 @@ int main (int argc, char ** argv)
|
|||||||
|
|
||||||
std::vector<int> seeds4({1,2,3,4});
|
std::vector<int> seeds4({1,2,3,4});
|
||||||
std::vector<int> seeds5({5,6,7,8});
|
std::vector<int> seeds5({5,6,7,8});
|
||||||
|
|
||||||
std::cout << GridLogMessage << "Initialising 4d RNG" << std::endl;
|
std::cout << GridLogMessage << "Initialising 4d RNG" << std::endl;
|
||||||
GridParallelRNG RNG4(UGrid); RNG4.SeedUniqueString(std::string("The 4D RNG"));
|
GridParallelRNG RNG4(UGrid); RNG4.SeedUniqueString(std::string("The 4D RNG"));
|
||||||
std::cout << GridLogMessage << "Initialising 5d RNG" << std::endl;
|
std::cout << GridLogMessage << "Initialising 5d RNG" << std::endl;
|
||||||
@ -107,8 +107,8 @@ int main (int argc, char ** argv)
|
|||||||
LatticeFermion err(FGrid);
|
LatticeFermion err(FGrid);
|
||||||
|
|
||||||
std::cout << GridLogMessage << "Drawing gauge field" << std::endl;
|
std::cout << GridLogMessage << "Drawing gauge field" << std::endl;
|
||||||
LatticeGaugeField Umu(UGrid);
|
LatticeGaugeField Umu(UGrid);
|
||||||
SU3::HotConfiguration(RNG4,Umu);
|
SU3::HotConfiguration(RNG4,Umu);
|
||||||
std::cout << GridLogMessage << "Random gauge initialised " << std::endl;
|
std::cout << GridLogMessage << "Random gauge initialised " << std::endl;
|
||||||
#if 0
|
#if 0
|
||||||
Umu=1.0;
|
Umu=1.0;
|
||||||
@ -126,7 +126,7 @@ int main (int argc, char ** argv)
|
|||||||
// Naive wilson implementation
|
// Naive wilson implementation
|
||||||
////////////////////////////////////
|
////////////////////////////////////
|
||||||
// replicate across fifth dimension
|
// replicate across fifth dimension
|
||||||
LatticeGaugeField Umu5d(FGrid);
|
LatticeGaugeField Umu5d(FGrid);
|
||||||
std::vector<LatticeColourMatrix> U(4,FGrid);
|
std::vector<LatticeColourMatrix> U(4,FGrid);
|
||||||
{
|
{
|
||||||
auto Umu5d_v = Umu5d.View();
|
auto Umu5d_v = Umu5d.View();
|
||||||
@ -197,13 +197,13 @@ int main (int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
double t1=usecond();
|
double t1=usecond();
|
||||||
FGrid->Barrier();
|
FGrid->Barrier();
|
||||||
|
|
||||||
double volume=Ls; for(int mu=0;mu<Nd;mu++) volume=volume*latt4[mu];
|
double volume=Ls; for(int mu=0;mu<Nd;mu++) volume=volume*latt4[mu];
|
||||||
double flops=single_site_flops*volume*ncall;
|
double flops=single_site_flops*volume*ncall;
|
||||||
|
|
||||||
// RF/L1: 4d Wilson
|
// RF/L1: 4d Wilson
|
||||||
double data_L1 = (volume * 180 * 64 / 4 * ncall) / (1024.*1024.*1024.);
|
double data_L1 = (volume * 180 * 64 / 4 * ncall) / (1024.*1024.*1024.);
|
||||||
|
|
||||||
// L2 throughput
|
// L2 throughput
|
||||||
double data_L2 = (volume * 9 * 12 * 64 / 4 * ncall + (volume/Ls) * 8*9 * 64/4) / (1024.*1024.*1024.);
|
double data_L2 = (volume * 9 * 12 * 64 / 4 * ncall + (volume/Ls) * 8*9 * 64/4) / (1024.*1024.*1024.);
|
||||||
|
|
||||||
@ -215,14 +215,17 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage << "mflop/s per node = "<< flops/(t1-t0)/NN<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s per node = "<< flops/(t1-t0)/NN<<std::endl;
|
||||||
std::cout<<GridLogMessage << "RF/L1 GiB/s (base 2) = "<< 1000000. * data_L1/((t1-t0))<<std::endl;
|
std::cout<<GridLogMessage << "RF/L1 GiB/s (base 2) = "<< 1000000. * data_L1/((t1-t0))<<std::endl;
|
||||||
std::cout<<GridLogMessage << "L2 GiB/s (base 2) = "<< 1000000. * data_L2/((t1-t0))<<std::endl;
|
std::cout<<GridLogMessage << "L2 GiB/s (base 2) = "<< 1000000. * data_L2/((t1-t0))<<std::endl;
|
||||||
err = ref-result;
|
err = ref-result;
|
||||||
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
||||||
//exit(0);
|
//exit(0);
|
||||||
|
|
||||||
if(( norm2(err)>1.0e-4) ) {
|
if(( norm2(err)>1.0e-4) ) {
|
||||||
|
/*
|
||||||
std::cout << "RESULT\n " << result<<std::endl;
|
std::cout << "RESULT\n " << result<<std::endl;
|
||||||
std::cout << "REF \n " << ref <<std::endl;
|
std::cout << "REF \n " << ref <<std::endl;
|
||||||
std::cout << "ERR \n " << err <<std::endl;
|
std::cout << "ERR \n " << err <<std::endl;
|
||||||
|
*/
|
||||||
|
std::cout<<GridLogMessage << "WRONG RESULT" << std::endl;
|
||||||
FGrid->Barrier();
|
FGrid->Barrier();
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
@ -243,7 +246,7 @@ int main (int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
double t1=usecond();
|
double t1=usecond();
|
||||||
FGrid->Barrier();
|
FGrid->Barrier();
|
||||||
|
|
||||||
double volume=Ls; for(int mu=0;mu<Nd;mu++) volume=volume*latt4[mu];
|
double volume=Ls; for(int mu=0;mu<Nd;mu++) volume=volume*latt4[mu];
|
||||||
double flops=single_site_flops*volume*ncall;
|
double flops=single_site_flops*volume*ncall;
|
||||||
|
|
||||||
@ -251,7 +254,7 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "mflop/s per rank = "<< flops/(t1-t0)/NP<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s per rank = "<< flops/(t1-t0)/NP<<std::endl;
|
||||||
std::cout<<GridLogMessage << "mflop/s per node = "<< flops/(t1-t0)/NN<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s per node = "<< flops/(t1-t0)/NN<<std::endl;
|
||||||
err = ref-result;
|
err = ref-result;
|
||||||
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
||||||
|
|
||||||
assert (norm2(err)< 1.0e-3 );
|
assert (norm2(err)< 1.0e-3 );
|
||||||
@ -291,12 +294,14 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage << "Called DwDag"<<std::endl;
|
std::cout<<GridLogMessage << "Called DwDag"<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm dag result "<< norm2(result)<<std::endl;
|
std::cout<<GridLogMessage << "norm dag result "<< norm2(result)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm dag ref "<< norm2(ref)<<std::endl;
|
std::cout<<GridLogMessage << "norm dag ref "<< norm2(ref)<<std::endl;
|
||||||
err = ref-result;
|
err = ref-result;
|
||||||
std::cout<<GridLogMessage << "norm dag diff "<< norm2(err)<<std::endl;
|
std::cout<<GridLogMessage << "norm dag diff "<< norm2(err)<<std::endl;
|
||||||
if((norm2(err)>1.0e-4)){
|
if((norm2(err)>1.0e-4)){
|
||||||
|
/*
|
||||||
std::cout<< "DAG RESULT\n " <<ref << std::endl;
|
std::cout<< "DAG RESULT\n " <<ref << std::endl;
|
||||||
std::cout<< "DAG sRESULT\n " <<result << std::endl;
|
std::cout<< "DAG sRESULT\n " <<result << std::endl;
|
||||||
std::cout<< "DAG ERR \n " << err <<std::endl;
|
std::cout<< "DAG ERR \n " << err <<std::endl;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
LatticeFermion src_e (FrbGrid);
|
LatticeFermion src_e (FrbGrid);
|
||||||
LatticeFermion src_o (FrbGrid);
|
LatticeFermion src_o (FrbGrid);
|
||||||
@ -343,7 +348,7 @@ int main (int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
double t1=usecond();
|
double t1=usecond();
|
||||||
FGrid->Barrier();
|
FGrid->Barrier();
|
||||||
|
|
||||||
double volume=Ls; for(int mu=0;mu<Nd;mu++) volume=volume*latt4[mu];
|
double volume=Ls; for(int mu=0;mu<Nd;mu++) volume=volume*latt4[mu];
|
||||||
double flops=(single_site_flops*volume*ncall)/2.0;
|
double flops=(single_site_flops*volume*ncall)/2.0;
|
||||||
|
|
||||||
@ -363,12 +368,14 @@ int main (int argc, char ** argv)
|
|||||||
setCheckerboard(r_eo,r_o);
|
setCheckerboard(r_eo,r_o);
|
||||||
setCheckerboard(r_eo,r_e);
|
setCheckerboard(r_eo,r_e);
|
||||||
|
|
||||||
err = r_eo-result;
|
err = r_eo-result;
|
||||||
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
||||||
if((norm2(err)>1.0e-4)){
|
if((norm2(err)>1.0e-4)){
|
||||||
|
/*
|
||||||
std::cout<< "Deo RESULT\n " <<r_eo << std::endl;
|
std::cout<< "Deo RESULT\n " <<r_eo << std::endl;
|
||||||
std::cout<< "Deo REF\n " <<result << std::endl;
|
std::cout<< "Deo REF\n " <<result << std::endl;
|
||||||
std::cout<< "Deo ERR \n " << err <<std::endl;
|
std::cout<< "Deo ERR \n " << err <<std::endl;
|
||||||
|
*/
|
||||||
}
|
}
|
||||||
|
|
||||||
pickCheckerboard(Even,src_e,err);
|
pickCheckerboard(Even,src_e,err);
|
||||||
@ -381,4 +388,3 @@ int main (int argc, char ** argv)
|
|||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/*************************************************************************************
|
/*************************************************************************************
|
||||||
|
|
||||||
Grid physics library, www.github.com/paboyle/Grid
|
Grid physics library, www.github.com/paboyle/Grid
|
||||||
|
|
||||||
Source file: ./benchmarks/Benchmark_wilson.cc
|
Source file: ./benchmarks/Benchmark_wilson.cc
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ int main (int argc, char ** argv)
|
|||||||
double volume=1;
|
double volume=1;
|
||||||
for(int mu=0;mu<Nd;mu++){
|
for(int mu=0;mu<Nd;mu++){
|
||||||
volume=volume*latt_size[mu];
|
volume=volume*latt_size[mu];
|
||||||
}
|
}
|
||||||
|
|
||||||
// Only one non-zero (y)
|
// Only one non-zero (y)
|
||||||
#if 0
|
#if 0
|
||||||
@ -118,7 +118,7 @@ int main (int argc, char ** argv)
|
|||||||
for(int mu=0;mu<Nd;mu++){
|
for(int mu=0;mu<Nd;mu++){
|
||||||
U[mu] = PeekIndex<LorentzIndex>(Umu,mu);
|
U[mu] = PeekIndex<LorentzIndex>(Umu,mu);
|
||||||
}
|
}
|
||||||
|
|
||||||
{ // Naive wilson implementation
|
{ // Naive wilson implementation
|
||||||
ref = Zero();
|
ref = Zero();
|
||||||
for(int mu=0;mu<Nd;mu++){
|
for(int mu=0;mu<Nd;mu++){
|
||||||
@ -146,10 +146,10 @@ int main (int argc, char ** argv)
|
|||||||
ref = -0.5*ref;
|
ref = -0.5*ref;
|
||||||
RealD mass=0.1;
|
RealD mass=0.1;
|
||||||
|
|
||||||
typename WilsonFermionR::ImplParams params;
|
typename WilsonFermionR::ImplParams params;
|
||||||
|
|
||||||
WilsonFermionR Dw(Umu,Grid,RBGrid,mass,params);
|
WilsonFermionR Dw(Umu,Grid,RBGrid,mass,params);
|
||||||
|
|
||||||
std::cout<<GridLogMessage << "Calling Dw"<<std::endl;
|
std::cout<<GridLogMessage << "Calling Dw"<<std::endl;
|
||||||
int ncall=1000;
|
int ncall=1000;
|
||||||
//int ncall=1;
|
//int ncall=1;
|
||||||
@ -159,10 +159,10 @@ int main (int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
double t1=usecond();
|
double t1=usecond();
|
||||||
double flops=single_site_flops*volume*ncall;
|
double flops=single_site_flops*volume*ncall;
|
||||||
|
|
||||||
if (perfProfiling){
|
if (perfProfiling){
|
||||||
std::cout<<GridLogMessage << "Profiling Dw with perf"<<std::endl;
|
std::cout<<GridLogMessage << "Profiling Dw with perf"<<std::endl;
|
||||||
|
|
||||||
System::profile("kernel", [&]() {
|
System::profile("kernel", [&]() {
|
||||||
for(int i=0;i<ncall;i++){
|
for(int i=0;i<ncall;i++){
|
||||||
Dw.Dhop(src,result,0);
|
Dw.Dhop(src,result,0);
|
||||||
@ -175,16 +175,18 @@ int main (int argc, char ** argv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
double data = (volume * 180 * 64 / 4 * ncall) / (1024.*1024.*1024.);
|
double data = (volume * 180 * 64 / 4 * ncall) / (1024.*1024.*1024.);
|
||||||
|
|
||||||
std::cout<<GridLogMessage << "Called Dw"<<std::endl;
|
std::cout<<GridLogMessage << "Called Dw"<<std::endl;
|
||||||
std::cout<<GridLogMessage << "flops per site " << single_site_flops << std::endl;
|
std::cout<<GridLogMessage << "flops per site " << single_site_flops << std::endl;
|
||||||
std::cout<<GridLogMessage << "norm result "<< norm2(result)<<std::endl;
|
std::cout<<GridLogMessage << "norm result "<< norm2(result)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm ref "<< norm2(ref)<<std::endl;
|
std::cout<<GridLogMessage << "norm ref "<< norm2(ref)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
std::cout<<GridLogMessage << "mflop/s = "<< flops/(t1-t0)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "GiB/s (base 2) = "<< 1000000. * data/((t1-t0))<<std::endl;
|
std::cout<<GridLogMessage << "GiB/s (base 2) = "<< 1000000. * data/((t1-t0))<<std::endl;
|
||||||
err = ref-result;
|
err = ref-result;
|
||||||
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
||||||
|
|
||||||
|
// guard
|
||||||
|
double err0 = norm2(err);
|
||||||
|
|
||||||
// for(int ss=0;ss<10;ss++ ){
|
// for(int ss=0;ss<10;ss++ ){
|
||||||
for(int ss=0;ss<0;ss++ ){
|
for(int ss=0;ss<0;ss++ ){
|
||||||
@ -230,8 +232,13 @@ int main (int argc, char ** argv)
|
|||||||
std::cout<<GridLogMessage << "Called DwDag"<<std::endl;
|
std::cout<<GridLogMessage << "Called DwDag"<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm result "<< norm2(result)<<std::endl;
|
std::cout<<GridLogMessage << "norm result "<< norm2(result)<<std::endl;
|
||||||
std::cout<<GridLogMessage << "norm ref "<< norm2(ref)<<std::endl;
|
std::cout<<GridLogMessage << "norm ref "<< norm2(ref)<<std::endl;
|
||||||
err = ref-result;
|
err = ref-result;
|
||||||
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
std::cout<<GridLogMessage << "norm diff "<< norm2(err)<<std::endl;
|
||||||
|
|
||||||
|
// guard
|
||||||
|
double err1 = norm2(err);
|
||||||
|
assert(fabs(err0) < 1.0e-3);
|
||||||
|
assert(fabs(err1) < 1.0e-3);
|
||||||
|
|
||||||
Grid_finalize();
|
Grid_finalize();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user