mirror of
				https://github.com/paboyle/Grid.git
				synced 2025-11-03 21:44:33 +00:00 
			
		
		
		
	AddSub based alternate SU3 routine
This commit is contained in:
		@@ -58,7 +58,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
 | 
					  std::cout<<GridLogMessage << "Grid is setup to use "<<threads<<" threads"<<std::endl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  std::vector<int> latt4 = GridDefaultLatt();
 | 
					  std::vector<int> latt4 = GridDefaultLatt();
 | 
				
			||||||
  const int Ls=16;
 | 
					  const int Ls=8;
 | 
				
			||||||
  GridCartesian         * UGrid   = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
 | 
					  GridCartesian         * UGrid   = SpaceTimeGrid::makeFourDimGrid(GridDefaultLatt(), GridDefaultSimd(Nd,vComplex::Nsimd()),GridDefaultMpi());
 | 
				
			||||||
  GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
 | 
					  GridRedBlackCartesian * UrbGrid = SpaceTimeGrid::makeFourDimRedBlackGrid(UGrid);
 | 
				
			||||||
  GridCartesian         * FGrid   = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
 | 
					  GridCartesian         * FGrid   = SpaceTimeGrid::makeFiveDimGrid(Ls,UGrid);
 | 
				
			||||||
@@ -122,7 +122,7 @@ int main (int argc, char ** argv)
 | 
				
			|||||||
  DomainWallFermionR Dw(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,params);
 | 
					  DomainWallFermionR Dw(Umu,*FGrid,*FrbGrid,*UGrid,*UrbGrid,mass,M5,params);
 | 
				
			||||||
  
 | 
					  
 | 
				
			||||||
  std::cout<<GridLogMessage << "Calling Dw"<<std::endl;
 | 
					  std::cout<<GridLogMessage << "Calling Dw"<<std::endl;
 | 
				
			||||||
  int ncall=100000;
 | 
					  int ncall=100;
 | 
				
			||||||
  {
 | 
					  {
 | 
				
			||||||
    double t0=usecond();
 | 
					    double t0=usecond();
 | 
				
			||||||
    for(int i=0;i<ncall;i++){
 | 
					    for(int i=0;i<ncall;i++){
 | 
				
			||||||
 
 | 
				
			|||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -30,7 +30,7 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
#if defined(AVX512) || defined (IMCI)
 | 
					#if defined(AVX512) || defined (IMCI)
 | 
				
			||||||
//#if defined (IMCI)
 | 
					//#if defined (IMCI)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <simd/Avx512Asm.h>
 | 
					#include <simd/Intel512wilson.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#undef VLOAD
 | 
					#undef VLOAD
 | 
				
			||||||
#undef VSTORE
 | 
					#undef VSTORE
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										1044
									
								
								lib/simd/Avx512Asm.h
									
									
									
									
									
								
							
							
						
						
									
										1044
									
								
								lib/simd/Avx512Asm.h
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							@@ -85,6 +85,16 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
#define ZEND2d(Criir,Ciirr, tmp)  "vshufpd $0x55," #Ciirr "," #Ciirr "," #tmp   ";\n"\
 | 
					#define ZEND2d(Criir,Ciirr, tmp)  "vshufpd $0x55," #Ciirr "," #Ciirr "," #tmp   ";\n"\
 | 
				
			||||||
                         	  "vsubpd  " #tmp "," #Ciirr "," #Criir"{%k7};\n" // ri+ir ; ri+ir,rr-ii
 | 
					                         	  "vsubpd  " #tmp "," #Ciirr "," #Criir"{%k7};\n" // ri+ir ; ri+ir,rr-ii
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VMOVRDUPd(OFF,A,DEST)       "vpshufd  $0x44," #OFF "*64(" #A ")," #DEST  ";\n" // 32 bit level: 1,0,3,2
 | 
				
			||||||
 | 
					#define VMOVIDUPd(OFF,A,DEST)       "vpshufd  $0xee," #OFF "*64(" #A ")," #DEST  ";\n" // 32 bit level: 3,2,3,2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VMOVRDUPf(OFF,PTR,DEST)         "vmovsldup " #OFF "*64(" #PTR "), " #DEST  ";\n"
 | 
				
			||||||
 | 
					#define VMOVIDUPf(OFF,PTR,DEST)         "vmovshdup " #OFF "*64(" #PTR "), " #DEST  ";\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define VMADDSUBf(A,B,accum) "vfmaddsub231ps   " #A "," #B "," #accum  ";\n"
 | 
				
			||||||
 | 
					#define VMADDSUBd(A,B,accum) "vfmaddsub231pd   " #A "," #B "," #accum  ";\n"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					                                  
 | 
				
			||||||
#define VTIMESI0f(A,DEST, Z)   VSHUFf(A,DEST)	  
 | 
					#define VTIMESI0f(A,DEST, Z)   VSHUFf(A,DEST)	  
 | 
				
			||||||
#define VTIMESI1f(A,DEST, Z)   "vaddps  " #DEST "," #Z "," #DEST"{%k6}"  ";\n"
 | 
					#define VTIMESI1f(A,DEST, Z)   "vaddps  " #DEST "," #Z "," #DEST"{%k6}"  ";\n"
 | 
				
			||||||
#define VTIMESI2f(A,DEST, Z)   "vsubps  " #DEST "," #Z "," #DEST"{%k7}"  ";\n"
 | 
					#define VTIMESI2f(A,DEST, Z)   "vsubps  " #DEST "," #Z "," #DEST"{%k7}"  ";\n"
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -28,18 +28,6 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
#ifndef GRID_ASM_AV512_ADDSUB_H
 | 
					#ifndef GRID_ASM_AV512_ADDSUB_H
 | 
				
			||||||
#define GRID_ASM_AV512_ADDSUB_H
 | 
					#define GRID_ASM_AV512_ADDSUB_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////	  
 | 
					 | 
				
			||||||
// Knights Landing specials
 | 
					 | 
				
			||||||
////////////////////////////////////////////////////////////	  
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define VMOVRDUPd(OFF,A,DEST)       "vpshufd  $0x44," #OFF"*64("#A ")," #DEST  ";\n" // 32 bit level: 1,0,3,2
 | 
					 | 
				
			||||||
#define VMOVIDUPd(OFF,A,DEST)       "vpshufd  $0xee," #OFF"*64("#A ")," #DEST  ";\n" // 32 bit level: 3,2,3,2
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define VMOVRDUPf(O,P,DEST)         "vmovsldup " #OFF "*64(" #PTR "), " #DEST  ";\n"
 | 
					 | 
				
			||||||
#define VMOVIDUPf(O,P,DEST)         "vmovshdup " #OFF "*64(" #PTR "), " #DEST  ";\n"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define VMADDSUBf(Aii,Bri,accum) "vfmaddsub231ps   " #A "," #B "," #accum  ";\n"
 | 
					 | 
				
			||||||
#define VMADDSUBd(Aii,Bri,accum) "vfmaddsub231pd   " #A "," #B "," #accum  ";\n"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////
 | 
				
			||||||
// Building blocks for SU3 x 2spinor
 | 
					// Building blocks for SU3 x 2spinor
 | 
				
			||||||
@@ -48,7 +36,7 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
//  6 Chi shuffles ir,ri
 | 
					//  6 Chi shuffles ir,ri
 | 
				
			||||||
// 6muls, 30 fmaddsubs
 | 
					// 6muls, 30 fmaddsubs
 | 
				
			||||||
////////////////////////////////////////////////////////////////
 | 
					////////////////////////////////////////////////////////////////
 | 
				
			||||||
#define MULT_ADDSUB_2SPIN_PF(ptr)	\
 | 
					#define MULT_ADDSUB_2SPIN(ptr)	\
 | 
				
			||||||
	   LOAD64(%r8,ptr)			\
 | 
						   LOAD64(%r8,ptr)			\
 | 
				
			||||||
  __asm__ (					\
 | 
					  __asm__ (					\
 | 
				
			||||||
	   VMOVIDUPf(0,%r8,Z0 ) \
 | 
						   VMOVIDUPf(0,%r8,Z0 ) \
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -66,6 +66,8 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
#define Uir %zmm24 
 | 
					#define Uir %zmm24 
 | 
				
			||||||
//#define ONE %zmm24 
 | 
					//#define ONE %zmm24 
 | 
				
			||||||
#define Uri %zmm25  
 | 
					#define Uri %zmm25  
 | 
				
			||||||
 | 
					#define T1 %zmm24
 | 
				
			||||||
 | 
					#define T2 %zmm25
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define Z0 %zmm26
 | 
					#define Z0 %zmm26
 | 
				
			||||||
#define Z1 %zmm27
 | 
					#define Z1 %zmm27
 | 
				
			||||||
@@ -288,7 +290,9 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
	   ZEND2(UChi_02,Z4,Chi_02)			\
 | 
						   ZEND2(UChi_02,Z4,Chi_02)			\
 | 
				
			||||||
	   ZEND2(UChi_12,Z5,Chi_12)	     );
 | 
						   ZEND2(UChi_12,Z5,Chi_12)	     );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MULT_2SPIN(ptr)	MULT_2SPIN_PF(ptr,ptr,VPREFETCHG);
 | 
					#define MULT_2SPINa(ptr)	MULT_2SPIN_PF(ptr,ptr,VPREFETCHG);
 | 
				
			||||||
 | 
					#define MULT_2SPIN(ptr)	MULT_ADDSUB_2SPIN(ptr);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define MULT_2SPIN_PFXM(ptr,pf) MULT_2SPIN_PF(ptr,pf,VPREFETCHNTA)
 | 
					#define MULT_2SPIN_PFXM(ptr,pf) MULT_2SPIN_PF(ptr,pf,VPREFETCHNTA)
 | 
				
			||||||
#define MULT_2SPIN_PFYM(ptr,pf) MULT_2SPIN_PF(ptr,pf,VPREFETCHNTA)
 | 
					#define MULT_2SPIN_PFYM(ptr,pf) MULT_2SPIN_PF(ptr,pf,VPREFETCHNTA)
 | 
				
			||||||
#define MULT_2SPIN_PFZM(ptr,pf) MULT_2SPIN_PF(ptr,pf,VPREFETCHNTA)
 | 
					#define MULT_2SPIN_PFZM(ptr,pf) MULT_2SPIN_PF(ptr,pf,VPREFETCHNTA)
 | 
				
			||||||
@@ -750,8 +754,63 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
  VPERM3(Chi_11,Chi_11)	\
 | 
					  VPERM3(Chi_11,Chi_11)	\
 | 
				
			||||||
  VPERM3(Chi_12,Chi_12) );
 | 
					  VPERM3(Chi_12,Chi_12) );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef AVX512
 | 
					#define MULT_ADDSUB_2SPIN1(ptr)  \
 | 
				
			||||||
#include <simd/Intel512avxAddsub.h>
 | 
					           LOAD64(%r8,ptr)                      
 | 
				
			||||||
#endif
 | 
					/*
 | 
				
			||||||
 | 
					 * __asm__ (                                     \
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					  VMUL(Z0,%zmm2,%zmm3) \
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#define MULT_ADDSUB_2SPIN(ptr)  \
 | 
				
			||||||
 | 
					           LOAD64(%r8,ptr)                      \
 | 
				
			||||||
 | 
					  __asm__ (                                     \
 | 
				
			||||||
 | 
					           VMOVIDUP(0,%r8,Z0 ) \
 | 
				
			||||||
 | 
					           VMOVIDUP(3,%r8,Z1 )\
 | 
				
			||||||
 | 
					           VMOVIDUP(6,%r8,Z2 )\
 | 
				
			||||||
 | 
					           VSHUF(Chi_00,T1)    \
 | 
				
			||||||
 | 
					           VSHUF(Chi_10,T2)    \
 | 
				
			||||||
 | 
					                                \
 | 
				
			||||||
 | 
					           VMUL(Z0,T1,UChi_00)            VMOVRDUP(0,%r8,Z3 ) \
 | 
				
			||||||
 | 
					           VMUL(Z0,T2,UChi_10)            VMOVRDUP(3,%r8,Z4 ) \
 | 
				
			||||||
 | 
					           VMUL(Z1,T1,UChi_01)            VMOVRDUP(6,%r8,Z5 ) \
 | 
				
			||||||
 | 
					           VMUL(Z1,T2,UChi_11)            VMOVIDUP(1,%r8,Z0 ) \
 | 
				
			||||||
 | 
					           VMUL(Z2,T1,UChi_02)            VMOVIDUP(4,%r8,Z1 ) \
 | 
				
			||||||
 | 
					           VMUL(Z2,T2,UChi_12)            VMOVIDUP(7,%r8,Z2 ) \
 | 
				
			||||||
 | 
					                                \
 | 
				
			||||||
 | 
					           VMADDSUB(Z3,Chi_00,UChi_00)    VSHUF(Chi_01,T1)    \
 | 
				
			||||||
 | 
					           VMADDSUB(Z3,Chi_10,UChi_10)    VSHUF(Chi_11,T2)    \
 | 
				
			||||||
 | 
					           VMADDSUB(Z4,Chi_00,UChi_01)    VMOVRDUP(1,%r8,Z3 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z4,Chi_10,UChi_11)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z5,Chi_00,UChi_02)    VMOVRDUP(4,%r8,Z4 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z5,Chi_10,UChi_12)\
 | 
				
			||||||
 | 
					                                       \
 | 
				
			||||||
 | 
					           VMADDSUB(Z0,T1,UChi_00)        VMOVRDUP(7,%r8,Z5 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z0,T2,UChi_10)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z1,T1,UChi_01)        VMOVIDUP(2,%r8,Z0 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z1,T2,UChi_11)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z2,T1,UChi_02)        VMOVIDUP(5,%r8,Z1 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z2,T2,UChi_12)        VMOVIDUP(8,%r8,Z2 ) \
 | 
				
			||||||
 | 
					                                                                \
 | 
				
			||||||
 | 
					           VMADDSUB(Z3,Chi_01,UChi_00)    VSHUF(Chi_02,T1)    \
 | 
				
			||||||
 | 
					           VMADDSUB(Z3,Chi_11,UChi_10)    VSHUF(Chi_12,T2)    \
 | 
				
			||||||
 | 
					           VMADDSUB(Z4,Chi_01,UChi_01)    VMOVRDUP(2,%r8,Z3 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z4,Chi_11,UChi_11)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z5,Chi_01,UChi_02)    VMOVRDUP(5,%r8,Z4 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z5,Chi_11,UChi_12)\
 | 
				
			||||||
 | 
					                                \
 | 
				
			||||||
 | 
					           VMADDSUB(Z0,T1,UChi_00)        VMOVRDUP(8,%r8,Z5 ) \
 | 
				
			||||||
 | 
					           VMADDSUB(Z0,T2,UChi_10)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z1,T1,UChi_01)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z1,T2,UChi_11)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z2,T1,UChi_02)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z2,T2,UChi_12)\
 | 
				
			||||||
 | 
					                                   \
 | 
				
			||||||
 | 
					           VMADDSUB(Z3,Chi_02,UChi_00)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z3,Chi_12,UChi_10)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z4,Chi_02,UChi_01)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z4,Chi_12,UChi_11)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z5,Chi_02,UChi_02)\
 | 
				
			||||||
 | 
					           VMADDSUB(Z5,Chi_12,UChi_12)\
 | 
				
			||||||
 | 
					                                                );
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,13 +1,5 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
bin_PROGRAMS = Test_GaugeAction Test_RectPlaq Test_cayley_cg Test_cayley_coarsen_support Test_cayley_even_odd Test_cayley_ldop_cr Test_cf_coarsen_support Test_cf_cr_unprec Test_cheby Test_contfrac_cg Test_contfrac_even_odd Test_contfrac_force Test_cshift Test_cshift_red_black Test_dwf_cg_prec Test_dwf_cg_schur Test_dwf_cg_unprec Test_dwf_cr_unprec Test_dwf_even_odd Test_dwf_force Test_dwf_fpgcr Test_dwf_gpforce Test_dwf_hdcr Test_dwf_lanczos Test_gamma Test_gp_rect_force Test_gparity Test_gpdwf_force Test_gpwilson_even_odd Test_hmc_EODWFRatio Test_hmc_EODWFRatio_Gparity Test_hmc_EOWilsonFermionGauge Test_hmc_EOWilsonRatio Test_hmc_GparityIwasakiGauge Test_hmc_GparityWilsonGauge Test_hmc_IwasakiGauge Test_hmc_RectGauge Test_hmc_WilsonFermionGauge Test_hmc_WilsonGauge Test_hmc_WilsonRatio Test_lie_generators Test_main Test_multishift_sqrt Test_nersc_io Test_partfrac_force Test_quenched_update Test_rect_force Test_remez Test_rhmc_EOWilson1p1 Test_rhmc_EOWilsonRatio Test_rhmc_Wilson1p1 Test_rhmc_WilsonRatio Test_rng Test_rng_fixed Test_serialisation Test_simd Test_stencil Test_synthetic_lanczos Test_wilson_cg_prec Test_wilson_cg_schur Test_wilson_cg_unprec Test_wilson_cr_unprec Test_wilson_even_odd Test_wilson_force Test_wilson_force_phiMdagMphi Test_wilson_force_phiMphi Test_wilson_tm_even_odd 
 | 
					bin_PROGRAMS = Test_cayley_cg Test_cayley_coarsen_support Test_cayley_even_odd Test_cayley_ldop_cr Test_cf_coarsen_support Test_cf_cr_unprec Test_cheby Test_contfrac_cg Test_contfrac_even_odd Test_contfrac_force Test_cshift Test_cshift_red_black Test_dwf_cg_prec Test_dwf_cg_schur Test_dwf_cg_unprec Test_dwf_cr_unprec Test_dwf_even_odd Test_dwf_force Test_dwf_fpgcr Test_dwf_gpforce Test_dwf_hdcr Test_dwf_lanczos Test_gamma Test_GaugeAction Test_gparity Test_gpdwf_force Test_gp_rect_force Test_gpwilson_even_odd Test_hmc_EODWFRatio Test_hmc_EODWFRatio_Gparity Test_hmc_EOWilsonFermionGauge Test_hmc_EOWilsonRatio Test_hmc_GparityIwasakiGauge Test_hmc_GparityWilsonGauge Test_hmc_IwasakiGauge Test_hmc_RectGauge Test_hmc_WilsonFermionGauge Test_hmc_WilsonGauge Test_hmc_WilsonRatio Test_lie_generators Test_main Test_multishift_sqrt Test_nersc_io Test_partfrac_force Test_quenched_update Test_rect_force Test_RectPlaq Test_remez Test_rhmc_EOWilson1p1 Test_rhmc_EOWilsonRatio Test_rhmc_Wilson1p1 Test_rhmc_WilsonRatio Test_rng Test_rng_fixed Test_serialisation Test_simd Test_stencil Test_synthetic_lanczos Test_wilson_cg_prec Test_wilson_cg_schur Test_wilson_cg_unprec Test_wilson_cr_unprec Test_wilson_even_odd Test_wilson_force Test_wilson_force_phiMdagMphi Test_wilson_force_phiMphi Test_wilson_tm_even_odd 
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Test_GaugeAction_SOURCES=Test_GaugeAction.cc
 | 
					 | 
				
			||||||
Test_GaugeAction_LDADD=-lGrid
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
Test_RectPlaq_SOURCES=Test_RectPlaq.cc
 | 
					 | 
				
			||||||
Test_RectPlaq_LDADD=-lGrid
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_cayley_cg_SOURCES=Test_cayley_cg.cc
 | 
					Test_cayley_cg_SOURCES=Test_cayley_cg.cc
 | 
				
			||||||
@@ -102,8 +94,8 @@ Test_gamma_SOURCES=Test_gamma.cc
 | 
				
			|||||||
Test_gamma_LDADD=-lGrid
 | 
					Test_gamma_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_gp_rect_force_SOURCES=Test_gp_rect_force.cc
 | 
					Test_GaugeAction_SOURCES=Test_GaugeAction.cc
 | 
				
			||||||
Test_gp_rect_force_LDADD=-lGrid
 | 
					Test_GaugeAction_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_gparity_SOURCES=Test_gparity.cc
 | 
					Test_gparity_SOURCES=Test_gparity.cc
 | 
				
			||||||
@@ -114,6 +106,10 @@ Test_gpdwf_force_SOURCES=Test_gpdwf_force.cc
 | 
				
			|||||||
Test_gpdwf_force_LDADD=-lGrid
 | 
					Test_gpdwf_force_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test_gp_rect_force_SOURCES=Test_gp_rect_force.cc
 | 
				
			||||||
 | 
					Test_gp_rect_force_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_gpwilson_even_odd_SOURCES=Test_gpwilson_even_odd.cc
 | 
					Test_gpwilson_even_odd_SOURCES=Test_gpwilson_even_odd.cc
 | 
				
			||||||
Test_gpwilson_even_odd_LDADD=-lGrid
 | 
					Test_gpwilson_even_odd_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -190,6 +186,10 @@ Test_rect_force_SOURCES=Test_rect_force.cc
 | 
				
			|||||||
Test_rect_force_LDADD=-lGrid
 | 
					Test_rect_force_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Test_RectPlaq_SOURCES=Test_RectPlaq.cc
 | 
				
			||||||
 | 
					Test_RectPlaq_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Test_remez_SOURCES=Test_remez.cc
 | 
					Test_remez_SOURCES=Test_remez.cc
 | 
				
			||||||
Test_remez_LDADD=-lGrid
 | 
					Test_remez_LDADD=-lGrid
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -27,7 +27,7 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
 | 
				
			|||||||
    /*  END LEGAL */
 | 
					    /*  END LEGAL */
 | 
				
			||||||
#include <Grid.h>
 | 
					#include <Grid.h>
 | 
				
			||||||
#include <PerfCount.h>
 | 
					#include <PerfCount.h>
 | 
				
			||||||
#include <simd/Avx512Asm.h>
 | 
					#include <simd/Intel512wilson.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
using namespace Grid;
 | 
					using namespace Grid;
 | 
				
			||||||
@@ -261,6 +261,10 @@ int main(int argc,char **argv)
 | 
				
			|||||||
#undef ZLOAD
 | 
					#undef ZLOAD
 | 
				
			||||||
#undef ZMUL
 | 
					#undef ZMUL
 | 
				
			||||||
#undef ZMADD
 | 
					#undef ZMADD
 | 
				
			||||||
 | 
					#undef VMOVIDUP 
 | 
				
			||||||
 | 
					#undef VMOVRDUP 
 | 
				
			||||||
 | 
					#undef VMADDSUB
 | 
				
			||||||
 | 
					#undef VSHUF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define VZERO(A) VZEROd(A)
 | 
					#define VZERO(A) VZEROd(A)
 | 
				
			||||||
#define VTIMESI(A,B,C) VTIMESId(A,B,C)
 | 
					#define VTIMESI(A,B,C) VTIMESId(A,B,C)
 | 
				
			||||||
@@ -268,8 +272,8 @@ int main(int argc,char **argv)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
#define VLOAD(OFF,PTR,DEST)       VLOADd(OFF,PTR,DEST)
 | 
					#define VLOAD(OFF,PTR,DEST)       VLOADd(OFF,PTR,DEST)
 | 
				
			||||||
#define VSTORE(OFF,PTR,SRC)       VSTOREd(OFF,PTR,SRC)
 | 
					#define VSTORE(OFF,PTR,SRC)       VSTOREd(OFF,PTR,SRC)
 | 
				
			||||||
#define VMUL(Uri,Uir,Chi,UChi,Z)  VMULd(Uri,Uir,Chi,UChi,Z)
 | 
					#define VMUL(Uri,Uir,Chi)         VMULd(Uri,Uir,Chi)
 | 
				
			||||||
#define VMADD(Uri,Uir,Chi,UChi,Z) VMADDd(Uri,Uir,Chi,UChi,Z)
 | 
					#define VMADD(Uri,Uir,Chi)        VMADDd(Uri,Uir,Chi)
 | 
				
			||||||
#define ZEND1(A,B,C)              ZEND1d(A,B,C)
 | 
					#define ZEND1(A,B,C)              ZEND1d(A,B,C)
 | 
				
			||||||
#define ZEND2(A,B,C)              ZEND2d(A,B,C)
 | 
					#define ZEND2(A,B,C)              ZEND2d(A,B,C)
 | 
				
			||||||
#define ZLOAD(A,B,C,D)            ZLOADd(A,B,C,D)
 | 
					#define ZLOAD(A,B,C,D)            ZLOADd(A,B,C,D)
 | 
				
			||||||
@@ -277,6 +281,10 @@ int main(int argc,char **argv)
 | 
				
			|||||||
#define ZMADD(A,B,C,D,E)          ZMADDd(A,B,C,D,E)
 | 
					#define ZMADD(A,B,C,D,E)          ZMADDd(A,B,C,D,E)
 | 
				
			||||||
#define ZMULMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMULMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
					#define ZMULMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMULMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
				
			||||||
#define ZMADDMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMADDMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
					#define ZMADDMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMADDMEM2SPd(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
				
			||||||
 | 
					#define VMOVIDUP(A,B,C) VMOVIDUPd(A,B,C)
 | 
				
			||||||
 | 
					#define VMOVRDUP(A,B,C) VMOVRDUPd(A,B,C)
 | 
				
			||||||
 | 
					#define VMADDSUB(A,B,accum) VMADDSUBd(A,B,accum) 
 | 
				
			||||||
 | 
					#define VSHUF(A,B) VSHUFd(A,B)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define zz Z0
 | 
					#define zz Z0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -424,17 +432,21 @@ void WilsonDslashAvx512(void *ptr1,void *ptr2,void *ptr3)
 | 
				
			|||||||
#undef VTIMESMINUSI
 | 
					#undef VTIMESMINUSI
 | 
				
			||||||
#undef ZMULMEM2SP
 | 
					#undef ZMULMEM2SP
 | 
				
			||||||
#undef ZMADDMEM2SP
 | 
					#undef ZMADDMEM2SP
 | 
				
			||||||
 | 
					#undef VMOVIDUP 
 | 
				
			||||||
 | 
					#undef VMOVRDUP 
 | 
				
			||||||
 | 
					#undef VMADDSUB
 | 
				
			||||||
 | 
					#undef VSHUF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define VZERO(A) VZEROf(A)
 | 
					#define VZERO(A) VZEROf(A)
 | 
				
			||||||
#define VMOV(A,B) VMOVf(A,B)
 | 
					#define VMOV(A,B) VMOVf(A,B)
 | 
				
			||||||
#define VADD(A,B,C) VADDf(A,B,C)
 | 
					#define VADD(A,B,C) VADDf(A,B,C)
 | 
				
			||||||
#define VSUB(A,B,C) VSUBf(A,B,C)
 | 
					#define VSUB(A,B,C) VSUBf(A,B,C)
 | 
				
			||||||
#define VTIMESI(A,B,C) VTIMESIf(A,B,C)
 | 
					#define VTIMESI(A,B,C) VTIMESIf(A,B,C)
 | 
				
			||||||
#define VTIMESMINUSI(A,B,C) VTIMESMINUSIf(A,B,C)
 | 
					#define VTIMESMINUSI(A,B,C) VTIMESMINUSIf(A,B,C)
 | 
				
			||||||
 | 
					 | 
				
			||||||
#define VLOAD(OFF,PTR,DEST)       VLOADf(OFF,PTR,DEST)
 | 
					#define VLOAD(OFF,PTR,DEST)       VLOADf(OFF,PTR,DEST)
 | 
				
			||||||
#define VSTORE(OFF,PTR,SRC)       VSTOREf(OFF,PTR,SRC)
 | 
					#define VSTORE(OFF,PTR,SRC)       VSTOREf(OFF,PTR,SRC)
 | 
				
			||||||
#define VMUL(Uri,Uir,Chi,UChi,Z)  VMULf(Uri,Uir,Chi,UChi,Z)
 | 
					#define VMUL(Uri,Uir,Chi)  VMULf(Uri,Uir,Chi)
 | 
				
			||||||
#define VMADD(Uri,Uir,Chi,UChi,Z) VMADDf(Uri,Uir,Chi,UChi,Z)
 | 
					#define VMADD(Uri,Uir,Chi) VMADDf(Uri,Uir,Chi)
 | 
				
			||||||
#define ZEND1(A,B,C)               ZEND1f(A,B,C)
 | 
					#define ZEND1(A,B,C)               ZEND1f(A,B,C)
 | 
				
			||||||
#define ZEND2(A,B,C)               ZEND2f(A,B,C)
 | 
					#define ZEND2(A,B,C)               ZEND2f(A,B,C)
 | 
				
			||||||
#define ZLOAD(A,B,C,D)            ZLOADf(A,B,C,D)
 | 
					#define ZLOAD(A,B,C,D)            ZLOADf(A,B,C,D)
 | 
				
			||||||
@@ -442,6 +454,10 @@ void WilsonDslashAvx512(void *ptr1,void *ptr2,void *ptr3)
 | 
				
			|||||||
#define ZMADD(A,B,C,D,E)          ZMADDf(A,B,C,D,E)
 | 
					#define ZMADD(A,B,C,D,E)          ZMADDf(A,B,C,D,E)
 | 
				
			||||||
#define ZMULMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)  ZMULMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
					#define ZMULMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr)  ZMULMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
				
			||||||
#define ZMADDMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMADDMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
					#define ZMADDMEM2SP(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) ZMADDMEM2SPf(O,P,tmp,B,C,Briir,Biirr,Criir,Ciirr) 
 | 
				
			||||||
 | 
					#define VMOVIDUP(A,B,C) VMOVIDUPf(A,B,C)
 | 
				
			||||||
 | 
					#define VMOVRDUP(A,B,C) VMOVRDUPf(A,B,C)
 | 
				
			||||||
 | 
					#define VMADDSUB(A,B,accum) VMADDSUBf(A,B,accum) 
 | 
				
			||||||
 | 
					#define VSHUF(A,B) VSHUFf(A,B)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void ZmulF(void *ptr1,void *ptr2,void *ptr3)
 | 
					void ZmulF(void *ptr1,void *ptr2,void *ptr3)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
@@ -528,7 +544,8 @@ void WilsonDslashAvx512F(void *ptr1,void *ptr2,void *ptr3)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  LOAD_CHI(ptr1);
 | 
					  LOAD_CHI(ptr1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  MULT_2SPIN(ptr2);
 | 
					  MULT_ADDSUB_2SPIN(ptr2);
 | 
				
			||||||
 | 
					  //MULT_2SPIN(ptr2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  SAVE_UCHI(ptr3);
 | 
					  SAVE_UCHI(ptr3);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user