Lines Matching refs:sf

6 static PetscErrorCode PetscSFLinkInitMPIRequests_Persistent_Basic(PetscSF sf, PetscSFLink link, Pet…  in PetscSFLinkInitMPIRequests_Persistent_Basic()  argument
8 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFLinkInitMPIRequests_Persistent_Basic()
13 MPI_Comm comm = PetscObjectComm((PetscObject)sf); in PetscSFLinkInitMPIRequests_Persistent_Basic()
20 PetscCall(PetscSFGetRootInfo_Basic(sf, &nrootranks, &ndrootranks, NULL, &rootoffset, NULL)); in PetscSFLinkInitMPIRequests_Persistent_Basic()
37 …if (sf->leafbuflen[PETSCSF_REMOTE] && !link->leafreqsinited[direction][leafmtype_mpi][leafdirect_m… in PetscSFLinkInitMPIRequests_Persistent_Basic()
38 … PetscCall(PetscSFGetLeafInfo_Basic(sf, &nleafranks, &ndleafranks, NULL, &leafoffset, NULL, NULL)); in PetscSFLinkInitMPIRequests_Persistent_Basic()
43 …_Send_init(link->leafbuf[PETSCSF_REMOTE][leafmtype_mpi] + disp, cnt, unit, sf->ranks[i], link->tag… in PetscSFLinkInitMPIRequests_Persistent_Basic()
49 …_Recv_init(link->leafbuf[PETSCSF_REMOTE][leafmtype_mpi] + disp, cnt, unit, sf->ranks[i], link->tag… in PetscSFLinkInitMPIRequests_Persistent_Basic()
58 static PetscErrorCode PetscSFLinkStartCommunication_Persistent_Basic(PetscSF sf, PetscSFLink link, … in PetscSFLinkStartCommunication_Persistent_Basic() argument
62 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFLinkStartCommunication_Persistent_Basic()
66 …rbuflen = (direction == PETSCSF_ROOT2LEAF) ? sf->leafbuflen[PETSCSF_REMOTE] : bas->rootbuflen[PETS… in PetscSFLinkStartCommunication_Persistent_Basic()
69 nrreqs = sf->nleafreqs; in PetscSFLinkStartCommunication_Persistent_Basic()
70 PetscCall(PetscSFLinkGetMPIBuffersAndRequests(sf, link, direction, NULL, NULL, NULL, &rreqs)); in PetscSFLinkStartCommunication_Persistent_Basic()
73 PetscCall(PetscSFLinkGetMPIBuffersAndRequests(sf, link, direction, NULL, NULL, &rreqs, NULL)); in PetscSFLinkStartCommunication_Persistent_Basic()
77 …sbuflen = (direction == PETSCSF_ROOT2LEAF) ? bas->rootbuflen[PETSCSF_REMOTE] : sf->leafbuflen[PETS… in PetscSFLinkStartCommunication_Persistent_Basic()
81 …PetscCall(PetscSFLinkCopyRootBufferInCaseNotUseGpuAwareMPI(sf, link, PETSC_TRUE /*device2host befo… in PetscSFLinkStartCommunication_Persistent_Basic()
82 PetscCall(PetscSFLinkGetMPIBuffersAndRequests(sf, link, direction, NULL, NULL, &sreqs, NULL)); in PetscSFLinkStartCommunication_Persistent_Basic()
84 nsreqs = sf->nleafreqs; in PetscSFLinkStartCommunication_Persistent_Basic()
85 PetscCall(PetscSFLinkCopyLeafBufferInCaseNotUseGpuAwareMPI(sf, link, PETSC_TRUE)); in PetscSFLinkStartCommunication_Persistent_Basic()
86 PetscCall(PetscSFLinkGetMPIBuffersAndRequests(sf, link, direction, NULL, NULL, NULL, &sreqs)); in PetscSFLinkStartCommunication_Persistent_Basic()
89 …PetscCall(PetscSFLinkSyncStreamBeforeCallMPI(sf, link)); // need to sync the stream to make BOTH s… in PetscSFLinkStartCommunication_Persistent_Basic()
97 static PetscErrorCode PetscSFLinkStartCommunication_MPIX_Stream(PetscSF sf, PetscSFLink link, Petsc… in PetscSFLinkStartCommunication_MPIX_Stream() argument
99 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFLinkStartCommunication_MPIX_Stream()
104 MPI_Comm stream_comm = sf->stream_comm; in PetscSFLinkStartCommunication_MPIX_Stream()
111 PetscCall(PetscSFGetRootInfo_Basic(sf, &nrootranks, &ndrootranks, NULL, &rootoffset, NULL)); in PetscSFLinkStartCommunication_MPIX_Stream()
128 if (sf->leafbuflen[PETSCSF_REMOTE]) { in PetscSFLinkStartCommunication_MPIX_Stream()
129 … PetscCall(PetscSFGetLeafInfo_Basic(sf, &nleafranks, &ndleafranks, NULL, &leafoffset, NULL, NULL)); in PetscSFLinkStartCommunication_MPIX_Stream()
135 …nd_enqueue(link->leafbuf[PETSCSF_REMOTE][leafmtype_mpi] + disp, cnt, unit, sf->ranks[i], link->tag… in PetscSFLinkStartCommunication_MPIX_Stream()
141 …cv_enqueue(link->leafbuf[PETSCSF_REMOTE][leafmtype_mpi] + disp, cnt, unit, sf->ranks[i], link->tag… in PetscSFLinkStartCommunication_MPIX_Stream()
148 static PetscErrorCode PetscSFLinkFinishCommunication_MPIX_Stream(PetscSF sf, PetscSFLink link, Pets… in PetscSFLinkFinishCommunication_MPIX_Stream() argument
150 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFLinkFinishCommunication_MPIX_Stream()
156 …PetscCallMPI(MPIX_Waitall_enqueue(sf->nleafreqs, link->leafreqs[direction][leafmtype_mpi][leafdire… in PetscSFLinkFinishCommunication_MPIX_Stream()
161 static PetscErrorCode PetscSFSetCommunicationOps_Basic(PetscSF sf, PetscSFLink link) in PetscSFSetCommunicationOps_Basic() argument
168 …if (sf->use_stream_aware_mpi && (PetscMemTypeDevice(rootmtype_mpi) || PetscMemTypeDevice(leafmtype… in PetscSFSetCommunicationOps_Basic()
179 PETSC_INTERN PetscErrorCode PetscSFSetUp_Basic(PetscSF sf) in PetscSFSetUp_Basic() argument
181 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFSetUp_Basic()
191 PetscCall(PetscSFSetUpRanks(sf, group)); in PetscSFSetUp_Basic()
193 PetscCall(PetscObjectGetComm((PetscObject)sf, &comm)); in PetscSFSetUp_Basic()
194 PetscCall(PetscObjectGetNewTag((PetscObject)sf, &tag)); in PetscSFSetUp_Basic()
199 PetscCall(PetscMalloc1(sf->nranks, &rlengths)); in PetscSFSetUp_Basic()
201 …for (PetscMPIInt i = 0; i < sf->nranks; i++) rlengths[i] = sf->roffset[i + 1] - sf->roffset[i]; /*… in PetscSFSetUp_Basic()
202 nRemoteRootRanks = sf->nranks - sf->ndranks; in PetscSFSetUp_Basic()
203 …RemoteRootRanks, PetscSafePointerPlusOffset(sf->ranks, sf->ndranks), PetscSafePointerPlusOffset(rl… in PetscSFSetUp_Basic()
212 bas->ndiranks = sf->ndranks; in PetscSFSetUp_Basic()
217 bas->iranks[i] = sf->ranks[i]; in PetscSFSetUp_Basic()
235 for (PetscMPIInt i = 0; i < sf->nranks; i++) { in PetscSFSetUp_Basic()
236 PetscInt npoints = sf->roffset[i + 1] - sf->roffset[i]; in PetscSFSetUp_Basic()
237 if (i < sf->ndranks) { in PetscSFSetUp_Basic()
238 …PetscCheck(sf->ranks[i] == rank, PETSC_COMM_SELF, PETSC_ERR_PLIB, "Cannot interpret distinguished … in PetscSFSetUp_Basic()
241 … PetscCall(PetscArraycpy(bas->irootloc + bas->ioffset[0], sf->rremote + sf->roffset[i], npoints)); in PetscSFSetUp_Basic()
244 …PetscCallMPI(MPIU_Isend(sf->rremote + sf->roffset[i], npoints, MPIU_INT, sf->ranks[i], tag, comm, … in PetscSFSetUp_Basic()
249 sf->nleafreqs = nRemoteRootRanks; in PetscSFSetUp_Basic()
253 PetscCall(PetscSFSetUpPackFields(sf)); in PetscSFSetUp_Basic()
258 PETSC_INTERN PetscErrorCode PetscSFReset_Basic(PetscSF sf) in PetscSFReset_Basic() argument
260 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFReset_Basic()
264 …PetscCheck(!bas->inuse, PetscObjectComm((PetscObject)sf), PETSC_ERR_ARG_WRONGSTATE, "Outstanding o… in PetscSFReset_Basic()
269 for (int i = 0; i < 2; i++) PetscCall(PetscSFFree(sf, PETSC_MEMTYPE_DEVICE, bas->irootloc_d[i])); in PetscSFReset_Basic()
273 PetscCall(PetscSFReset_Basic_NVSHMEM(sf)); in PetscSFReset_Basic()
278 PetscCall(PetscSFLinkDestroy(sf, link)); in PetscSFReset_Basic()
281 PetscCall(PetscSFResetPackFields(sf)); in PetscSFReset_Basic()
285 PETSC_INTERN PetscErrorCode PetscSFDestroy_Basic(PetscSF sf) in PetscSFDestroy_Basic() argument
288 PetscCall(PetscSFReset_Basic(sf)); in PetscSFDestroy_Basic()
289 PetscCall(PetscFree(sf->data)); in PetscSFDestroy_Basic()
296 PETSC_INTERN PetscErrorCode PetscSFView_Basic_PatternAndSizes(PetscSF sf, PetscViewer viewer) in PetscSFView_Basic_PatternAndSizes() argument
298 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFView_Basic_PatternAndSizes()
303 MPI_Comm comm = PetscObjectComm((PetscObject)sf); in PetscSFView_Basic_PatternAndSizes()
322 PetscCall(PetscSFGetRootInfo_Basic(sf, &nrootranks, &ndrootranks, &rootranks, &rootoffset, NULL)); in PetscSFView_Basic_PatternAndSizes()
334 PETSC_INTERN PetscErrorCode PetscSFView_Basic(PetscSF sf, PetscViewer viewer) in PetscSFView_Basic() argument
340 …II_MATLAB) PetscCall(PetscViewerASCIIPrintf(viewer, " MultiSF sort=%s\n", sf->rankorder ? "rank-o… in PetscSFView_Basic()
346 …EWER_ASCII_MATLAB) || isdraw || isbinary) PetscCall(PetscSFView_Basic_PatternAndSizes(sf, viewer)); in PetscSFView_Basic()
352 PETSC_INTERN PetscErrorCode PetscSFBcastBegin_Basic(PetscSF sf, MPI_Datatype unit, PetscMemType roo… in PetscSFBcastBegin_Basic() argument
358 …PetscCall(PetscSFLinkCreate(sf, unit, rootmtype, rootdata, leafmtype, leafdata, op, PETSCSF_BCAST,… in PetscSFBcastBegin_Basic()
360 PetscCall(PetscSFLinkPackRootData(sf, link, PETSCSF_REMOTE, rootdata)); in PetscSFBcastBegin_Basic()
362 PetscCall(PetscSFLinkStartCommunication(sf, link, PETSCSF_ROOT2LEAF)); in PetscSFBcastBegin_Basic()
364 PetscCall(PetscSFLinkScatterLocal(sf, link, PETSCSF_ROOT2LEAF, (void *)rootdata, leafdata, op)); in PetscSFBcastBegin_Basic()
368 PETSC_INTERN PetscErrorCode PetscSFBcastEnd_Basic(PetscSF sf, MPI_Datatype unit, const void *rootda… in PetscSFBcastEnd_Basic() argument
374 PetscCall(PetscSFLinkGetInUse(sf, unit, rootdata, leafdata, PETSC_OWN_POINTER, &link)); in PetscSFBcastEnd_Basic()
376 PetscCall(PetscSFLinkFinishCommunication(sf, link, PETSCSF_ROOT2LEAF)); in PetscSFBcastEnd_Basic()
378 PetscCall(PetscSFLinkUnpackLeafData(sf, link, PETSCSF_REMOTE, leafdata, op)); in PetscSFBcastEnd_Basic()
380 PetscCall(PetscSFLinkReclaim(sf, &link)); in PetscSFBcastEnd_Basic()
385 static inline PetscErrorCode PetscSFLeafToRootBegin_Basic(PetscSF sf, MPI_Datatype unit, PetscMemTy… in PetscSFLeafToRootBegin_Basic() argument
390 PetscCall(PetscSFLinkCreate(sf, unit, rootmtype, rootdata, leafmtype, leafdata, op, sfop, &link)); in PetscSFLeafToRootBegin_Basic()
391 PetscCall(PetscSFLinkPackLeafData(sf, link, PETSCSF_REMOTE, leafdata)); in PetscSFLeafToRootBegin_Basic()
392 PetscCall(PetscSFLinkStartCommunication(sf, link, PETSCSF_LEAF2ROOT)); in PetscSFLeafToRootBegin_Basic()
398 PETSC_INTERN PetscErrorCode PetscSFReduceBegin_Basic(PetscSF sf, MPI_Datatype unit, PetscMemType le… in PetscSFReduceBegin_Basic() argument
403 …PetscCall(PetscSFLeafToRootBegin_Basic(sf, unit, leafmtype, leafdata, rootmtype, rootdata, op, PET… in PetscSFReduceBegin_Basic()
404 PetscCall(PetscSFLinkScatterLocal(sf, link, PETSCSF_LEAF2ROOT, rootdata, (void *)leafdata, op)); in PetscSFReduceBegin_Basic()
408 PETSC_INTERN PetscErrorCode PetscSFReduceEnd_Basic(PetscSF sf, MPI_Datatype unit, const void *leafd… in PetscSFReduceEnd_Basic() argument
413 PetscCall(PetscSFLinkGetInUse(sf, unit, rootdata, leafdata, PETSC_OWN_POINTER, &link)); in PetscSFReduceEnd_Basic()
414 PetscCall(PetscSFLinkFinishCommunication(sf, link, PETSCSF_LEAF2ROOT)); in PetscSFReduceEnd_Basic()
415 PetscCall(PetscSFLinkUnpackRootData(sf, link, PETSCSF_REMOTE, rootdata, op)); in PetscSFReduceEnd_Basic()
416 PetscCall(PetscSFLinkReclaim(sf, &link)); in PetscSFReduceEnd_Basic()
420 PETSC_INTERN PetscErrorCode PetscSFFetchAndOpBegin_Basic(PetscSF sf, MPI_Datatype unit, PetscMemTyp… in PetscSFFetchAndOpBegin_Basic() argument
425 …PetscCall(PetscSFLeafToRootBegin_Basic(sf, unit, leafmtype, leafdata, rootmtype, rootdata, op, PET… in PetscSFFetchAndOpBegin_Basic()
426 PetscCall(PetscSFLinkFetchAndOpLocal(sf, link, rootdata, leafdata, leafupdate, op)); in PetscSFFetchAndOpBegin_Basic()
430 PETSC_INTERN PetscErrorCode PetscSFFetchAndOpEnd_Basic(PetscSF sf, MPI_Datatype unit, void *rootdat… in PetscSFFetchAndOpEnd_Basic() argument
435 PetscCall(PetscSFLinkGetInUse(sf, unit, rootdata, leafdata, PETSC_OWN_POINTER, &link)); in PetscSFFetchAndOpEnd_Basic()
437 PetscCall(PetscSFLinkFinishCommunication(sf, link, PETSCSF_LEAF2ROOT)); in PetscSFFetchAndOpEnd_Basic()
439 PetscCall(PetscSFLinkFetchAndOpRemote(sf, link, rootdata, op)); in PetscSFFetchAndOpEnd_Basic()
441 PetscCall(PetscSFLinkStartCommunication(sf, link, PETSCSF_ROOT2LEAF)); in PetscSFFetchAndOpEnd_Basic()
442 PetscCall(PetscSFLinkFinishCommunication(sf, link, PETSCSF_ROOT2LEAF)); in PetscSFFetchAndOpEnd_Basic()
444 PetscCall(PetscSFLinkUnpackLeafData(sf, link, PETSCSF_REMOTE, leafupdate, MPI_REPLACE)); in PetscSFFetchAndOpEnd_Basic()
445 PetscCall(PetscSFLinkReclaim(sf, &link)); in PetscSFFetchAndOpEnd_Basic()
449 PETSC_INTERN PetscErrorCode PetscSFGetLeafRanks_Basic(PetscSF sf, PetscMPIInt *niranks, const Petsc… in PetscSFGetLeafRanks_Basic() argument
451 PetscSF_Basic *bas = (PetscSF_Basic *)sf->data; in PetscSFGetLeafRanks_Basic()
465 PETSC_INTERN PetscErrorCode PetscSFCreateEmbeddedRootSF_Basic(PetscSF sf, PetscInt nselected, const… in PetscSFCreateEmbeddedRootSF_Basic() argument
479 PetscCall(PetscSFCreate(PetscObjectComm((PetscObject)sf), &esf)); in PetscSFCreateEmbeddedRootSF_Basic()
484 PetscCall(PetscSFGetGraph(sf, &nroots, NULL, NULL, NULL)); in PetscSFCreateEmbeddedRootSF_Basic()
485 PetscCall(PetscSFGetLeafRange(sf, &minleaf, &maxleaf)); in PetscSFCreateEmbeddedRootSF_Basic()
492 PetscCall(PetscSFBcastBegin(sf, MPI_CHAR, rootdata, leafdata, MPI_REPLACE)); in PetscSFCreateEmbeddedRootSF_Basic()
493 PetscCall(PetscSFBcastEnd(sf, MPI_CHAR, rootdata, leafdata, MPI_REPLACE)); in PetscSFCreateEmbeddedRootSF_Basic()
494 …PetscCall(PetscSFGetLeafInfo_Basic(sf, &nranks, &ndranks, &ranks, &roffset, &rmine, &rremote)); /*… in PetscSFCreateEmbeddedRootSF_Basic()
548 …PetscCall(PetscSFGetRootInfo_Basic(sf, &niranks, &ndiranks, &iranks, &ioffset, &irootloc)); /* Get… in PetscSFCreateEmbeddedRootSF_Basic()
607 PETSC_EXTERN PetscErrorCode PetscSFCreate_Basic(PetscSF sf) in PetscSFCreate_Basic() argument
612 sf->ops->SetUp = PetscSFSetUp_Basic; in PetscSFCreate_Basic()
613 sf->ops->Reset = PetscSFReset_Basic; in PetscSFCreate_Basic()
614 sf->ops->Destroy = PetscSFDestroy_Basic; in PetscSFCreate_Basic()
615 sf->ops->View = PetscSFView_Basic; in PetscSFCreate_Basic()
616 sf->ops->BcastBegin = PetscSFBcastBegin_Basic; in PetscSFCreate_Basic()
617 sf->ops->BcastEnd = PetscSFBcastEnd_Basic; in PetscSFCreate_Basic()
618 sf->ops->ReduceBegin = PetscSFReduceBegin_Basic; in PetscSFCreate_Basic()
619 sf->ops->ReduceEnd = PetscSFReduceEnd_Basic; in PetscSFCreate_Basic()
620 sf->ops->FetchAndOpBegin = PetscSFFetchAndOpBegin_Basic; in PetscSFCreate_Basic()
621 sf->ops->FetchAndOpEnd = PetscSFFetchAndOpEnd_Basic; in PetscSFCreate_Basic()
622 sf->ops->GetLeafRanks = PetscSFGetLeafRanks_Basic; in PetscSFCreate_Basic()
623 sf->ops->CreateEmbeddedRootSF = PetscSFCreateEmbeddedRootSF_Basic; in PetscSFCreate_Basic()
624 sf->ops->SetCommunicationOps = PetscSFSetCommunicationOps_Basic; in PetscSFCreate_Basic()
626 sf->persistent = PETSC_TRUE; // currently SFBASIC always uses persistent send/recv in PetscSFCreate_Basic()
627 sf->collective = PETSC_FALSE; in PetscSFCreate_Basic()
630 sf->data = (void *)dat; in PetscSFCreate_Basic()