mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-14 01:35:36 +00:00
Merge branch 'feature/half-prec-comms' of https://github.com/paboyle/Grid into feature/half-prec-comms
This commit is contained in:
commit
916e9e1d3e
@ -425,13 +425,15 @@ void WilsonFermion5D<Impl>::DhopInternalOverlappedComms(StencilImpl & st, Lebesg
|
|||||||
#else
|
#else
|
||||||
DhopComputeTime2-=usecond();
|
DhopComputeTime2-=usecond();
|
||||||
if (dag == DaggerYes) {
|
if (dag == DaggerYes) {
|
||||||
parallel_for (int ss = 0; ss < U._grid->oSites(); ss++) {
|
#pragma omp parallel for schedule(static,4)
|
||||||
|
for (int ss = 0; ss < U._grid->oSites(); ss++) {
|
||||||
int sU = ss;
|
int sU = ss;
|
||||||
int sF = LLs * sU;
|
int sF = LLs * sU;
|
||||||
Kernels::DhopSiteDag(st,lo,U,st.CommBuf(),sF,sU,LLs,1,in,out,0,1);
|
Kernels::DhopSiteDag(st,lo,U,st.CommBuf(),sF,sU,LLs,1,in,out,0,1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
parallel_for (int ss = 0; ss < U._grid->oSites(); ss++) {
|
#pragma omp parallel for schedule(static,1)
|
||||||
|
for (int ss = 0; ss < U._grid->oSites(); ss++) {
|
||||||
int sU = ss;
|
int sU = ss;
|
||||||
int sF = LLs * sU;
|
int sF = LLs * sU;
|
||||||
Kernels::DhopSite(st,lo,U,st.CommBuf(),sF,sU,LLs,1,in,out,0,1);
|
Kernels::DhopSite(st,lo,U,st.CommBuf(),sF,sU,LLs,1,in,out,0,1);
|
||||||
|
@ -33,8 +33,8 @@ directory
|
|||||||
namespace Grid {
|
namespace Grid {
|
||||||
namespace QCD {
|
namespace QCD {
|
||||||
|
|
||||||
int WilsonKernelsStatic::Opt = WilsonKernelsStatic::OptGeneric;
|
int WilsonKernelsStatic::Opt = WilsonKernelsStatic::OptGeneric;
|
||||||
int WilsonKernelsStatic::Comms = WilsonKernelsStatic::CommsAndCompute;
|
int WilsonKernelsStatic::Comms = WilsonKernelsStatic::CommsAndCompute;
|
||||||
|
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
WilsonKernels<Impl>::WilsonKernels(const ImplParams &p) : Base(p){};
|
WilsonKernels<Impl>::WilsonKernels(const ImplParams &p) : Base(p){};
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
RECON; \
|
RECON; \
|
||||||
|
|
||||||
#define ASM_LEG_XP(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
#define ASM_LEG_XP(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
||||||
base = st.GetInfo(ptype,local,perm,NxtDir,ent,plocal); ent++; \
|
base = st.GetInfo(ptype,local,perm,Dir,ent,plocal); ent++; \
|
||||||
PF_GAUGE(Xp); \
|
PF_GAUGE(Xp); \
|
||||||
PREFETCH1_CHIMU(base); \
|
PREFETCH1_CHIMU(base); \
|
||||||
ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON)
|
ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON)
|
||||||
@ -75,29 +75,24 @@
|
|||||||
LOAD64(%r10,isigns); \
|
LOAD64(%r10,isigns); \
|
||||||
PROJ(base); \
|
PROJ(base); \
|
||||||
MAYBEPERM(PERMUTE_DIR,perm); \
|
MAYBEPERM(PERMUTE_DIR,perm); \
|
||||||
} else if ( st.same_dir[Dir] ) { \
|
}else if ( st.same_node[Dir] ) {LOAD_CHI(base);} \
|
||||||
LOAD_CHI(base); \
|
|
||||||
} \
|
|
||||||
base = st.GetInfo(ptype,local,perm,NxtDir,ent,plocal); ent++; \
|
|
||||||
if ( local || st.same_node[Dir] ) { \
|
if ( local || st.same_node[Dir] ) { \
|
||||||
PREFETCH_CHIMU(base); \
|
|
||||||
MULT_2SPIN_DIR_PF(Dir,basep); \
|
MULT_2SPIN_DIR_PF(Dir,basep); \
|
||||||
LOAD64(%r10,isigns); \
|
LOAD64(%r10,isigns); \
|
||||||
RECON; \
|
RECON; \
|
||||||
}
|
} \
|
||||||
|
base = st.GetInfo(ptype,local,perm,NxtDir,ent,plocal); ent++; \
|
||||||
|
PREFETCH_CHIMU(base); \
|
||||||
|
|
||||||
#define ASM_LEG_XP(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
#define ASM_LEG_XP(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
||||||
base = st.GetInfo(ptype,local,perm,NxtDir,ent,plocal); ent++; \
|
base = st.GetInfo(ptype,local,perm,Dir,ent,plocal); ent++; \
|
||||||
PF_GAUGE(Xp); \
|
PF_GAUGE(Xp); \
|
||||||
PREFETCH1_CHIMU(base); \
|
PREFETCH1_CHIMU(base);{ ZERO_PSI; } \
|
||||||
ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) else { ZERO_PSI; }
|
ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON)
|
||||||
|
|
||||||
#define RESULT(base,basep) SAVE_RESULT(base,basep);
|
#define RESULT(base,basep) SAVE_RESULT(base,basep);
|
||||||
|
|
||||||
#define ZERO_NMU(A)
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
// Post comms kernel
|
// Post comms kernel
|
||||||
////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////
|
||||||
@ -105,8 +100,8 @@
|
|||||||
|
|
||||||
|
|
||||||
#define ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
#define ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
||||||
base = st.GetInfo(ptype,local,perm,NxtDir,ent,plocal); ent++; \
|
base = st.GetInfo(ptype,local,perm,Dir,ent,plocal); ent++; \
|
||||||
if((!SE->_is_local)&&(!st.same_node[DIR]) ) { \
|
if((!local)&&(!st.same_node[Dir]) ) { \
|
||||||
LOAD_CHI(base); \
|
LOAD_CHI(base); \
|
||||||
MULT_2SPIN_DIR_PF(Dir,base); \
|
MULT_2SPIN_DIR_PF(Dir,base); \
|
||||||
LOAD64(%r10,isigns); \
|
LOAD64(%r10,isigns); \
|
||||||
@ -114,11 +109,18 @@
|
|||||||
nmu++; \
|
nmu++; \
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ASM_LEG_XP(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) ASM_LEG(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON)
|
#define ASM_LEG_XP(Dir,NxtDir,PERMUTE_DIR,PROJ,RECON) \
|
||||||
|
nmu=0; \
|
||||||
|
base = st.GetInfo(ptype,local,perm,Dir,ent,plocal); ent++; \
|
||||||
|
if((!local)&&(!st.same_node[Dir]) ) { \
|
||||||
|
LOAD_CHI(base); \
|
||||||
|
MULT_2SPIN_DIR_PF(Dir,base); \
|
||||||
|
LOAD64(%r10,isigns); \
|
||||||
|
RECON; \
|
||||||
|
nmu++; \
|
||||||
|
} else { ZERO_PSI; };
|
||||||
|
|
||||||
#define ZERO_NMU(A) nmu=0;
|
#define RESULT(base,basep) if (nmu){ ADD_RESULT(base,base);}
|
||||||
|
|
||||||
#define RESULT(base,basep) if (nmu){ ADD_RESULT(base,base);}
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
@ -144,9 +146,7 @@
|
|||||||
int ent=ss*8;// 2*Ndim
|
int ent=ss*8;// 2*Ndim
|
||||||
int nent=ssn*8;
|
int nent=ssn*8;
|
||||||
|
|
||||||
ZERO_NMU(0);
|
ASM_LEG_XP(Xp,Yp,PERMUTE_DIR3,DIR0_PROJMEM,DIR0_RECON);
|
||||||
|
|
||||||
ASM_LEG_XP(Xp,Yp,PERMUTE_DIR3,DIR0_PROJMEM,DIR0_RECON);
|
|
||||||
ASM_LEG(Yp,Zp,PERMUTE_DIR2,DIR1_PROJMEM,DIR1_RECON);
|
ASM_LEG(Yp,Zp,PERMUTE_DIR2,DIR1_PROJMEM,DIR1_RECON);
|
||||||
ASM_LEG(Zp,Tp,PERMUTE_DIR1,DIR2_PROJMEM,DIR2_RECON);
|
ASM_LEG(Zp,Tp,PERMUTE_DIR1,DIR2_PROJMEM,DIR2_RECON);
|
||||||
ASM_LEG(Tp,Xm,PERMUTE_DIR0,DIR3_PROJMEM,DIR3_RECON);
|
ASM_LEG(Tp,Xm,PERMUTE_DIR0,DIR3_PROJMEM,DIR3_RECON);
|
||||||
@ -156,10 +156,9 @@
|
|||||||
ASM_LEG(Zm,Tm,PERMUTE_DIR1,DIR6_PROJMEM,DIR6_RECON);
|
ASM_LEG(Zm,Tm,PERMUTE_DIR1,DIR6_PROJMEM,DIR6_RECON);
|
||||||
ASM_LEG(Tm,Xp,PERMUTE_DIR0,DIR7_PROJMEM,DIR7_RECON);
|
ASM_LEG(Tm,Xp,PERMUTE_DIR0,DIR7_PROJMEM,DIR7_RECON);
|
||||||
|
|
||||||
#ifdef EXTERIOR
|
#ifndef EXTERIOR
|
||||||
if( nmu == 0 ) break;
|
if (nmu==0) break; //Early out if no work
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
base = (uint64_t) &out._odata[ss];
|
base = (uint64_t) &out._odata[ss];
|
||||||
basep= st.GetPFInfo(nent,plocal); nent++;
|
basep= st.GetPFInfo(nent,plocal); nent++;
|
||||||
RESULT(base,basep);
|
RESULT(base,basep);
|
||||||
@ -185,10 +184,6 @@
|
|||||||
#undef DIR5_RECON
|
#undef DIR5_RECON
|
||||||
#undef DIR6_RECON
|
#undef DIR6_RECON
|
||||||
#undef DIR7_RECON
|
#undef DIR7_RECON
|
||||||
#undef EXTERIOR_BLOCK
|
#undef ASM_LEG
|
||||||
#undef INTERIOR_BLOCK
|
#undef ASM_LEG_XP
|
||||||
#undef EXTERIOR_BLOCK_XP
|
|
||||||
#undef INTERIOR_BLOCK_XP
|
|
||||||
#undef COMMON_BLOCK
|
|
||||||
#undef ZERO_NMU
|
|
||||||
#undef RESULT
|
#undef RESULT
|
||||||
|
Loading…
Reference in New Issue
Block a user