Grid 0.7.0
WilsonKernelsAsmQPX.h
Go to the documentation of this file.
1/*************************************************************************************
2
3 Grid physics library, www.github.com/paboyle/Grid
4
5
6
7 Source file: ./lib/qcd/action/fermion/WilsonKernelsAsmQPX.h
8
9 Copyright (C) 2015
10
11Author: Peter Boyle <paboyle@ph.ed.ac.uk>
12Author: paboyle <paboyle@ph.ed.ac.uk>
13
14 This program is free software; you can redistribute it and/or modify
15 it under the terms of the GNU General Public License as published by
16 the Free Software Foundation; either version 2 of the License, or
17 (at your option) any later version.
18
19 This program is distributed in the hope that it will be useful,
20 but WITHOUT ANY WARRANTY; without even the implied warranty of
21 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 GNU General Public License for more details.
23
24 You should have received a copy of the GNU General Public License along
25 with this program; if not, write to the Free Software Foundation, Inc.,
26 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27
28 See the full license in the file "LICENSE" in the top level distribution directory
29*************************************************************************************/
30/* END LEGAL */
31#pragma once
32
33#if defined(QPX)
34
36 // If we are QPX specialise the single precision routine
38
39#include <simd/IBM_qpx.h>
40#include <simd/IBM_qpx_single.h>
41
42#define MAYBEPERM(A,perm) if (perm) { A ; }
43#define MULT_2SPIN(ptr,pf) MULT_2SPIN_QPX(ptr,pf)
44#define COMPLEX_SIGNS(isigns)
45
46#define INTERIOR_AND_EXTERIOR
47#undef INTERIOR
48#undef EXTERIOR
49
51// XYZT vectorised, undag Kernel, single
53#undef KERNEL_DAG
54template<> void
55WilsonKernels<WilsonImplF>::AsmDhopSite(StencilView &st, DoubledGaugeField &U, SiteHalfSpinor *buf,
56 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
57#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
58
60// XYZT vectorised, dag Kernel, single
62#define KERNEL_DAG
63template<> void
64WilsonKernels<WilsonImplF>::AsmDhopSiteDag(StencilView &st, DoubledGaugeField &U,SiteHalfSpinor *buf,
65 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
66#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
67
68#undef MAYBEPERM
69#undef MULT_2SPIN
70#define MAYBEPERM(A,B)
71#define MULT_2SPIN(ptr,pf) MULT_2SPIN_QPX_LS(ptr,pf)
72
74// Ls vectorised, undag Kernel, single
76#undef KERNEL_DAG
77template<> void
78WilsonKernels<DomainWallVec5dImplF>::AsmDhopSite(StencilView &st, DoubledGaugeField &U, SiteHalfSpinor *buf,
79 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
80#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
81
83// Ls vectorised, dag Kernel, single
85#define KERNEL_DAG
86template<> void
87WilsonKernels<DomainWallVec5dImplF>::AsmDhopSiteDag(StencilView &st, DoubledGaugeField &U,SiteHalfSpinor *buf,
88 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
89#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
90#undef MAYBEPERM
91#undef MULT_2SPIN
92
94// DP routines
96
97#include <simd/IBM_qpx_double.h>
98
99#define MAYBEPERM(A,perm) if (perm) { A ; }
100#define MULT_2SPIN(ptr,pf) MULT_2SPIN_QPX(ptr,pf)
101
103// XYZT Vectorised, undag Kernel, double
105#undef KERNEL_DAG
106template<> void
107WilsonKernels<WilsonImplD>::AsmDhopSite(StencilView &st, DoubledGaugeField &U, SiteHalfSpinor *buf,
108 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
109#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
111
112
114// XYZT Vectorised, dag Kernel, double
116#define KERNEL_DAG
117template<> void
118WilsonKernels<WilsonImplD>::AsmDhopSiteDag(StencilView &st, DoubledGaugeField &U,SiteHalfSpinor *buf,
119 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
120#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
122
123#undef MAYBEPERM
124#undef MULT_2SPIN
125#define MAYBEPERM(A,B)
126#define MULT_2SPIN(ptr,pf) MULT_2SPIN_QPX_LS(ptr,pf)
128// Ls vectorised, undag Kernel, double
130#undef KERNEL_DAG
131template<> void
132WilsonKernels<DomainWallVec5dImplD>::AsmDhopSite(StencilView &st, DoubledGaugeField &U, SiteHalfSpinor *buf,
133 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
134#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
136
138// Ls vectorised, dag Kernel, double
140#define KERNEL_DAG
141template<> void
142WilsonKernels<DomainWallVec5dImplD>::AsmDhopSiteDag(StencilView &st, DoubledGaugeField &U,SiteHalfSpinor *buf,
143 int ss,int ssU,int Ls,int Ns,const FermionField &in, FermionField &out)
144#include <qcd/action/fermion/implementation/WilsonKernelsAsmBody.h>
146
147#undef MAYBEPERM
148#undef MULT_2SPIN
149
150#endif
static constexpr int Ns
Definition QCD.h:51
static INTERNAL_PRECISION U
Definition Zolotarev.cc:230
static void AsmDhopSiteDag(StencilView &st, DoubledGaugeFieldView &U, SiteHalfSpinor *buf, int sF, int sU, int Ls, int Nsite, const FermionFieldView &in, FermionFieldView &out)
static void AsmDhopSite(StencilView &st, DoubledGaugeFieldView &U, SiteHalfSpinor *buf, int sF, int sU, int Ls, int Nsite, const FermionFieldView &in, FermionFieldView &out)