Changeset 2406
- Timestamp:
- 09/20/22 16:37:37 (21 months ago)
- Location:
- XIOS3/trunk/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS3/trunk/src/interface/c/iccalendar.cpp
r1761 r2406 15 15 CTimer::get("XIOS update calendar").resume(); 16 16 xios::CContext* context = CContext::getCurrent(); 17 if (!context->hasServer && !context->client->isAttachedModeEnabled())17 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 18 18 context->eventLoop(); 19 19 //ym context->checkBuffersAndListen(); -
XIOS3/trunk/src/interface/c/icdata.cpp
r2266 r2406 422 422 CTimer::get("XIOS send field").resume(); 423 423 CContext* context = CContext::getCurrent(); 424 if (!context->hasServer && !context->client->isAttachedModeEnabled())424 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 425 425 context->eventLoop(); 426 426 CArray<double, 1> data(data_k8, shape(data_Xsize), neverDeleteData); … … 450 450 451 451 CContext* context = CContext::getCurrent(); 452 if (!context->hasServer && !context->client->isAttachedModeEnabled())452 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 453 453 context->eventLoop(); 454 454 … … 480 480 481 481 CContext* context = CContext::getCurrent(); 482 if (!context->hasServer && !context->client->isAttachedModeEnabled())482 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 483 483 context->eventLoop(); 484 484 … … 512 512 513 513 CContext* context = CContext::getCurrent(); 514 if (!context->hasServer && !context->client->isAttachedModeEnabled())514 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 515 515 context->eventLoop(); 516 516 … … 546 546 547 547 CContext* context = CContext::getCurrent(); 548 if (!context->hasServer && !context->client->isAttachedModeEnabled())548 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 549 549 context->eventLoop(); 550 550 … … 582 582 583 583 CContext* context = CContext::getCurrent(); 584 if (!context->hasServer && !context->client->isAttachedModeEnabled())584 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 585 585 context->eventLoop(); 586 586 … … 617 617 618 618 CContext* context = CContext::getCurrent(); 619 if (!context->hasServer && !context->client->isAttachedModeEnabled())619 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 620 620 context->eventLoop(); 621 621 … … 653 653 654 654 CContext* context = CContext::getCurrent(); 655 if (!context->hasServer && !context->client->isAttachedModeEnabled())655 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 656 656 context->eventLoop(); 657 657 … … 686 686 CTimer::get("XIOS send field").resume(); 687 687 CContext* context = CContext::getCurrent(); 688 if (!context->hasServer && !context->client->isAttachedModeEnabled())688 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 689 689 context->eventLoop(); 690 690 … … 716 716 717 717 CContext* context = CContext::getCurrent(); 718 if (!context->hasServer && !context->client->isAttachedModeEnabled())718 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 719 719 context->eventLoop(); 720 720 … … 746 746 747 747 CContext* context = CContext::getCurrent(); 748 if (!context->hasServer && !context->client->isAttachedModeEnabled())748 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 749 749 context->eventLoop(); 750 750 … … 778 778 779 779 CContext* context = CContext::getCurrent(); 780 if (!context->hasServer && !context->client->isAttachedModeEnabled())780 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 781 781 context->eventLoop(); 782 782 … … 811 811 812 812 CContext* context = CContext::getCurrent(); 813 if (!context->hasServer && !context->client->isAttachedModeEnabled())813 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 814 814 context->eventLoop(); 815 815 … … 847 847 848 848 CContext* context = CContext::getCurrent(); 849 if (!context->hasServer && !context->client->isAttachedModeEnabled())849 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 850 850 context->eventLoop(); 851 851 … … 882 882 883 883 CContext* context = CContext::getCurrent(); 884 if (!context->hasServer && !context->client->isAttachedModeEnabled())884 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 885 885 context->eventLoop(); 886 886 … … 917 917 918 918 CContext* context = CContext::getCurrent(); 919 if (!context->hasServer && !context->client->isAttachedModeEnabled())919 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 920 920 context->eventLoop(); 921 921 … … 952 952 953 953 CContext* context = CContext::getCurrent(); 954 if (!context->hasServer && !context->client->isAttachedModeEnabled())954 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 955 955 context->eventLoop(); 956 956 … … 980 980 981 981 CContext* context = CContext::getCurrent(); 982 if (!context->hasServer && !context->client->isAttachedModeEnabled())982 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 983 983 context->eventLoop(); 984 984 … … 1007 1007 1008 1008 CContext* context = CContext::getCurrent(); 1009 if (!context->hasServer && !context->client->isAttachedModeEnabled())1009 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1010 1010 context->eventLoop(); 1011 1011 … … 1035 1035 1036 1036 CContext* context = CContext::getCurrent(); 1037 if (!context->hasServer && !context->client->isAttachedModeEnabled())1037 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1038 1038 context->eventLoop(); 1039 1039 … … 1065 1065 1066 1066 CContext* context = CContext::getCurrent(); 1067 if (!context->hasServer && !context->client->isAttachedModeEnabled())1067 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1068 1068 context->eventLoop(); 1069 1069 … … 1096 1096 1097 1097 CContext* context = CContext::getCurrent(); 1098 if (!context->hasServer && !context->client->isAttachedModeEnabled())1098 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1099 1099 context->eventLoop(); 1100 1100 … … 1127 1127 1128 1128 CContext* context = CContext::getCurrent(); 1129 if (!context->hasServer && !context->client->isAttachedModeEnabled())1129 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1130 1130 context->eventLoop(); 1131 1131 … … 1159 1159 1160 1160 CContext* context = CContext::getCurrent(); 1161 if (!context->hasServer && !context->client->isAttachedModeEnabled())1161 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1162 1162 context->eventLoop(); 1163 1163 … … 1194 1194 1195 1195 CContext* context = CContext::getCurrent(); 1196 if (!context->hasServer && !context->client->isAttachedModeEnabled())1196 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1197 1197 context->eventLoop(); 1198 1198 … … 1225 1225 1226 1226 CContext* context = CContext::getCurrent(); 1227 if (!context->hasServer && !context->client->isAttachedModeEnabled())1227 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1228 1228 context->eventLoop(); 1229 1229 … … 1257 1257 1258 1258 CContext* context = CContext::getCurrent(); 1259 if (!context->hasServer && !context->client->isAttachedModeEnabled())1259 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1260 1260 context->eventLoop(); 1261 1261 … … 1288 1288 1289 1289 CContext* context = CContext::getCurrent(); 1290 if (!context->hasServer && !context->client->isAttachedModeEnabled())1290 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1291 1291 context->eventLoop(); 1292 1292 … … 1320 1320 1321 1321 CContext* context = CContext::getCurrent(); 1322 if (!context->hasServer && !context->client->isAttachedModeEnabled())1322 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1323 1323 context->eventLoop(); 1324 1324 … … 1355 1355 1356 1356 CContext* context = CContext::getCurrent(); 1357 if (!context->hasServer && !context->client->isAttachedModeEnabled())1357 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1358 1358 context->eventLoop(); 1359 1359 … … 1389 1389 1390 1390 CContext* context = CContext::getCurrent(); 1391 if (!context->hasServer && !context->client->isAttachedModeEnabled())1391 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1392 1392 context->eventLoop(); 1393 1393 … … 1425 1425 1426 1426 CContext* context = CContext::getCurrent(); 1427 if (!context->hasServer && !context->client->isAttachedModeEnabled())1427 // if (!context->hasServer && !context->client->isAttachedModeEnabled()) 1428 1428 context->eventLoop(); 1429 1429 -
XIOS3/trunk/src/node/context.cpp
r2405 r2406 46 46 , calendar(), hasClient(false), hasServer(false) 47 47 , isPostProcessed(false), finalized(false) 48 , client(nullptr), server(nullptr)49 48 , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false) 50 49 … … 55 54 , calendar(), hasClient(false), hasServer(false) 56 55 , isPostProcessed(false), finalized(false) 57 , client(nullptr), server(nullptr)58 56 , allProcessed(false), countChildContextFinalized_(0), isProcessingEvent_(false) 59 57 { /* Ne rien faire de plus */ } … … 61 59 CContext::~CContext(void) 62 60 { 63 delete client; 64 delete server; 65 for (std::vector<CContextClient*>::iterator it = clientPrimServer.begin(); it != clientPrimServer.end(); it++) delete *it; 66 for (std::vector<CContextServer*>::iterator it = serverPrimServer.begin(); it != serverPrimServer.end(); it++) delete *it; 61 for(auto& client : writerClientOut_) delete client ; 62 for(auto& server : writerServerOut_) delete server ; 63 64 for(auto& client : writerClientIn_) delete client ; 65 for(auto& server : writerServerIn_) delete server ; 66 67 for(auto& client : readerClientOut_) delete client ; 68 for(auto& server : readerServerOut_) delete server ; 69 70 for(auto& client : readerClientIn_) delete client ; 71 for(auto& server : readerServerIn_) delete server ; 72 73 67 74 if (registryIn!=nullptr) delete registryIn ; 68 75 if (registryOut!=nullptr) delete registryOut ; … … 534 541 comms.push_back(intraCommClient); 535 542 // attached_mode=parentServerContext_->isAttachedMode() ; //ym probably inherited from source context 543 544 CContextServer* server ; 545 CContextClient* client ; 546 536 547 server = CContextServer::getNew(this,intraComm_, interCommServer); // check if we need to dupl. intraComm_ ? 537 548 client = CContextClient::getNew(this,intraCommClient,interCommClient); 538 549 client->setAssociatedServer(server) ; 539 server->setAssociatedClient(client) ; 540 550 server->setAssociatedClient(client) ; 551 552 writerServerIn_.push_back(server) ; 553 writerClientIn_.push_back(client) ; 541 554 } 542 555 CATCH_DUMP_ATTR … … 594 607 else createServerInterComm(CXios::defaultPoolId, CXios::defaultServerId, clientServers) ; 595 608 596 client = clientServers[0].second.first ;597 server = clientServers[0].second.second;609 writerClientOut_.push_back(clientServers[0].second.first) ; 610 writerServerOut_.push_back(clientServers[0].second.second) ; 598 611 } 599 612 else if (serviceType_ == CServicesManager::GATHERER) … … 604 617 primServerId_.push_back(clientServer.first) ; 605 618 clientPrimServer.push_back(clientServer.second.first); 606 serverPrimServer.push_back(clientServer.second.second); 607 } 608 } 609 610 } 611 CATCH_DUMP_ATTR 612 613 void CContext::createServerInterComm_old(void) 614 TRY 615 { 616 617 MPI_Comm interCommClient, interCommServer ; 618 619 if (serviceType_ == CServicesManager::CLIENT) 620 { 621 622 int commRank ; 623 MPI_Comm_rank(intraComm_,&commRank) ; 624 if (commRank==0) 625 { 626 if (attached_mode) CXios::getContextsManager()->createServerContext(CClient::getPoolRessource()->getId(), getContextId()+"_"+CXios::defaultServerId, 0, getContextId()) ; 627 else if (CXios::usingServer2) CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId()) ; 628 else CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId()) ; 629 } 630 631 MPI_Comm interComm ; 632 633 if (attached_mode) 634 { 635 parentServerContext_->createIntercomm(CClient::getPoolRessource()->getId(), getContextId()+"_"+CXios::defaultServerId, 0, getContextId(), intraComm_, 636 interCommClient, interCommServer) ; 637 int type ; 638 if (commRank==0) CXios::getServicesManager()->getServiceType(CClient::getPoolRessource()->getId(), CXios::defaultServerId, 0, type) ; 639 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 640 setCurrent(getId()) ; // getCurrent/setCurrent may be supress, it can cause a lot of trouble 641 } 642 else if (CXios::usingServer2) 643 { 644 // CXios::getContextsManager()->createServerContextIntercomm(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId(), intraComm_, interComm) ; 645 parentServerContext_->createIntercomm(CXios::defaultPoolId, CXios::defaultGathererId, 0, getContextId(), intraComm_, 646 interCommClient, interCommServer) ; 647 int type ; 648 if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultGathererId, 0, type) ; 649 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 650 } 651 else 652 { 653 654 //CXios::getContextsManager()->createServerContextIntercomm(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId(), intraComm_, interComm) ; 655 parentServerContext_->createIntercomm(CXios::defaultPoolId, CXios::defaultServerId, 0, getContextId(), intraComm_, 656 interCommClient, interCommServer) ; 657 int type ; 658 if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultServerId, 0, type) ; 659 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 660 } 661 662 // intraComm client is not duplicated. In all the code we use client->intraComm for MPI 663 // in future better to replace it by intracommuncator associated to the context 664 665 MPI_Comm intraCommClient, intraCommServer ; 666 intraCommClient=intraComm_ ; 667 MPI_Comm_dup(intraComm_, &intraCommServer) ; 668 client = CContextClient::getNew(this, intraCommClient, interCommClient); 669 server = CContextServer::getNew(this, intraCommServer, interCommServer); 670 client->setAssociatedServer(server) ; 671 server->setAssociatedClient(client) ; 672 } 673 674 if (serviceType_ == CServicesManager::GATHERER) 675 { 676 int commRank ; 677 MPI_Comm_rank(intraComm_,&commRank) ; 678 679 int nbPartitions ; 680 if (commRank==0) 681 { 682 CXios::getServicesManager()->getServiceNbPartitions(CXios::defaultPoolId, CXios::defaultServerId, 0, nbPartitions) ; 683 for(int i=0 ; i<nbPartitions; i++) 684 CXios::getContextsManager()->createServerContext(CXios::defaultPoolId, CXios::defaultServerId, i, getContextId()) ; 685 } 686 MPI_Bcast(&nbPartitions, 1, MPI_INT, 0, intraComm_) ; 687 688 MPI_Comm interComm ; 689 for(int i=0 ; i<nbPartitions; i++) 690 { 691 parentServerContext_->createIntercomm(CXios::defaultPoolId, CXios::defaultServerId, i, getContextId(), intraComm_, interCommClient, interCommServer) ; 692 int type ; 693 if (commRank==0) CXios::getServicesManager()->getServiceType(CXios::defaultPoolId, CXios::defaultServerId, 0, type) ; 694 MPI_Bcast(&type,1,MPI_INT,0,intraComm_) ; 695 primServerId_.push_back(CXios::getContextsManager()->getServerContextName(CXios::defaultPoolId, CXios::defaultServerId, i, type, getContextId())) ; 696 697 // intraComm client is not duplicated. In all the code we use client->intraComm for MPI 698 // in future better to replace it by intracommuncator associated to the context 699 700 MPI_Comm intraCommClient, intraCommServer ; 701 702 intraCommClient=intraComm_ ; 703 MPI_Comm_dup(intraComm_, &intraCommServer) ; 704 705 CContextClient* client = CContextClient::getNew(this, intraCommClient, interCommClient) ; 706 CContextServer* server = CContextServer::getNew(this, intraCommServer, interCommServer) ; 707 client->setAssociatedServer(server) ; 708 server->setAssociatedClient(client) ; 709 clientPrimServer.push_back(client); 710 serverPrimServer.push_back(server); 711 712 713 } 714 } 619 serverPrimServer.push_back(clientServer.second.second); 620 writerClientOut_.push_back(clientServer.second.first) ; 621 writerServerOut_.push_back(clientServer.second.second) ; 622 } 623 } 624 715 625 } 716 626 CATCH_DUMP_ATTR … … 756 666 setCurrent(getId()) ; 757 667 758 if (client!=nullptr && !finalized) client->eventLoop(); 759 760 for (int i = 0; i < clientPrimServer.size(); ++i) 761 { 762 if (!finalized) clientPrimServer[i]->eventLoop(); 763 if (!finalized) finished &= serverPrimServer[i]->eventLoop(enableEventsProcessing); 764 } 765 766 for (auto couplerOut : couplerOutClient_) 767 if (!finalized) couplerOut.second->eventLoop(); 768 769 for (auto couplerIn : couplerInClient_) 770 if (!finalized) couplerIn.second->eventLoop(); 771 772 for (auto couplerOut : couplerOutServer_) 773 if (!finalized) couplerOut.second->eventLoop(enableEventsProcessing); 774 775 for (auto couplerIn : couplerInServer_) 776 if (!finalized) couplerIn.second->eventLoop(enableEventsProcessing); 777 778 if (server!=nullptr) if (!finalized) finished &= server->eventLoop(enableEventsProcessing); 668 if (!finalized) 669 { 670 for(auto client : writerClientOut_) client->eventLoop(); 671 for(auto server : writerServerOut_) finished &= server->eventLoop(enableEventsProcessing); 672 for(auto client : writerClientIn_) client->eventLoop(); 673 for(auto server : writerServerIn_) finished &= server->eventLoop(enableEventsProcessing); 674 for(auto couplerOut : couplerOutClient_) couplerOut.second->eventLoop(); 675 for(auto couplerIn : couplerInClient_) couplerIn.second->eventLoop(); 676 for(auto couplerOut : couplerOutServer_) couplerOut.second->eventLoop(enableEventsProcessing); 677 for(auto couplerIn : couplerInServer_) couplerIn.second->eventLoop(enableEventsProcessing); 678 } 779 679 setCurrent(getId()) ; 780 680 return finalized && finished ; … … 837 737 { 838 738 registryOut->hierarchicalGatherRegistry() ; 839 if ( server->getIntraCommRank()==0) CXios::getRegistryManager()->merge(*registryOut) ;739 if (intraCommRank_==0) CXios::getRegistryManager()->merge(*registryOut) ; 840 740 841 741 if (serviceType_==CServicesManager::CLIENT) 842 742 { 843 743 //ym doPreTimestepOperationsForEnabledReadModeFiles(); // For now we only use server level 1 to read data 844 845 744 triggerLateFields() ; 846 745 … … 857 756 } while (!couplersInFinalized) ; 858 757 758 759 auto& client=writerClientOut_[0] ; 760 auto& server=writerServerOut_[0] ; 761 859 762 info(100)<<"DEBUG: context "<<getId()<<" Send client finalize"<<endl ; 860 763 client->finalize(); … … 865 768 do 866 769 { 867 notifiedFinalized =client->isNotifiedFinalized() ;770 notifiedFinalized = client->isNotifiedFinalized() ; 868 771 } while (!notifiedFinalized) ; 869 772 … … 874 777 else if (serviceType_==CServicesManager::GATHERER) 875 778 { 876 for (int i = 0; i < clientPrimServer.size(); ++i)779 for(auto& client : writerClientOut_) 877 780 { 878 client PrimServer[i]->finalize();781 client->finalize(); 879 782 bool bufferReleased; 880 783 do 881 784 { 882 client PrimServer[i]->eventLoop();883 bufferReleased = !client PrimServer[i]->havePendingRequests();785 client->eventLoop(); 786 bufferReleased = !client->havePendingRequests(); 884 787 } while (!bufferReleased); 885 788 … … 887 790 do 888 791 { 889 notifiedFinalized=client PrimServer[i]->isNotifiedFinalized() ;792 notifiedFinalized=client->isNotifiedFinalized() ; 890 793 } while (!notifiedFinalized) ; 891 client PrimServer[i]->releaseBuffers();794 client->releaseBuffers(); 892 795 } 893 796 closeAllFile(); 894 797 //ym writerClientIn & writerServerIn not released here ==> to check !! 895 798 } 896 799 else if (serviceType_==CServicesManager::IO_SERVER || serviceType_==CServicesManager::OUT_SERVER) 897 800 { 898 801 closeAllFile(); 899 client->releaseBuffers();900 server->releaseBuffers();802 writerClientIn_[0]->releaseBuffers(); 803 writerServerIn_[0]->releaseBuffers(); 901 804 } 902 805 … … 916 819 MPI_Comm_free(&(*it)); 917 820 comms.clear(); 918 }919 CATCH_DUMP_ATTR920 921 //! Deallocate buffers allocated by clientContexts922 void CContext::releaseClientBuffers(void)923 TRY924 {925 client->releaseBuffers();926 for (int i = 0; i < clientPrimServer.size(); ++i)927 clientPrimServer[i]->releaseBuffers();928 821 } 929 822 CATCH_DUMP_ATTR … … 1072 965 1073 966 // Distribute files between secondary servers according to the data size => assign a context to a file and then to fields 1074 if (serviceType_==CServicesManager:: GATHERER) distributeFiles(this->enabledWriteModeFiles);1075 else if (serviceType_==CServicesManager::CLIENT) for(auto file : this->enabledWriteModeFiles) file->setContextClient(client) ;967 if (serviceType_==CServicesManager::CLIENT || serviceType_==CServicesManager::GATHERER ) distributeFiles(this->enabledWriteModeFiles); 968 //else if (serviceType_==CServicesManager::CLIENT) for(auto file : this->enabledWriteModeFiles) file->setContextClient(client) ; 1076 969 1077 970 // client side, assign context for file reading 1078 if (serviceType_==CServicesManager::CLIENT) for(auto file : this->enabledReadModeFiles) file->setContextClient( client) ;971 if (serviceType_==CServicesManager::CLIENT) for(auto file : this->enabledReadModeFiles) file->setContextClient(writerClientOut_[0]) ; 1079 972 1080 973 // server side, assign context where to send file data read 1081 974 if (serviceType_==CServicesManager::CServicesManager::GATHERER || serviceType_==CServicesManager::IO_SERVER) 1082 for(auto file : this->enabledReadModeFiles) file->setContextClient( client) ;975 for(auto file : this->enabledReadModeFiles) file->setContextClient(writerClientIn_[0]) ; 1083 976 1084 977 … … 1486 1379 distFileMemory=CXios::getin<bool>("server2_dist_file_memory", distFileMemory); 1487 1380 1488 if (distFileMemory) distributeFileOverMemoryBandwith(files) ; 1381 int nbPools = writerClientOut_.size(); 1382 if (nbPools==1) distributeFileOverOne(files) ; 1383 else if (distFileMemory) distributeFileOverMemoryBandwith(files) ; 1489 1384 else distributeFileOverBandwith(files) ; 1385 } 1386 CATCH_DUMP_ATTR 1387 1388 void CContext::distributeFileOverOne(const vector<CFile*>& files) 1389 TRY 1390 { 1391 for(auto& file : files) file->setContextClient(writerClientOut_[0]) ; 1490 1392 } 1491 1393 CATCH_DUMP_ATTR … … 1497 1399 1498 1400 std::ofstream ofs(("distribute_file_"+getId()+".dat").c_str(), std::ofstream::out); 1499 int nbPools = clientPrimServer.size();1401 int nbPools = writerClientOut_.size(); 1500 1402 1501 1403 // (1) Find all enabled files in write mode … … 1550 1452 dataSize=(*poolDataSize.begin()).first ; 1551 1453 j=(*poolDataSize.begin()).second ; 1552 dataSizeMap[i].second->setContextClient( clientPrimServer[j]);1454 dataSizeMap[i].second->setContextClient(writerClientOut_[j]); 1553 1455 dataSize+=dataSizeMap[i].first; 1554 1456 poolDataSize.erase(poolDataSize.begin()) ; … … 1563 1465 TRY 1564 1466 { 1565 int nbPools = clientPrimServer.size();1467 int nbPools = writerClientOut_.size(); 1566 1468 double ratio=0.5 ; 1567 1469 ratio=CXios::getin<double>("server2_dist_file_memory_ratio", ratio); … … 1629 1531 } 1630 1532 } 1631 filesList[i]->setContextClient( clientPrimServer[files[i].assignedServer_]) ;1533 filesList[i]->setContextClient(writerClientOut_[files[i].assignedServer_]) ; 1632 1534 delete [] files[i].assignedGrid_ ; 1633 1535 } … … 1729 1631 CATCH 1730 1632 1731 //! Client side: Send a message to server to make it close1732 // ym obsolete1733 void CContext::sendCloseDefinition(void)1734 TRY1735 {1736 int nbSrvPools ;1737 if (serviceType_==CServicesManager::CLIENT) nbSrvPools = 1 ;1738 else if (serviceType_==CServicesManager::GATHERER) nbSrvPools = this->clientPrimServer.size() ;1739 else nbSrvPools = 0 ;1740 CContextClient* contextClientTmp ;1741 1742 for (int i = 0; i < nbSrvPools; ++i)1743 {1744 if (serviceType_==CServicesManager::CLIENT) contextClientTmp = client ;1745 else if (serviceType_==CServicesManager::GATHERER ) contextClientTmp = clientPrimServer[i] ;1746 CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION);1747 if (contextClientTmp->isServerLeader())1748 {1749 CMessage msg;1750 const std::list<int>& ranks = contextClientTmp->getRanksServerLeader();1751 for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank)1752 event.push(*itRank,1,msg);1753 contextClientTmp->sendEvent(event);1754 }1755 else contextClientTmp->sendEvent(event);1756 }1757 }1758 CATCH_DUMP_ATTR1759 1760 1633 // ! Client side: Send a message to server to make it close 1761 1634 void CContext::sendCloseDefinition(CContextClient* client) -
XIOS3/trunk/src/node/context.hpp
r2405 r2406 160 160 // Distribute files (in write mode) among secondary-server pools according to the estimated data flux 161 161 void distributeFiles(const std::vector<CFile*>& files); 162 void distributeFileOverBandwith(const std::vector<CFile*>& files) ; 163 void distributeFileOverMemoryBandwith(const std::vector<CFile*>& files) ; 162 void distributeFileOverOne(const vector<CFile*>& files) ; //!< Distribute files over one single server (no distribution) 163 void distributeFileOverBandwith(const std::vector<CFile*>& files) ; //!< Distribute files overs servers to balance the I/O bandwith 164 void distributeFileOverMemoryBandwith(const std::vector<CFile*>& files) ; //!< Distribute files overs servers to minimize the memory consumption 164 165 166 public: 165 167 // Send context close definition 166 void sendCloseDefinition(void);167 public:168 168 void sendCloseDefinition(CContextClient* client) ; 169 169 private: … … 223 223 public: 224 224 void freeComms(void); //!< Free internally allcoated communicators 225 void releaseClientBuffers(void); //! Deallocate buffers allocated by clientContexts226 225 227 226 // dispatch event … … 309 308 bool hasServer; 310 309 311 CContextServer* server; //!< Concrete context server 312 CContextClient* client; //!< Concrete contex client 310 private: 313 311 std::vector<CContextServer*> serverPrimServer; 314 312 std::vector<CContextClient*> clientPrimServer; … … 321 319 std::string defaultWriterId ; 322 320 std::string defaultGathererId ; 321 322 std::vector<CContextClient*> writerClientOut_ ; 323 std::vector<CContextServer*> writerServerOut_ ; 324 std::vector<CContextClient*> writerClientIn_ ; 325 std::vector<CContextServer*> writerServerIn_ ; 326 327 std::vector<CContextClient*> readerClientOut_ ; 328 std::vector<CContextServer*> readerServerOut_ ; 329 std::vector<CContextClient*> readerClientIn_ ; 330 std::vector<CContextServer*> readerServerIn_ ; 331 323 332 324 333 std::map<std::string, CContextClient*> clients_ ; -
XIOS3/trunk/src/node/field.cpp
r2397 r2406 1456 1456 CATCH_DUMP_ATTR 1457 1457 1458 void CField::sendCloseDefinition(void)1459 {1460 CContext::getCurrent()->sendCloseDefinition(client) ;1461 }1462 1458 1463 1459 void CField::sendFieldToFileServer(void) -
XIOS3/trunk/src/node/field.hpp
r2326 r2406 146 146 147 147 void sendFieldToFileServer(void) ; 148 void sendCloseDefinition(void) ;149 148 150 149 public:
Note: See TracChangeset
for help on using the changeset viewer.