mirror of
https://github.com/paboyle/Grid.git
synced 2024-11-09 23:45:36 +00:00
ASM instantiation without link errors
This commit is contained in:
parent
da8d87e9da
commit
e78a5e7838
@ -958,12 +958,26 @@ template <> void StaggeredKernels<StaggeredImplD>::DhopSiteAsm(StencilImpl &st,
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#define KERNEL_INSTANTIATE(CLASS,FUNC,IMPL) \
|
extern template void StaggeredKernels<StaggeredVec5dImplF>::DhopSiteAsm(StencilImpl &st, LebesgueOrder &lo,
|
||||||
template void CLASS<IMPL>::FUNC(StencilImpl &st, LebesgueOrder &lo, \
|
DoubledGaugeFieldView &U,
|
||||||
DoubledGaugeFieldView &U, \
|
DoubledGaugeFieldView &UUU,
|
||||||
DoubledGaugeFieldView &UUU, \
|
SiteSpinor *buf, int LLs,
|
||||||
SiteSpinor *buf, int LLs, \
|
int sU, const FermionFieldView &in, FermionFieldView &out,int dag);
|
||||||
int sU, const FermionFieldView &in, FermionFieldView &out,int dag);
|
extern template void StaggeredKernels<StaggeredVec5dImplD>::DhopSiteAsm(StencilImpl &st, LebesgueOrder &lo,
|
||||||
|
DoubledGaugeFieldView &U,
|
||||||
|
DoubledGaugeFieldView &UUU,
|
||||||
|
SiteSpinor *buf, int LLs,
|
||||||
|
int sU, const FermionFieldView &in, FermionFieldView &out,int dag);
|
||||||
|
extern template void StaggeredKernels<StaggeredImplF>::DhopSiteAsm(StencilImpl &st, LebesgueOrder &lo,
|
||||||
|
DoubledGaugeFieldView &U,
|
||||||
|
DoubledGaugeFieldView &UUU,
|
||||||
|
SiteSpinor *buf, int LLs,
|
||||||
|
int sU, const FermionFieldView &in, FermionFieldView &out,int dag);
|
||||||
|
extern template void StaggeredKernels<StaggeredImplD>::DhopSiteAsm(StencilImpl &st, LebesgueOrder &lo,
|
||||||
|
DoubledGaugeFieldView &U,
|
||||||
|
DoubledGaugeFieldView &UUU,
|
||||||
|
SiteSpinor *buf, int LLs,
|
||||||
|
int sU, const FermionFieldView &in, FermionFieldView &out,int dag);
|
||||||
|
|
||||||
NAMESPACE_END(Grid);
|
NAMESPACE_END(Grid);
|
||||||
|
|
||||||
|
@ -370,7 +370,6 @@ void StaggeredKernels<Impl>::DhopSiteHandExt(StencilImpl &st, LebesgueOrder &lo,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define DHOP_SITE_HAND_INSTANTIATE(IMPL) \
|
#define DHOP_SITE_HAND_INSTANTIATE(IMPL) \
|
||||||
template void StaggeredKernels<IMPL>::DhopSiteHand(StencilImpl &st, LebesgueOrder &lo, \
|
template void StaggeredKernels<IMPL>::DhopSiteHand(StencilImpl &st, LebesgueOrder &lo, \
|
||||||
DoubledGaugeFieldView &U,DoubledGaugeFieldView &UUU, \
|
DoubledGaugeFieldView &U,DoubledGaugeFieldView &UUU, \
|
||||||
@ -387,6 +386,8 @@ void StaggeredKernels<Impl>::DhopSiteHandExt(StencilImpl &st, LebesgueOrder &lo,
|
|||||||
SiteSpinor *buf, int LLs, int sU, \
|
SiteSpinor *buf, int LLs, int sU, \
|
||||||
const FermionFieldView &in, FermionFieldView &out, int dag); \
|
const FermionFieldView &in, FermionFieldView &out, int dag); \
|
||||||
|
|
||||||
|
#undef LOAD_CHI
|
||||||
|
|
||||||
NAMESPACE_END(Grid);
|
NAMESPACE_END(Grid);
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +36,10 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
|
|||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
#include <simd/Intel512wilson.h>
|
#include <simd/Intel512wilson.h>
|
||||||
#include <simd/Intel512single.h>
|
#include <simd/Intel512single.h>
|
||||||
|
|
||||||
|
/// Switch off the 5d vectorised code optimisations
|
||||||
|
#undef DWFVEC5D
|
||||||
|
|
||||||
static Vector<vComplexF> signsF;
|
static Vector<vComplexF> signsF;
|
||||||
|
|
||||||
template<typename vtype>
|
template<typename vtype>
|
||||||
@ -209,6 +212,9 @@ WilsonKernels<ZWilsonImplFH>::AsmDhopSiteDagExt(StencilView &st, DoubledGaugeFie
|
|||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// Ls vectorised, undag Kernel, single
|
// Ls vectorised, undag Kernel, single
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
|
|
||||||
|
#ifdef DWFVEC5D
|
||||||
|
|
||||||
#undef KERNEL_DAG
|
#undef KERNEL_DAG
|
||||||
#define INTERIOR_AND_EXTERIOR
|
#define INTERIOR_AND_EXTERIOR
|
||||||
#undef INTERIOR
|
#undef INTERIOR
|
||||||
@ -344,6 +350,8 @@ WilsonKernels<ZDomainWallVec5dImplFH>::AsmDhopSiteDagExt(StencilView &st, Double
|
|||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
|
#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
|
||||||
|
|
||||||
|
#endif // VEC 5D
|
||||||
|
|
||||||
#undef COMPLEX_SIGNS
|
#undef COMPLEX_SIGNS
|
||||||
#undef MAYBEPERM
|
#undef MAYBEPERM
|
||||||
#undef MULT_2SPIN
|
#undef MULT_2SPIN
|
||||||
@ -510,6 +518,8 @@ WilsonKernels<ZWilsonImplDF>::AsmDhopSiteDagExt(StencilView &st, DoubledGaugeFie
|
|||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
// Ls vectorised, undag Kernel, single
|
// Ls vectorised, undag Kernel, single
|
||||||
/////////////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////////////
|
||||||
|
#ifdef DWFVEC5D
|
||||||
|
|
||||||
#undef KERNEL_DAG
|
#undef KERNEL_DAG
|
||||||
#define INTERIOR_AND_EXTERIOR
|
#define INTERIOR_AND_EXTERIOR
|
||||||
#undef INTERIOR
|
#undef INTERIOR
|
||||||
@ -625,6 +635,7 @@ WilsonKernels<ZDomainWallVec5dImplDF>::AsmDhopSiteDagInt(StencilView &st, Double
|
|||||||
#undef INTERIOR_AND_EXTERIOR
|
#undef INTERIOR_AND_EXTERIOR
|
||||||
#undef INTERIOR
|
#undef INTERIOR
|
||||||
#define EXTERIOR
|
#define EXTERIOR
|
||||||
|
|
||||||
template<> void
|
template<> void
|
||||||
WilsonKernels<DomainWallVec5dImplD>::AsmDhopSiteDagExt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<DomainWallVec5dImplD>::AsmDhopSiteDagExt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
@ -643,8 +654,63 @@ WilsonKernels<ZDomainWallVec5dImplDF>::AsmDhopSiteDagExt(StencilView &st, Double
|
|||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
|
#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
|
||||||
|
|
||||||
|
#endif // VEC 5D
|
||||||
|
|
||||||
#undef COMPLEX_SIGNS
|
#undef COMPLEX_SIGNS
|
||||||
#undef MAYBEPERM
|
#undef MAYBEPERM
|
||||||
#undef MULT_2SPIN
|
#undef MULT_2SPIN
|
||||||
|
|
||||||
|
#undef Chi_00
|
||||||
|
#undef Chi_01
|
||||||
|
#undef Chi_02
|
||||||
|
#undef Chi_10
|
||||||
|
#undef Chi_11
|
||||||
|
#undef Chi_12
|
||||||
|
#undef Chi_20
|
||||||
|
#undef Chi_21
|
||||||
|
#undef Chi_22
|
||||||
|
#undef Chi_30
|
||||||
|
#undef Chi_31
|
||||||
|
#undef Chi_32
|
||||||
|
|
||||||
|
#undef UChi_00
|
||||||
|
#undef UChi_01
|
||||||
|
#undef UChi_02
|
||||||
|
#undef UChi_10
|
||||||
|
#undef UChi_11
|
||||||
|
#undef UChi_12
|
||||||
|
#undef UChi_20
|
||||||
|
#undef UChi_21
|
||||||
|
#undef UChi_22
|
||||||
|
#undef UChi_30
|
||||||
|
#undef UChi_31
|
||||||
|
#undef UChi_32
|
||||||
|
|
||||||
|
#undef Psi_00
|
||||||
|
#undef Psi_01
|
||||||
|
#undef Psi_02
|
||||||
|
#undef Psi_10
|
||||||
|
#undef Psi_11
|
||||||
|
#undef Psi_12
|
||||||
|
#undef Psi_20
|
||||||
|
#undef Psi_21
|
||||||
|
#undef Psi_22
|
||||||
|
#undef Psi_30
|
||||||
|
#undef Psi_31
|
||||||
|
#undef Psi_32
|
||||||
|
|
||||||
|
#undef Phi_00
|
||||||
|
#undef Phi_01
|
||||||
|
#undef Phi_02
|
||||||
|
#undef Phi_10
|
||||||
|
#undef Phi_11
|
||||||
|
#undef Phi_12
|
||||||
|
#undef Phi_20
|
||||||
|
#undef Phi_21
|
||||||
|
#undef Phi_22
|
||||||
|
#undef Phi_30
|
||||||
|
#undef Phi_31
|
||||||
|
#undef Phi_32
|
||||||
|
|
||||||
|
|
||||||
#endif //AVX512
|
#endif //AVX512
|
||||||
|
@ -38,52 +38,49 @@ NAMESPACE_BEGIN(Grid);
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
// Default to no assembler implementation
|
// Default to no assembler implementation
|
||||||
|
// Will specialise to
|
||||||
///////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////
|
||||||
template<class Impl> void
|
template<class Impl> void
|
||||||
WilsonKernels<Impl >::AsmDhopSite(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<Impl >::AsmDhopSite(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Impl> void
|
template<class Impl> void
|
||||||
WilsonKernels<Impl >::AsmDhopSiteDag(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<Impl >::AsmDhopSiteDag(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Impl> void
|
template<class Impl> void
|
||||||
WilsonKernels<Impl >::AsmDhopSiteInt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<Impl >::AsmDhopSiteInt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Impl> void
|
template<class Impl> void
|
||||||
WilsonKernels<Impl >::AsmDhopSiteDagInt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<Impl >::AsmDhopSiteDagInt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Impl> void
|
template<class Impl> void
|
||||||
WilsonKernels<Impl >::AsmDhopSiteExt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<Impl >::AsmDhopSiteExt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class Impl> void
|
template<class Impl> void
|
||||||
WilsonKernels<Impl >::AsmDhopSiteDagExt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
WilsonKernels<Impl >::AsmDhopSiteDagExt(StencilView &st, DoubledGaugeFieldView &U,SiteHalfSpinor *buf,
|
||||||
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
int ss,int ssU,int Ls,int Ns,const FermionFieldView &in, FermionFieldView &out)
|
||||||
{
|
{
|
||||||
assert(0);
|
assert(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#include <qcd/action/fermion/implementation/WilsonKernelsAsmAvx512.h>
|
|
||||||
#include <qcd/action/fermion/implementation/WilsonKernelsAsmQPX.h>
|
|
||||||
|
|
||||||
|
|
||||||
NAMESPACE_END(Grid);
|
NAMESPACE_END(Grid);
|
||||||
|
|
||||||
|
@ -31,6 +31,49 @@ Author: paboyle <paboyle@ph.ed.ac.uk>
|
|||||||
|
|
||||||
#include <Grid/qcd/action/fermion/FermionCore.h>
|
#include <Grid/qcd/action/fermion/FermionCore.h>
|
||||||
|
|
||||||
|
|
||||||
|
#undef LOAD_CHIMU
|
||||||
|
#undef LOAD_CHI
|
||||||
|
#undef MULT_2SPIN
|
||||||
|
#undef PERMUTE_DIR
|
||||||
|
#undef XP_PROJ
|
||||||
|
#undef YP_PROJ
|
||||||
|
#undef ZP_PROJ
|
||||||
|
#undef TP_PROJ
|
||||||
|
#undef XM_PROJ
|
||||||
|
#undef YM_PROJ
|
||||||
|
#undef ZM_PROJ
|
||||||
|
#undef TM_PROJ
|
||||||
|
#undef XP_RECON
|
||||||
|
#undef XP_RECON_ACCUM
|
||||||
|
#undef XM_RECON
|
||||||
|
#undef XM_RECON_ACCUM
|
||||||
|
#undef YP_RECON_ACCUM
|
||||||
|
#undef YM_RECON_ACCUM
|
||||||
|
#undef ZP_RECON_ACCUM
|
||||||
|
#undef ZM_RECON_ACCUM
|
||||||
|
#undef TP_RECON_ACCUM
|
||||||
|
#undef TM_RECON_ACCUM
|
||||||
|
#undef ZERO_RESULT
|
||||||
|
#undef Chimu_00
|
||||||
|
#undef Chimu_01
|
||||||
|
#undef Chimu_02
|
||||||
|
#undef Chimu_10
|
||||||
|
#undef Chimu_11
|
||||||
|
#undef Chimu_12
|
||||||
|
#undef Chimu_20
|
||||||
|
#undef Chimu_21
|
||||||
|
#undef Chimu_22
|
||||||
|
#undef Chimu_30
|
||||||
|
#undef Chimu_31
|
||||||
|
#undef Chimu_32
|
||||||
|
#undef HAND_STENCIL_LEG
|
||||||
|
#undef HAND_STENCIL_LEG_INT
|
||||||
|
#undef HAND_STENCIL_LEG_EXT
|
||||||
|
#undef HAND_RESULT
|
||||||
|
#undef HAND_RESULT_INT
|
||||||
|
#undef HAND_RESULT_EXT
|
||||||
|
|
||||||
#define REGISTER
|
#define REGISTER
|
||||||
|
|
||||||
#define LOAD_CHIMU \
|
#define LOAD_CHIMU \
|
||||||
|
@ -29,7 +29,7 @@ directory
|
|||||||
#include <Grid/qcd/action/fermion/FermionCore.h>
|
#include <Grid/qcd/action/fermion/FermionCore.h>
|
||||||
#include <Grid/qcd/action/fermion/implementation/StaggeredKernelsImplementation.h>
|
#include <Grid/qcd/action/fermion/implementation/StaggeredKernelsImplementation.h>
|
||||||
#include <Grid/qcd/action/fermion/implementation/StaggeredKernelsHand.h>
|
#include <Grid/qcd/action/fermion/implementation/StaggeredKernelsHand.h>
|
||||||
|
#include <Grid/qcd/action/fermion/implementation/StaggeredKernelsAsm.h>
|
||||||
|
|
||||||
NAMESPACE_BEGIN(Grid);
|
NAMESPACE_BEGIN(Grid);
|
||||||
|
|
||||||
|
@ -30,16 +30,11 @@ directory
|
|||||||
/* END LEGAL */
|
/* END LEGAL */
|
||||||
#include <Grid/qcd/action/fermion/FermionCore.h>
|
#include <Grid/qcd/action/fermion/FermionCore.h>
|
||||||
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsImplementation.h>
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsImplementation.h>
|
||||||
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsAsmImplementation.h>
|
|
||||||
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsGpuImplementation.h>
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsGpuImplementation.h>
|
||||||
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsHandImplementation.h>
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsHandImplementation.h>
|
||||||
// Do the specialisation only once
|
|
||||||
//#include <Grid/qcd/action/fermion/implementation/WilsonKernelsHandGparityImplementation.h>
|
|
||||||
|
|
||||||
NAMESPACE_BEGIN(Grid);
|
NAMESPACE_BEGIN(Grid);
|
||||||
|
|
||||||
// Move these
|
|
||||||
|
|
||||||
#include "impl.h"
|
#include "impl.h"
|
||||||
template class WilsonKernels<IMPLEMENTATION>;
|
template class WilsonKernels<IMPLEMENTATION>;
|
||||||
|
|
||||||
|
@ -0,0 +1,43 @@
|
|||||||
|
/*************************************************************************************
|
||||||
|
|
||||||
|
Grid physics library, www.github.com/paboyle/Grid
|
||||||
|
|
||||||
|
Source file: ./lib/qcd/action/fermion/WilsonKernels.cc
|
||||||
|
|
||||||
|
Copyright (C) 2015
|
||||||
|
|
||||||
|
Author: Peter Boyle <paboyle@ph.ed.ac.uk>
|
||||||
|
Author: Peter Boyle <peterboyle@Peters-MacBook-Pro-2.local>
|
||||||
|
Author: paboyle <paboyle@ph.ed.ac.uk>
|
||||||
|
|
||||||
|
This program is free software; you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation; either version 2 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License along
|
||||||
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||||
|
|
||||||
|
See the full license in the file "LICENSE" in the top level distribution
|
||||||
|
directory
|
||||||
|
*************************************************************************************/
|
||||||
|
/* END LEGAL */
|
||||||
|
#include <Grid/qcd/action/fermion/FermionCore.h>
|
||||||
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsImplementation.h>
|
||||||
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsAsmImplementation.h>
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
// Include the specialisations for ASM kernels
|
||||||
|
////////////////////////////////////////////////////////////////////////
|
||||||
|
NAMESPACE_BEGIN(Grid);
|
||||||
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsAsmAvx512.h>
|
||||||
|
#include <Grid/qcd/action/fermion/implementation/WilsonKernelsAsmQPX.h>
|
||||||
|
NAMESPACE_END(Grid);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user