Loading source/adios2/helper/adiosMemory.h +8 −4 Original line number Diff line number Diff line Loading @@ -177,10 +177,14 @@ void Resize(std::vector<T> &vec, const size_t dataSize, const bool debugMode, * @param inIsRowMaj specifies major for input * @param inIsBigEndian specifies endianess for input * @param out pointer to destination memory buffer * @param outStart source data starting offset * @param outCount destination data structure * @param outStart destination request data starting offset * @param outCount destination request data structure * @param outIsRowMaj specifies major for output * @param outIsBigEndian specifies endianess for output * @param inMemStart source memory starting offset * @param inMemCount source memory structure * @param outMemStart destination request data starting offset * @param outMemCount destination request data structure * @param safeMode false:runs faster, the number of function stacks * used by recursive algm is equal to the number of dimensions. * true: runs a bit slower, same algorithm using the explicit Loading source/adios2/helper/adiosMemory.inl +18 −18 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ static void NdCopyRecurDFNonSeqDynamic(size_t curDim, const char *inBase, } // NdCopyRecurDFNonSeqDynamicRevEndian(): helper function // Copys n-dimensional Data from input to output in the reversed Endianess and // Copies n-dimensional Data from input to output in the reversed Endianess and // Major. // The memory address calculation complexity for copying each element is // minimized to average O(1), which is independent of the number of dimensions. Loading Loading @@ -641,14 +641,14 @@ static void NdCopyIterDFDynamicRevEndian(const char *inBase, char *outBase, template <class T> int NdCopy(const char *in, const Dims &inStart, const Dims &inCount, const bool inIsRowMajor, const bool inIsLittleEndian, char *out, const Dims &outStart, const Dims &outCount, const bool outIsRowMajor, const bool outIsLittleEndian, const Dims &inMemStart, const Dims &inMemCount, const Dims &outMemStart,const Dims &outMemCount, const bool safeMode) const Dims &outStart, const Dims &outCount, const bool outIsRowMajor, const bool outIsLittleEndian, const Dims &inMemStart, const Dims &inMemCount, const Dims &outMemStart, const Dims &outMemCount, const bool safeMode) { // use values of ioStart and ioCount if ioMemStart and ioMemCount are // left as default Dims inMemStartNC = inMemStart.empty() ? inStart : inMemStart; Dims inMemCountNC = inMemCount.empty() ? inCount : inMemCount; Dims outMemStartNC = outMemStart.empty() ? outStart : outMemStart; Loading Loading @@ -786,13 +786,13 @@ int NdCopy(const char *in, const Dims &inStart, const Dims &inCount, GetOvlpCount(ovlpCount, ovlpStart, ovlpEnd); if (!HasOvlp(ovlpStart, ovlpEnd)) return 1; // no overlap found GetIoStrides(inStride, inMemCount, sizeof(T)); GetIoStrides(outStride, outMemCount, sizeof(T)); GetIoOvlpGapSize(inOvlpGapSize, inStride, inMemCount, ovlpCount); GetIoOvlpGapSize(outOvlpGapSize, outStride, outMemCount, ovlpCount); GetInOvlpBase(inOvlpBase, in, inMemStart, inStride, ovlpStart); GetOutOvlpBase(outOvlpBase, out, outMemStart, outStride, ovlpStart); minContDim = GetMinContDim(inMemCount, outMemCount, ovlpCount); GetIoStrides(inStride, inMemCountNC, sizeof(T)); GetIoStrides(outStride, outMemCountNC, sizeof(T)); GetIoOvlpGapSize(inOvlpGapSize, inStride, inMemCountNC, ovlpCount); GetIoOvlpGapSize(outOvlpGapSize, outStride, outMemCountNC, ovlpCount); GetInOvlpBase(inOvlpBase, in, inMemStartNC, inStride, ovlpStart); GetOutOvlpBase(outOvlpBase, out, outMemStartNC, outStride, ovlpStart); minContDim = GetMinContDim(inMemCountNC, outMemCountNC, ovlpCount); blockSize = GetBlockSize(ovlpCount, minContDim, sizeof(T)); // same endianess mode: most optimized, contiguous data copying // algorithm used. Loading Loading
source/adios2/helper/adiosMemory.h +8 −4 Original line number Diff line number Diff line Loading @@ -177,10 +177,14 @@ void Resize(std::vector<T> &vec, const size_t dataSize, const bool debugMode, * @param inIsRowMaj specifies major for input * @param inIsBigEndian specifies endianess for input * @param out pointer to destination memory buffer * @param outStart source data starting offset * @param outCount destination data structure * @param outStart destination request data starting offset * @param outCount destination request data structure * @param outIsRowMaj specifies major for output * @param outIsBigEndian specifies endianess for output * @param inMemStart source memory starting offset * @param inMemCount source memory structure * @param outMemStart destination request data starting offset * @param outMemCount destination request data structure * @param safeMode false:runs faster, the number of function stacks * used by recursive algm is equal to the number of dimensions. * true: runs a bit slower, same algorithm using the explicit Loading
source/adios2/helper/adiosMemory.inl +18 −18 Original line number Diff line number Diff line Loading @@ -472,7 +472,7 @@ static void NdCopyRecurDFNonSeqDynamic(size_t curDim, const char *inBase, } // NdCopyRecurDFNonSeqDynamicRevEndian(): helper function // Copys n-dimensional Data from input to output in the reversed Endianess and // Copies n-dimensional Data from input to output in the reversed Endianess and // Major. // The memory address calculation complexity for copying each element is // minimized to average O(1), which is independent of the number of dimensions. Loading Loading @@ -641,14 +641,14 @@ static void NdCopyIterDFDynamicRevEndian(const char *inBase, char *outBase, template <class T> int NdCopy(const char *in, const Dims &inStart, const Dims &inCount, const bool inIsRowMajor, const bool inIsLittleEndian, char *out, const Dims &outStart, const Dims &outCount, const bool outIsRowMajor, const bool outIsLittleEndian, const Dims &inMemStart, const Dims &inMemCount, const Dims &outMemStart,const Dims &outMemCount, const bool safeMode) const Dims &outStart, const Dims &outCount, const bool outIsRowMajor, const bool outIsLittleEndian, const Dims &inMemStart, const Dims &inMemCount, const Dims &outMemStart, const Dims &outMemCount, const bool safeMode) { // use values of ioStart and ioCount if ioMemStart and ioMemCount are // left as default Dims inMemStartNC = inMemStart.empty() ? inStart : inMemStart; Dims inMemCountNC = inMemCount.empty() ? inCount : inMemCount; Dims outMemStartNC = outMemStart.empty() ? outStart : outMemStart; Loading Loading @@ -786,13 +786,13 @@ int NdCopy(const char *in, const Dims &inStart, const Dims &inCount, GetOvlpCount(ovlpCount, ovlpStart, ovlpEnd); if (!HasOvlp(ovlpStart, ovlpEnd)) return 1; // no overlap found GetIoStrides(inStride, inMemCount, sizeof(T)); GetIoStrides(outStride, outMemCount, sizeof(T)); GetIoOvlpGapSize(inOvlpGapSize, inStride, inMemCount, ovlpCount); GetIoOvlpGapSize(outOvlpGapSize, outStride, outMemCount, ovlpCount); GetInOvlpBase(inOvlpBase, in, inMemStart, inStride, ovlpStart); GetOutOvlpBase(outOvlpBase, out, outMemStart, outStride, ovlpStart); minContDim = GetMinContDim(inMemCount, outMemCount, ovlpCount); GetIoStrides(inStride, inMemCountNC, sizeof(T)); GetIoStrides(outStride, outMemCountNC, sizeof(T)); GetIoOvlpGapSize(inOvlpGapSize, inStride, inMemCountNC, ovlpCount); GetIoOvlpGapSize(outOvlpGapSize, outStride, outMemCountNC, ovlpCount); GetInOvlpBase(inOvlpBase, in, inMemStartNC, inStride, ovlpStart); GetOutOvlpBase(outOvlpBase, out, outMemStartNC, outStride, ovlpStart); minContDim = GetMinContDim(inMemCountNC, outMemCountNC, ovlpCount); blockSize = GetBlockSize(ovlpCount, minContDim, sizeof(T)); // same endianess mode: most optimized, contiguous data copying // algorithm used. Loading