1#ifndef _STENCIL_SIMPLE_COMPRESSOR_H_
2#define _STENCIL_SIMPLE_COMPRESSOR_H_
21 template<
class vobj,
class cobj,
class compressor>
26 int off,
int so,
int partial)
29 std::pair<int,int> *table_v = & table[0];
33 compress.Compress(buffer[off+table_v[i].first],rhs_v[so+table_v[i].second]);
37 template<
class vobj,
class cobj,
class compressor>
39 std::vector<cobj *> pointers,
int dimension,
int plane,
int cbmask,
40 compressor &compress,
int type,
int partial)
42 assert( (table.size()&0x1)==0);
43 int num=table.size()/2;
47 auto p0=&pointers[0][0];
48 auto p1=&pointers[1][0];
50 auto rhs_p = &rhs_v[0];
52 compress.CompressExchange(p0[j],p1[j],
53 rhs_p[so+tp[2*j ].second],
54 rhs_p[so+tp[2*j+1].second],
60 template<
class decompressor,
class Decompression>
63 auto kp = dd.kernel_p;
66 decompress.Decompress(kp[o],mp[o]);
69 template<
class decompressor,
class Merger>
70 static void MergeFace(decompressor decompress,Merger &mm)
72 auto mp = &mm.mpointer[0];
73 auto vp0= &mm.vpointers[0][0];
74 auto vp1= &mm.vpointers[1][0];
77 decompress.Exchange(mp[2*o],mp[2*o+1],vp0[o],vp1[o],type);
87template<
class vobj,
class FaceGather>
100 exchange(mp0,mp1,vp0,vp1,
type);
108 exchange(out0,out1,in0,in1,
type);
#define accelerator_forNB(iterator, num, nsimd,...)
#define accelerator_inline
std::vector< T, devAllocator< T > > deviceVector
AcceleratorVector< int, MaxDims > Coordinate
#define NAMESPACE_BEGIN(A)
SimpleCompressorGather< vobj, FaceGatherSimple > SimpleCompressor
accelerator_inline void coalescedWrite(vobj &__restrict__ vec, const vobj &__restrict__ extracted, int lane=0)
accelerator_inline void exchangeSIMT(vobj &mp0, vobj &mp1, const vobj &vp0, const vobj &vp1, Integer type)
accelerator_inline vobj coalescedRead(const vobj &__restrict__ vec, int lane=0)
static void MergeFace(decompressor decompress, Merger &mm)
static void Gather_plane_exchange(deviceVector< std::pair< int, int > > &table, const Lattice< vobj > &rhs, std::vector< cobj * > pointers, int dimension, int plane, int cbmask, compressor &compress, int type, int partial)
static void Gather_plane_simple(deviceVector< std::pair< int, int > > &table, const Lattice< vobj > &rhs, cobj *buffer, compressor &compress, int off, int so, int partial)
static int PartialCompressionFactor(GridBase *grid)
static void DecompressFace(decompressor decompress, Decompression &dd)
LatticeView< vobj > View(ViewMode mode) const
GridBase * Grid(void) const
accelerator_inline void Exchange(vobj &mp0, vobj &mp1, vobj &vp0, vobj &vp1, Integer type) const
accelerator_inline bool DecompressionStep(void) const
accelerator_inline void CompressExchange(vobj &out0, vobj &out1, const vobj &in0, const vobj &in1, int type) const
accelerator_inline int CommDatumSize(void) const
accelerator_inline vobj operator()(const vobj &arg) const
accelerator_inline void Compress(vobj &buf, const vobj &in) const
accelerator_inline void Decompress(vobj &out, vobj &in) const