#ifndef TP_MEMORY_INTERFACE_H #define TP_MEMORY_INTERFACE_H #include #include typedef enum { DDR, HBM, SSD, HDD } mem_t; class iMemory { public: /************************/ /* |-- Allocation */ /************************/ virtual void memAlloc ( int64_t buffSize, mem_t mem, bool masterRank, char* fileName, MPI_Comm comm ) = 0; virtual void memFree ( ) = 0; /************************/ /* |-- I/O */ /************************/ //virtual int memWrite ( iMemory srcMem, int64_t srcSize, int64_t offset ); //virtual int memRead ( iMemory srcMem, int64_t srcSize, int64_t offset ); virtual int memWrite ( void* srcBuffer, int64_t srcSize, int64_t offset, int destRank ) = 0; virtual int memRead ( void* srcBuffer, int64_t srcSize, int64_t offset, int destRank ) = 0; virtual int memFlush ( ) = 0; virtual int memUncache ( ) = 0; /************************/ /* |-- Utils */ /************************/ virtual char* memName ( ) = 0; virtual mem_t memType ( char* name ) = 0; /************************/ /* |-- Characteristics */ /************************/ virtual int64_t memBandwidth ( ) = 0; virtual int64_t memLatency ( ) = 0; virtual int64_t memCapacity ( ) = 0; virtual bool memPersistency ( ) = 0; /* Temporary */ void *buffer_; protected: mem_t mem_; bool masterRank_; MPI_Comm comm_; int64_t buffSize_; MPI_Win RMAWin_; MPI_File fileHandle_; MPI_Request request_; char fileName_[4096]; }; #endif // TP_MEMORY_INTERFACE_H