Ignore:
Timestamp:
08/31/22 17:23:56 (22 months ago)
Author:
ymipsl
Message:
  • Optimize remote connector computation in case of read (reverse way).
  • don't compute anymore clientFromServerConnector (and all intermediate computation) for non reading case.

YM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS3/trunk/src/node/grid.cpp

    r2351 r2397  
    14481448  
    14491449 
    1450   void CGrid::sendGridToFileServer(CContextClient* client) 
     1450  void CGrid::sendGridToFileServer(CContextClient* client, bool inOut) 
    14511451  { 
    14521452    if (sendGridToFileServer_done_.count(client)!=0) return ; 
     
    14571457    gridPtr->sendCreateChild(this->getId(),client); 
    14581458    this->sendAllAttributesToServer(client); 
    1459     distributeGridToServer(client) ; 
     1459    distributeGridToServer(client, inOut) ; 
    14601460  } 
    14611461 
     
    14661466    else sendGridToCouplerOut_done_.insert(client) ; 
    14671467    this->sendAllAttributesToServer(client, getCouplingAlias(fieldId)); 
    1468     distributeGridToServer(client, fieldId) ; 
    1469   } 
    1470  
    1471  
    1472   void CGrid::distributeGridToServer(CContextClient* client, const string& fieldId) 
     1468    distributeGridToServer(client, false, fieldId) ; 
     1469  } 
     1470 
     1471 
     1472  void CGrid::distributeGridToServer(CContextClient* client, bool inOut, const string& fieldId) 
    14731473  { 
    14741474    CContext* context = CContext::getCurrent(); 
     
    15201520    // CGridClientServerRemoteConnector : workflowView is added to avoid spurious optimisation with only the fullview 
    15211521    auto gridRemoteConnector = make_shared<CGridClientServerRemoteConnector>(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; 
    1522     gridRemoteConnector->computeConnector(true) ; 
     1522    gridRemoteConnector->computeConnectorOut() ; 
    15231523     
    1524     auto gridRemoteConnectorIn = make_shared<CGridClientServerRemoteConnector>(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; 
    1525     gridRemoteConnectorIn->computeConnector(false) ; 
    1526  
    1527      
     1524    shared_ptr<CGridClientServerRemoteConnector> gridRemoteConnectorIn ; 
     1525    if (inOut) 
     1526    { 
     1527      gridRemoteConnectorIn = make_shared<CGridClientServerRemoteConnector>(localViews, workflowView, remoteViews, context->getIntraComm(), client->getRemoteSize()) ; 
     1528      gridRemoteConnectorIn->computeConnectorIn() ; 
     1529    } 
     1530    else gridRemoteConnectorIn = gridRemoteConnector ; 
     1531 
     1532 
    15281533    vector<shared_ptr<CScattererConnector>> scattererConnectors ; 
    15291534    shared_ptr<CScattererConnector> scattererConnector; 
     
    15331538      {  
    15341539        CDomain* domain = (CDomain*) elements[i].ptr ; 
    1535         if (isCoupling) domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), 
     1540        if (isCoupling) domain->distributeToServer(client, inOut, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), 
    15361541                                                   scattererConnector,  domain->getCouplingAlias(fieldId,i)) ; 
    15371542        else  
    15381543        { 
    15391544          sendAddDomain(domain->getId(),client) ; 
    1540           domain->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; 
     1545          domain->distributeToServer(client, inOut, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; 
    15411546        } 
    15421547        scattererConnectors.push_back(scattererConnector) ; 
     
    15451550      { 
    15461551        CAxis* axis = (CAxis*) elements[i].ptr ; 
    1547         if (isCoupling) axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), 
     1552        if (isCoupling) axis->distributeToServer(client, inOut, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), 
    15481553                                                 scattererConnector,  axis->getCouplingAlias(fieldId,i)) ; 
    15491554        else  
    15501555        { 
    15511556          sendAddAxis(axis->getId(),client) ; 
    1552           axis->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; 
     1557          axis->distributeToServer(client, inOut, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; 
    15531558        } 
    15541559        scattererConnectors.push_back(scattererConnector) ; 
     
    15571562      { 
    15581563        CScalar* scalar = (CScalar*) elements[i].ptr ; 
    1559         if (isCoupling) scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), 
     1564        if (isCoupling) scalar->distributeToServer(client, inOut, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), 
    15601565                                                   scattererConnector,  scalar->getCouplingAlias(fieldId,i)) ; 
    15611566        else  
    15621567        { 
    15631568          sendAddScalar(scalar->getId(),client) ; 
    1564           scalar->distributeToServer(client, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; 
     1569          scalar->distributeToServer(client, inOut, gridRemoteConnector->getDistributedGlobalIndex(i), gridRemoteConnectorIn->getDistributedGlobalIndex(i), scattererConnector) ; 
    15651570        } 
    15661571        scattererConnectors.push_back(scattererConnector) ; 
     
    15881593      {  
    15891594         clientToServerConnectors.push_back(element.domain->getClientToServerConnector(client)) ; 
    1590          clientFromServerConnectors.push_back(element.domain->getClientFromServerConnector(client)) ; 
     1595         if (inOut) clientFromServerConnectors.push_back(element.domain->getClientFromServerConnector(client)) ; 
    15911596      } 
    15921597      else if (element.type==TYPE_AXIS) 
    15931598      { 
    15941599        clientToServerConnectors.push_back(element.axis->getClientToServerConnector(client)) ; 
    1595         clientFromServerConnectors.push_back(element.axis->getClientFromServerConnector(client)) ; 
     1600        if (inOut) clientFromServerConnectors.push_back(element.axis->getClientFromServerConnector(client)) ; 
    15961601 
    15971602      } 
     
    15991604      { 
    16001605        clientToServerConnectors.push_back(element.scalar->getClientToServerConnector(client)) ; 
    1601         clientFromServerConnectors.push_back(element.scalar->getClientFromServerConnector(client)) ; 
     1606        if (inOut) clientFromServerConnectors.push_back(element.scalar->getClientFromServerConnector(client)) ; 
    16021607      } 
    16031608    } 
     
    16051610    // compute the grid clientToServerConnector to send flux from client to servers 
    16061611    clientToServerConnector_[client] = make_shared<CGridScattererConnector>(clientToServerConnectors) ; 
    1607     clientFromServerConnector_[client] = make_shared<CGridGathererConnector>(clientFromServerConnectors) ; 
     1612    if (inOut) clientFromServerConnector_[client] = make_shared<CGridGathererConnector>(clientFromServerConnectors) ; 
    16081613 
    16091614  } 
Note: See TracChangeset for help on using the changeset viewer.