Commit a97b1527 authored by Jason Wang's avatar Jason Wang
Browse files

Merge branch 'ndcopy' of https://github.com/shawnyang610/ADIOS2 into ndcopy

parents fe2ebf98 c6529fde
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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
+18 −18
Original line number Diff line number Diff line
@@ -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.
@@ -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;
@@ -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.