Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions include/qdp_globalfuncs_subtype.h
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,27 @@ sum( const OSubLattice<T>& s1 )
}
}

template<class T>
inline
void random_F( T* dest, const Subset& s)
{
// omp - or is this in conflict with RNG functionality?
for(int j=0; j < s.numSiteTable(); ++j)
{
random( dest[j] );
}
}

template<class T>
inline
void gaussian_F( T* dest, const Subset& s)
{
// omp - see above?
for(int j=0; j < s.numSiteTable(); ++j)
{
gaussian( dest[j] );
}
}

//! dest = 0
template<class T>
Expand Down
10 changes: 5 additions & 5 deletions include/qdp_outersubtype.h
Original file line number Diff line number Diff line change
Expand Up @@ -305,22 +305,22 @@ struct DoublePrecType<OSubLattice<T> >
template<class T>
void zero_rep(OScalar<T>& dest, const Subset& s)
{
zero_rep(dest.field().elem());
zero_rep(dest.elem());
}

//! dest = 0
template<class T>
void zero_rep(OSubScalar<T> dest)
{
zero_rep(dest.field().elem());
zero_rep(*dest.getF());
}

//! dest = (mask) ? s1 : dest
template<class T1, class T2>
void copymask(OSubScalar<T2> dest, const OScalar<T1>& mask,
const OScalar<T2>& s1)
{
copymask(dest.field().elem(), mask.elem(), s1.elem());
copymask(*dest.getF(), mask.elem(), s1.elem());
}


Expand All @@ -335,15 +335,15 @@ void random(OSubScalar<T> d);
template<class T>
void gaussian(OSubScalar<T> dd)
{
OLattice<T>& d = dd.field();
T& d = *(dd.getF());
const Subset& s = dd.subset();

OScalar<T> r1, r2;

random(r1(s));
random(r2(s));

fill_gaussian(d.elem(), r1.elem(), r2.elem());
fill_gaussian(d, r1.elem(), r2.elem());
}

} // namespace QDP
Expand Down
19 changes: 6 additions & 13 deletions include/qdp_parscalar_specific.h
Original file line number Diff line number Diff line change
Expand Up @@ -463,15 +463,14 @@ void evaluate_F(T* dest, const Op& op, const QDPExpr<RHS,OLattice<T1> >& rhs,
template<class T1, class T2>
void copymask(OSubLattice<T2> d, const OLattice<T1>& mask, const OLattice<T2>& s1)
{
OLattice<T2>& dest = d.field();
const Subset& s = d.subset();

const int *tab = s.siteTable().slice();
#pragma omp parallel for
for(int j=0; j < s.numSiteTable(); ++j)
{
int i = tab[j];
copymask(dest.elem(i), mask.elem(i), s1.elem(i));
copymask(d.getF()[i], mask.elem(i), s1.elem(i));
}
}

Expand Down Expand Up @@ -547,10 +546,7 @@ random(OLattice<T>& d, const Subset& s)
template<class T>
void random(OSubLattice<T> dd)
{
OLattice<T>& d = dd.field();
const Subset& s = dd.subset();

random(d,s);
random_F(dd.getF(),dd.subset());
}


Expand Down Expand Up @@ -586,10 +582,7 @@ void gaussian(OLattice<T>& d, const Subset& s)
template<class T>
void gaussian(OSubLattice<T> dd)
{
OLattice<T>& d = dd.field();
const Subset& s = dd.subset();

gaussian(d,s);
gaussian_F(dd.getF(),dd.subset());
}


Expand Down Expand Up @@ -2558,9 +2551,9 @@ void writeOLattice(BinaryWriter& bin,
template<class T>
void write(BinaryWriter& bin, OSubLattice<T> dd)
{
const OLattice<T>& d = dd.field();
T* d = dd.getF();

writeOLattice(bin, (const char *)&(d.elem(0)),
writeOLattice(bin, (const char *)d,
sizeof(typename WordType<T>::Type_t),
sizeof(T) / sizeof(typename WordType<T>::Type_t),
dd.subset());
Expand Down Expand Up @@ -2610,7 +2603,7 @@ void readOLattice(BinaryReader& bin,
template<class T>
void read(BinaryReader& bin, OSubLattice<T> d)
{
readOLattice(bin, (char *)(d.field().getF()),
readOLattice(bin, (char *)(d.getF()),
sizeof(typename WordType<T>::Type_t),
sizeof(T) / sizeof(typename WordType<T>::Type_t),
d.subset());
Expand Down
18 changes: 4 additions & 14 deletions include/qdp_parscalarvec_specific.h
Original file line number Diff line number Diff line change
Expand Up @@ -208,15 +208,14 @@ template<class T1, class T2>
void
copymask(OSubLattice<T2,Subset> d, const OLattice<T1>& mask, const OLattice<T2>& s1)
{
OLattice<T2>& dest = d.field();
const Subset& s = d.subset();

#if ! defined(QDP_NOT_IMPLEMENTED)
const int *tab = s.siteTable().slice();
for(int j=0; j < s.numSiteTable(); ++j)
{
int i = tab[j];
copymask(dest.elem(i), mask.elem(i), s1.elem(i));
copymask(d.getF()[i], mask.elem(i), s1.elem(i));
}
#else
QDP_error("copymask_Subset not implemented");
Expand Down Expand Up @@ -292,10 +291,7 @@ random(OLattice<T>& d, const Subset& s)
template<class T, class S>
void random(const OSubLattice<T,S>& dd)
{
OLattice<T>& d = const_cast<OSubLattice<T,S>&>(dd).field();
const S& s = dd.subset();

random(d,s);
random_F(const_cast<OSubLattice<T,S>&>(dd).getF(),dd.subset());
}


Expand Down Expand Up @@ -334,10 +330,7 @@ void gaussian(OLattice<T>& d, const Subset& s)
template<class T, class S>
void gaussian(const OSubLattice<T,S>& dd)
{
OLattice<T>& d = const_cast<OSubLattice<T,S>&>(dd).field();
const S& s = dd.subset();

gaussian(d,s);
gaussian_F(const_cast<OSubLattice<T,S>&>(dd).getF(),dd.subset());
}


Expand Down Expand Up @@ -374,10 +367,7 @@ void zero_rep(OLattice<T>& dest, const Subset& s)
template<class T, class S>
void zero_rep(OSubLattice<T,S> dd)
{
OLattice<T>& d = dd.field();
const S& s = dd.subset();

zero_rep(d,s);
zero_rep_F(dd.getF(),dd.subset());
}


Expand Down
21 changes: 7 additions & 14 deletions include/qdp_scalar_specific.h
Original file line number Diff line number Diff line change
Expand Up @@ -280,15 +280,14 @@ template<class T1, class T2>
void
copymask(OSubLattice<T2> d, const OLattice<T1>& mask, const OLattice<T2>& s1)
{
OLattice<T2>& dest = d.field();
const Subset& s = d.subset();

const int *tab = s.siteTable().slice();
#pragma omp parallel for
for(int j=0; j < s.numSiteTable(); ++j)
{
int i = tab[j];
copymask(dest.elem(i), mask.elem(i), s1.elem(i));
copymask(d.getF()[i], mask.elem(i), s1.elem(i));
}
}

Expand Down Expand Up @@ -367,10 +366,7 @@ random(OLattice<T>& d, const Subset& s)
template<class T>
void random(OSubLattice<T> dd)
{
OLattice<T>& d = dd.field();
const Subset& s = dd.subset();

random(d,s);
random_F(dd.getF(),dd.subset());
}


Expand Down Expand Up @@ -407,10 +403,7 @@ void gaussian(OLattice<T>& d, const Subset& s)
template<class T>
void gaussian(OSubLattice<T> dd)
{
OLattice<T>& d = dd.field();
const Subset& s = dd.subset();

gaussian(d,s);
gaussian_F(dd.getF(),dd.subset());
}


Expand Down Expand Up @@ -2120,7 +2113,7 @@ void write(BinaryWriter& bin, OSubLattice<T> dd)
const Subset& sub = dd.subset();
const Set& set = sub.getSet();

const OLattice<T>& d = dd.field();
const T* d = dd.getF();

const multi1d<int>& lat_color = set.latticeColoring();
const int color = sub.color();
Expand All @@ -2132,7 +2125,7 @@ void write(BinaryWriter& bin, OSubLattice<T> dd)
int i = Layout::linearSiteIndex(site);
if (lat_color[i] == color)
{
bin.writeArray((const char*)&(d.elem(i)),
bin.writeArray((const char*)&(d[i]),
sizeof(typename WordType<T>::Type_t),
sizeof(T) / sizeof(typename WordType<T>::Type_t));
}
Expand Down Expand Up @@ -2195,7 +2188,7 @@ void read(BinaryReader& bin, OSubLattice<T> dd)
const Subset& sub = dd.subset();
const Set& set = sub.getSet();

OLattice<T>& d = dd.field();
T* d = dd.getF();

const multi1d<int>& lat_color = set.latticeColoring();
const int color = sub.color();
Expand All @@ -2207,7 +2200,7 @@ void read(BinaryReader& bin, OSubLattice<T> dd)
int i = Layout::linearSiteIndex(site);
if (lat_color[i] == color)
{
bin.readArray((char*)&(d.elem(i)),
bin.readArray((char*)&(d[i]),
sizeof(typename WordType<T>::Type_t),
sizeof(T) / sizeof(typename WordType<T>::Type_t));
}
Expand Down
18 changes: 4 additions & 14 deletions include/qdp_scalarvec_specific.h
Original file line number Diff line number Diff line change
Expand Up @@ -142,15 +142,14 @@ template<class T1, class T2>
void
copymask(OSubLattice<T2,Subset> d, const OLattice<T1>& mask, const OLattice<T2>& s1)
{
OLattice<T2>& dest = d.field();
const Subset& s = d.subset();

#if ! defined(QDP_NOT_IMPLEMENTED)
const int *tab = s.siteTable().slice();
for(int j=0; j < s.numSiteTable(); ++j)
{
int i = tab[j];
copymask(dest.elem(i), mask.elem(i), s1.elem(i));
copymask(d.getF()[i], mask.elem(i), s1.elem(i));
}
#else
QDP_error_exit("copymask_Subset not implemented");
Expand Down Expand Up @@ -228,10 +227,7 @@ random(OLattice<T>& d, const Subset& s)
template<class T, class S>
void random(const OSubLattice<T,S>& dd)
{
OLattice<T>& d = const_cast<OSubLattice<T,S>&>(dd).field();
const S& s = dd.subset();

random(d,s);
random_F(const_cast<OSubLattice<T,S>&>(dd).getF(),dd.subset());
}


Expand Down Expand Up @@ -269,10 +265,7 @@ void gaussian(OLattice<T>& d, const Subset& s)
template<class T, class S>
void gaussian(const OSubLattice<T,S>& dd)
{
OLattice<T>& d = const_cast<OSubLattice<T,S>&>(dd).field();
const S& s = dd.subset();

gaussian(d,s);
gaussian_F(const_cast<OSubLattice<T,S>&>(dd).getF(),dd.subset());
}


Expand Down Expand Up @@ -309,10 +302,7 @@ void zero_rep(OLattice<T>& dest, const Subset& s)
template<class T, class S>
void zero_rep(OSubLattice<T,S> dd)
{
OLattice<T>& d = dd.field();
const S& s = dd.subset();

zero_rep(d,s);
zero_rep_F(dd.getF(),dd.subset());
}


Expand Down