mpi rarray load
This commit is contained in:
parent
6e16927442
commit
0cc0a7cea4
3 changed files with 28 additions and 27 deletions
|
@ -149,6 +149,19 @@ namespace CNORXZ
|
|||
/** check if container views the data, i.e. it does not own it */
|
||||
virtual bool isView() const = 0;
|
||||
|
||||
/** Perform compatibility checks
|
||||
@tparam Acc index type or index pack type
|
||||
@param acc index or index pack.
|
||||
*/
|
||||
template <class Acc>
|
||||
void checkFormatCompatibility(const Acc& acc) const;
|
||||
|
||||
/** check if format is trivial
|
||||
@return true if container is data owning array, else return
|
||||
result of the corresponding container index
|
||||
*/
|
||||
virtual bool formatIsTrivial() const = 0;
|
||||
|
||||
protected:
|
||||
RangePtr mRange; /**< the container range */
|
||||
|
||||
|
@ -171,18 +184,6 @@ namespace CNORXZ
|
|||
template <class Acc>
|
||||
const_iterator itLexSave(const Acc& acc) const;
|
||||
|
||||
/** Perform compatibility checks
|
||||
@tparam Acc index type or index pack type
|
||||
@param acc index or index pack.
|
||||
*/
|
||||
template <class Acc>
|
||||
void checkFormatCompatibility(const Acc& acc) const;
|
||||
|
||||
/** check if format is trivial
|
||||
@return true if container is data owning array, else return
|
||||
result of the corresponding container index
|
||||
*/
|
||||
virtual bool formatIsTrivial() const = 0;
|
||||
};
|
||||
|
||||
/** ****
|
||||
|
|
|
@ -221,14 +221,13 @@ namespace CNORXZ
|
|||
}
|
||||
|
||||
template <typename T>
|
||||
template <class Index1, class Index2>
|
||||
void RCArray<T>::load(const Sptr<Index1>& lpi, const Sptr<Index2>& ai,
|
||||
const Sptr<Vector<SizeT>>& imap) const
|
||||
template <class TarI, class RTarI, class SrcI, class RSrcI, class I>
|
||||
void RCArray<T>::load(const Sptr<RIndex<TarI,RTarI>>& lpi, const Sptr<RIndex<SrcI,RSrcI>>& ai,
|
||||
const Sptr<I>& i, const Sptr<Vector<SizeT>>& imap) const
|
||||
{
|
||||
// TODO: blocks!!!
|
||||
const SizeT blocks = 0; assert(0); // TODO!!!
|
||||
|
||||
setupBuffer(ai, lpi, imap, *mA, mBuf, mMap, blocks);
|
||||
mA->checkFormatCompatibility(ai->local()*i);
|
||||
const SizeT blocks = i->pmax().val();
|
||||
setupBuffer(lpi, ai, imap, *mA, mBuf, mMap, blocks);
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
|
@ -242,7 +241,7 @@ namespace CNORXZ
|
|||
}
|
||||
|
||||
template <class TarI, class RTarI, class SrcI, class RSrcI, typename T>
|
||||
void setupBuffer(const Sptr<RIndex<TarI,RTarI>>& rgj, const Sptr<RIndex<SrcI,RSrcI>>& rgi,
|
||||
void setupBuffer(const Sptr<RIndex<TarI,RTarI>>& rgi, const Sptr<RIndex<SrcI,RSrcI>>& rgj,
|
||||
const Sptr<Vector<SizeT>>& imap, const CArrayBase<T>& data,
|
||||
Vector<T>& buf, Vector<const T*>& map, const SizeT blocks)
|
||||
{
|
||||
|
|
|
@ -117,15 +117,16 @@ namespace CNORXZ
|
|||
*/
|
||||
const Vector<const T*> buffermap() const;
|
||||
|
||||
/** Load all data from other ranks that is accessed by i2 in a loop over i1.
|
||||
imap indicates the position of i2 for a given position of i1.
|
||||
@param lpi Loop index.
|
||||
@param ai Access index.
|
||||
/** Load all data from other ranks that is accessed by ai in a loop over lpi.
|
||||
imap indicates the global (!) position of ai for a given (local) position of lpi.
|
||||
@param lpi Loop rank index.
|
||||
@param ai Access rank index.
|
||||
@param i Index for non-ranked dimensions.
|
||||
@param imap Index position map.
|
||||
*/
|
||||
template <class Index1, class Index2>
|
||||
void load(const Sptr<Index1>& lpi, const Sptr<Index2>& ai,
|
||||
const Sptr<Vector<SizeT>>& imap) const;
|
||||
template <class TarI, class RTarI, class SrcI, class RSrcI, class I>
|
||||
void load(const Sptr<RIndex<TarI,RTarI>>& lpi, const Sptr<RIndex<SrcI,RSrcI>>& ai,
|
||||
const Sptr<I>& i, const Sptr<Vector<SizeT>>& imap) const;
|
||||
|
||||
/** Load all data from other ranks that is accessed by f(i).
|
||||
@param lpi Loop index.
|
||||
|
|
Loading…
Reference in a new issue