Changeset 178
- Timestamp:
- 04/18/11 14:56:41 (14 years ago)
- Location:
- XMLIO_V2/dev/dev_rv
- Files:
-
- 7 edited
Legend:
- Unmodified
- Added
- Removed
-
XMLIO_V2/dev/dev_rv/Makefile.wk
r177 r178 15 15 VTK = no 16 16 GUI = no 17 NPROC = 1 117 NPROC = 12 18 18 CSUITE = gnu 19 19 PFORME = fedora-wk -
XMLIO_V2/dev/dev_rv/src/xmlio/buffer_list.cpp
r152 r178 54 54 55 55 StdSize CBufferList::getNumberOfBuffers(void) const 56 { return (this->nbbuffer) ; } 56 { 57 return (this->nbbuffer) ; 58 } 57 59 58 60 ///-------------------------------------------------------------- -
XMLIO_V2/dev/dev_rv/src/xmlio/buffer_pair.cpp
r152 r178 6 6 { 7 7 /// ////////////////////// Définitions ////////////////////// /// 8 CBufferPair::CBufferPair(MPIComm com_client_server) 9 : com_client_server(com_client_server) 10 , first(BUFFER_CLIENT_SIZE), second(BUFFER_CLIENT_SIZE) 11 , first_request(-1), second_request(-1) 12 , currentBuffer(0) 13 { /* Ne rien faire de plus */ } 8 14 15 CBufferPair::~CBufferPair(void) 16 { /* Ne rien faire de plus */ } 17 18 ///-------------------------------------------------------------- 19 20 bool CBufferPair::mustBeSent(void) 21 { 22 if (((currentBuffer == 0) && (first.getUsedSize() != 0) && 23 ((second_request == -1) || CMPIManager::Test (second_request))) || 24 ((currentBuffer == 1) && (second.getUsedSize() != 0) && 25 ((first_request == -1) || CMPIManager::Test (first_request)))) 26 return (true); 27 return (false); 28 } 29 30 //--------------------------------------------------------------- 31 32 void CBufferPair::wait(void) 33 { 34 if (this->currentBuffer == 0) 35 CMPIManager::Wait(this->second_request); 36 else CMPIManager::Wait(this->first_request); 37 } 38 39 //--------------------------------------------------------------- 40 41 void CBufferPair::sendCurrentBuffer(void) 42 { 43 if (this->currentBuffer == 0) 44 { 45 CMPIManager::SendLinearBuffer 46 (this->com_client_server, 0, this->first, this->first_request); 47 this->currentBuffer = 1; 48 this->second.clear(); 49 } 50 else 51 { 52 CMPIManager::SendLinearBuffer 53 (this->com_client_server, 0, this->second, this->second_request); 54 this->currentBuffer = 0; 55 this->first.clear(); 56 } 57 } 58 59 //--------------------------------------------------------------- 60 61 CLinearBuffer & CBufferPair::getCurrentBuffer(void) 62 { 63 if (currentBuffer == 0) return (this->first); 64 return (this->second); 65 } 66 67 ///-------------------------------------------------------------- 9 68 10 69 } // namespace tree -
XMLIO_V2/dev/dev_rv/src/xmlio/buffer_pair.hpp
r157 r178 15 15 /// ////////////////////// Déclarations ////////////////////// /// 16 16 class CBufferPair 17 : public std::pair<CLinearBuffer, CLinearBuffer> // << pas une liste18 17 { 19 18 20 19 /// Définition de type /// 21 typedef std::pair<CLinearBuffer, CLinearBuffer> SuperClass;22 20 typedef CLinearBuffer BufferType; 23 21 … … 29 27 CBufferPair(const CBufferPair * const buffer_pair); // Not implemented yet. 30 28 29 template <typename A1, typename A2, typename A3, typename A4> 30 void prepareRequest(const long int & managerId, 31 const long int & methodId, 32 A1 * arg1 = CLinearBuffer::NULL_ARG, 33 A2 * arg2 = CLinearBuffer::NULL_ARG, 34 A3 * arg3 = CLinearBuffer::NULL_ARG, 35 A4 * arg4 = CLinearBuffer::NULL_ARG); 36 31 37 /// Destructeur /// 32 38 virtual ~CBufferPair(void); 39 40 protected : 41 42 /// Test /// 43 bool mustBeSent(void); 44 45 /// Traitements divers /// 46 void wait(void); 47 void sendCurrentBuffer(void); 48 49 /// Accesseur /// 50 CLinearBuffer & getCurrentBuffer(void); 33 51 34 52 private : 35 53 36 54 MPIComm com_client_server; 55 CLinearBuffer first, second; 56 MPIRequest first_request, second_request; 57 int currentBuffer; 37 58 38 59 }; // class CBufferPair 60 61 ///-------------------------------------------------------------- 62 63 template <typename A1, typename A2, typename A3, typename A4> 64 void CBufferPair::prepareRequest(const long int & managerId, 65 const long int & methodId, 66 A1 * arg1, A2 * arg2, A3 * arg3, A4 * arg4) 67 { 68 if (this->mustBeSent()) this->sendCurrentBuffer(); 69 70 CLinearBuffer & cbuffer = this->getCurrentBuffer(); 71 StdSize usize = cbuffer.getUnusedSize(); 72 StdSize rsize = cbuffer.getRequestedSize(arg1, arg2, arg3, arg4) ; 73 StdSize msize = cbuffer.getSize(); 74 75 long int nbargs = 0; 76 77 if (arg1 != CLinearBuffer::NULL_ARG) nbargs++; 78 if (arg2 != CLinearBuffer::NULL_ARG) nbargs++; 79 if (arg3 != CLinearBuffer::NULL_ARG) nbargs++; 80 if (arg4 != CLinearBuffer::NULL_ARG) nbargs++; 81 82 if (rsize > msize) 83 ERROR("CBufferPair::sendRequest(...)", << "Le tampon client est trop petit !"); 84 85 if (rsize <= usize) 86 { 87 cbuffer.appendRequestInfos(managerId, methodId, nbargs); 88 } 89 else 90 { 91 this->wait(); 92 this->prepareRequest(managerId, methodId, arg1, arg2, arg3, arg4); 93 } 94 } 95 96 ///-------------------------------------------------------------- 97 98 39 99 } // namespace comm 40 100 } // namespace xmlioserver -
XMLIO_V2/dev/dev_rv/src/xmlio/linear_buffer.cpp
r152 r178 44 44 return (SuperClass::get##Type(this->bdata[position])); \ 45 45 } 46 47 46 48 47 CLinearBufferGetter(char , Char) -
XMLIO_V2/dev/dev_rv/src/xmlio/manager/xios_manager.cpp
r177 r178 44 44 (StdString clientName, comm::MPIComm comm_client_server, comm::MPIComm comm_server) 45 45 { 46 46 47 47 } 48 48 49 49 //-------------------------------------------------------------- 50 51 void CXIOSManager:: RunClientServer(comm::MPIComm comm_client_server)50 51 void CXIOSManager::ShowInformation_CS(comm::MPIComm comm_client_server) 52 52 { 53 53 using namespace comm; 54 54 typedef std::pair<StdString, XIOSClient> StdPairStrClient; 55 56 55 if (CMPIManager::IsMaster(comm_client_server)) 57 56 { … … 89 88 90 89 comm::CMPIManager::Barrier(); 90 91 } 92 93 //-------------------------------------------------------------- 94 95 void CXIOSManager::RunClientServer(comm::MPIComm comm_client_server) 96 { 97 using namespace comm; 98 typedef std::pair<StdString, XIOSClient> StdPairStrClient; 99 100 CXIOSManager::ShowInformation_CS(comm_client_server); 101 102 xios_map<StdString, XIOSClient>::iterator 103 iit = CXIOSManager::Clients.begin(), 104 eend = CXIOSManager::Clients.end(); 105 91 106 StdSize start = 0, end = 0; 92 107 93 xios_map<StdString, XIOSClient>::iterator 94 iit = CXIOSManager::Clients.begin(), 95 eend = CXIOSManager::Clients.end(); 96 97 bool isClient = true, isIncl = false; 108 bool isClient = true, isIncl = false, isIncl_ = false; 98 109 MPIComm comm_client = 0, comm_client_grp = 0; comm_client_server = 0; 99 110 … … 130 141 if (currentRank == start) 131 142 { 132 isClient = false; 143 isClient = false; isIncl_ = true; 133 144 CXIOSManager::Comm_Client_Server = comm_; 134 145 } 135 146 if (clieindex.size() == nbClient) 136 147 { 137 MPIComm comm___ =CMPIManager::CreateComm148 MPIComm comm___ = CMPIManager::CreateComm 138 149 (CMPIManager::CreateSubGroup(CMPIManager::GetGroupWorld(), clieindex)); 139 if (isIncl) 140 { 141 comm_client = comm___; 142 } 150 if (isIncl) comm_client = comm___; 143 151 clieindex.clear(); 144 152 isIncl = false; … … 147 155 start = start + nbClientPServer + 1; 148 156 } 149 CXIOSManager::Comm_Server =CMPIManager::CreateComm157 MPIComm comm____ = CMPIManager::CreateComm 150 158 (CMPIManager::CreateSubGroup(CMPIManager::GetGroupWorld(), servindex)); 151 152 } 153 154 if (isClient) 159 if (isIncl_) CXIOSManager::Comm_Server = comm____; 160 servindex.clear(); 161 isIncl_ = false; 162 } 163 164 if (isClient && (CXIOSManager::Clients.find(CXIOSManager::ClientName) != 165 CXIOSManager::Clients.end())) 155 166 { 156 167 CXIOSManager::Clients[CXIOSManager::ClientName].entry 157 168 (comm_client, comm_client_grp, comm_client_server); 158 169 } 159 else 170 else if(CXIOSManager::Clients.find(CXIOSManager::ClientName) != 171 CXIOSManager::Clients.end()) 160 172 { 161 173 CXIOSManager::RunServer(CXIOSManager::ClientName, … … 164 176 } 165 177 } 166 178 179 //--------------------------------------------------------------- 180 167 181 void CXIOSManager::RunClient(comm::MPIComm comm_client) 168 182 { … … 225 239 } 226 240 } 241 242 //--------------------------------------------------------------- 227 243 228 244 StdSize CXIOSManager::GetNbLocClient(const StdString & clientName) … … 239 255 } 240 256 } 257 258 //--------------------------------------------------------------- 241 259 242 260 StdSize CXIOSManager::GetNbServer(void) … … 270 288 } 271 289 290 //--------------------------------------------------------------- 291 272 292 StdSize CXIOSManager::GetNbLocServer(const StdString & clientName) 273 293 { -
XMLIO_V2/dev/dev_rv/src/xmlio/manager/xios_manager.hpp
r177 r178 55 55 56 56 private : 57 58 /// Information /// 59 static void ShowInformation_CS(comm::MPIComm comm_client_server); 57 60 58 61 /// variables privées ///
Note: See TracChangeset
for help on using the changeset viewer.