/*******************************************************************/ /* XDMF */ /* eXtensible Data Model and Format */ /* */ /* Id : Id */ /* Date : $Date$ */ /* Version : $Revision$ */ /* */ /* Author: */ /* Jerry A. Clarke */ /* clarke@arl.army.mil */ /* US Army Research Laboratory */ /* Aberdeen Proving Ground, MD */ /* */ /* Copyright @ 2007 US Army Research Laboratory */ /* All Rights Reserved */ /* See Copyright.txt or http://www.arl.hpc.mil/ice for details */ /* */ /* This software is distributed WITHOUT ANY WARRANTY; without */ /* even the implied warranty of MERCHANTABILITY or FITNESS */ /* FOR A PARTICULAR PURPOSE. See the above copyright notice */ /* for more information. */ /* */ /*******************************************************************/ #ifndef __XdmfDsm_h #define __XdmfDsm_h #include "XdmfObject.h" #define XDMF_DSM_OPCODE_DONE 0xFF //! Base comm object for Distributed Shared Memory implementation /*! */ namespace xdmf2 { class XdmfDsmMsg; class XdmfDsmComm; class XdmfDsm; class XdmfArray; #define XDMF_DSM_TYPE_UNIFORM 0 #define XDMF_DSM_TYPE_UNIFORM_RANGE 1 #define XDMF_DSM_TYPE_MIXED 2 #define XDMF_DSM_DEFAULT_LENGTH 10000 class XDMF_EXPORT XdmfDsm : public XdmfObject { public: XdmfDsm(); virtual ~XdmfDsm(); XdmfConstString GetClassName() { return ( "XdmfDsm" ) ; }; //! Type XdmfGetValueMacro(DsmType, XdmfInt32); XdmfSetValueMacro(DsmType, XdmfInt32); //! End Address XdmfGetValueMacro(EndAddress, XdmfInt64); XdmfSetValueMacro(EndAddress, XdmfInt64); //! Start Address XdmfGetValueMacro(StartAddress, XdmfInt64); XdmfSetValueMacro(StartAddress, XdmfInt64); //! Start Id XdmfGetValueMacro(StartServerId, XdmfInt32); XdmfSetValueMacro(StartServerId, XdmfInt32); //! End Id XdmfGetValueMacro(EndServerId, XdmfInt32); XdmfSetValueMacro(EndServerId, XdmfInt32); //! Length XdmfGetValueMacro(Length, XdmfInt64); XdmfInt32 SetLength(XdmfInt64 Length); //! totalLength XdmfGetValueMacro(TotalLength, XdmfInt64); XdmfSetValueMacro(TotalLength, XdmfInt64); //! Storage XdmfGetValueMacro(Storage, XdmfArray *); XdmfInt32 SetStorage(XdmfArray *Storage); //! Comm XdmfGetValueMacro(Comm, XdmfDsmComm *); XdmfSetValueMacro(Comm, XdmfDsmComm *); //! Msg XdmfGetValueMacro(Msg, XdmfDsmMsg *); XdmfSetValueMacro(Msg, XdmfDsmMsg *); //! Address Range XdmfInt32 GetAddressRangeForId(XdmfInt32 Id, XdmfInt64 *Start, XdmfInt64 *End); //! Configure the system. Set the Comm and ServerIds XdmfInt32 ConfigureUniform(XdmfDsmComm *Comm, XdmfInt64 Length, XdmfInt32 StartId=-1, XdmfInt32 EndId=-1); XdmfInt32 AddressToId(XdmfInt64 Address); XdmfInt32 SendCommandHeader(XdmfInt32 Opcode, XdmfInt32 Dest, XdmfInt64 Address, XdmfInt64 Length); XdmfInt32 ReceiveCommandHeader(XdmfInt32 *Opcode, XdmfInt32 *Source, XdmfInt64 *Address, XdmfInt64 *Length, XdmfInt32 Block=1); XdmfInt32 SendData(XdmfInt32 Dest, void *Data, XdmfInt64 Length); XdmfInt32 ReceiveData(XdmfInt32 Source, void *Data, XdmfInt64 Length, XdmfInt32 Block=1); virtual XdmfInt32 Copy(XdmfDsm *Source); XdmfInt32 SendDone(); protected: XdmfInt32 DsmType; XdmfInt32 StartServerId; XdmfInt32 EndServerId; XdmfInt32 StorageIsMine; XdmfInt64 StartAddress; XdmfInt64 EndAddress; XdmfInt64 Length; XdmfInt64 TotalLength; XdmfInt64 *Locks; XdmfArray *Storage; XdmfDsmComm *Comm; XdmfDsmMsg *Msg; XdmfByte *DataPointer; }; } #endif // __XdmfDsm_h