Unverified Commit 3a2df8be authored by Jason Wang's avatar Jason Wang Committed by GitHub
Browse files

Merge pull request #1011 from shawnyang610/ndcopy

adding memStart, memCount into NdCopy, fixing rev-major function
parents 6cf0e2ce 57ea4fda
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -185,6 +185,7 @@ void Engine::CommonChecks(Variable<T> &variable, const T *data,
            data, "for data argument in non-zero count block, " + hint);
    }

    /*  Commented out by Jason for allowing SetMemorySelection on reader
    if (!variable.m_MemoryStart.empty() && m_OpenMode == adios2::Mode::Read)
    {
        throw std::invalid_argument("ERROR: from Engine " + m_Name +
@@ -194,6 +195,7 @@ void Engine::CommonChecks(Variable<T> &variable, const T *data,
                                    "mode, " +
                                    hint + "\n");
    }
    */
}

} // end namespace core
+2 −1
Original line number Diff line number Diff line
@@ -20,7 +20,8 @@ namespace engine
DataManCommon::DataManCommon(const std::string engineType, IO &io,
                             const std::string &name, const Mode mode,
                             MPI_Comm mpiComm)
: Engine(engineType, io, name, mode, mpiComm)
: Engine(engineType, io, name, mode, mpiComm),
  m_FileTransport(mpiComm, m_DebugMode)
{

    // initialize parameters
+4 −0
Original line number Diff line number Diff line
@@ -14,6 +14,7 @@
#include "adios2/ADIOSConfig.h"
#include "adios2/ADIOSMacros.h"
#include "adios2/core/Engine.h"
#include "adios2/toolkit/transport/file/FileFStream.h"
#include "adios2/toolkit/transportman/dataman/DataMan.h"

namespace adios2
@@ -44,6 +45,9 @@ protected:

    bool m_IsLittleEndian;
    bool m_IsRowMajor;
    bool m_ContiguousMajor = false;

    transport::FileFStream m_FileTransport;

    std::vector<std::string> m_StreamNames;
    std::vector<core::Operator *> m_Callbacks;
+4 −4
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ namespace engine
DataManReader::DataManReader(IO &io, const std::string &name, const Mode mode,
                             MPI_Comm mpiComm)
: DataManCommon("DataManReader", io, name, mode, mpiComm),
  m_DataManDeserializer(m_IsRowMajor, m_IsLittleEndian)
  m_DataManDeserializer(m_IsRowMajor, m_ContiguousMajor, m_IsLittleEndian)
{
    m_EndMessage = " in call to IO Open DataManReader " + m_Name + "\n";
    Init();
@@ -150,10 +150,10 @@ void DataManReader::Flush(const int transportIndex) {}

void DataManReader::Init()
{
    if (m_WorkflowMode != "subscribe" && m_WorkflowMode != "p2p")
    if (m_WorkflowMode == "file")
    {
        throw(std::invalid_argument(
            "[DataManReader::Init] invalid workflow mode " + m_WorkflowMode));
        m_FileTransport.Open(m_Name, Mode::Read);
        return;
    }

    // initialize transports
+27 −6
Original line number Diff line number Diff line
@@ -32,20 +32,41 @@ void DataManReader::GetSyncCommon(Variable<T> &variable, T *data)
template <class T>
void DataManReader::GetDeferredCommon(Variable<T> &variable, T *data)
{
    if (m_WorkflowMode == "subscribe")
    if (m_IsRowMajor)
    {
        while (m_DataManDeserializer.Get(data, variable.m_Name,
                                         variable.m_Start, variable.m_Count,
                                         m_CurrentStep) != 0)
                                         m_CurrentStep, variable.m_MemoryStart,
                                         variable.m_MemoryCount) != 0)
        {
        }
    }
    else if (m_WorkflowMode == "p2p")
    else
    {
        while (m_DataManDeserializer.Get(data, variable.m_Name,
                                         variable.m_Start, variable.m_Count,
                                         m_CurrentStep) != 0)
        if (m_ContiguousMajor)
        {
            Dims start = variable.m_Start;
            Dims count = variable.m_Count;
            Dims memstart = variable.m_MemoryStart;
            Dims memcount = variable.m_MemoryCount;
            std::reverse(start.begin(), start.end());
            std::reverse(count.begin(), count.end());
            std::reverse(memstart.begin(), memstart.end());
            std::reverse(memcount.begin(), memcount.end());
            while (m_DataManDeserializer.Get(data, variable.m_Name, start,
                                             count, m_CurrentStep, memstart,
                                             memcount) != 0)
            {
            }
        }
        else
        {
            while (m_DataManDeserializer.Get(
                       data, variable.m_Name, variable.m_Start,
                       variable.m_Count, m_CurrentStep, variable.m_MemoryStart,
                       variable.m_MemoryCount) != 0)
            {
            }
        }
    }
}
Loading