Lines Matching +full:- +full:d
6 This is a doubly-connected edge list which enumerates the
12 proc ---------> proc
13 0 <-------- 1
33 |--------|-----------------|--|
44 Phase D: Send data
63 +Phase D
87 DMSwarmDataEx d; in DMSwarmDataExCreate() local
90 PetscCall(PetscNew(&d)); in DMSwarmDataExCreate()
91 PetscCallMPI(MPI_Comm_dup(comm, &d->comm)); in DMSwarmDataExCreate()
92 PetscCallMPI(MPI_Comm_rank(d->comm, &d->rank)); in DMSwarmDataExCreate()
94 d->instance = count; in DMSwarmDataExCreate()
96 d->topology_status = DEOBJECT_STATE_UNKNOWN; in DMSwarmDataExCreate()
97 d->message_lengths_status = DEOBJECT_STATE_UNKNOWN; in DMSwarmDataExCreate()
98 d->packer_status = DEOBJECT_STATE_UNKNOWN; in DMSwarmDataExCreate()
99 d->communication_status = DEOBJECT_STATE_UNKNOWN; in DMSwarmDataExCreate()
101 d->n_neighbour_procs = -1; in DMSwarmDataExCreate()
102 d->neighbour_procs = NULL; in DMSwarmDataExCreate()
104 d->messages_to_be_sent = NULL; in DMSwarmDataExCreate()
105 d->message_offsets = NULL; in DMSwarmDataExCreate()
106 d->messages_to_be_recvieved = NULL; in DMSwarmDataExCreate()
108 d->unit_message_size = (size_t)-1; in DMSwarmDataExCreate()
109 d->send_message = NULL; in DMSwarmDataExCreate()
110 d->send_message_length = -1; in DMSwarmDataExCreate()
111 d->recv_message = NULL; in DMSwarmDataExCreate()
112 d->recv_message_length = -1; in DMSwarmDataExCreate()
113 d->total_pack_cnt = -1; in DMSwarmDataExCreate()
114 d->pack_cnt = NULL; in DMSwarmDataExCreate()
116 d->send_tags = NULL; in DMSwarmDataExCreate()
117 d->recv_tags = NULL; in DMSwarmDataExCreate()
119 d->_stats = NULL; in DMSwarmDataExCreate()
120 d->_requests = NULL; in DMSwarmDataExCreate()
121 *ex = d; in DMSwarmDataExCreate()
131 PetscErrorCode DMSwarmDataExView(DMSwarmDataEx d) in DMSwarmDataExView() argument
136 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, "DMSwarmDataEx: instance=%" PetscInt_FMT "\n", d->instance… in DMSwarmDataExView()
137 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, " topology status: %s \n", status_names[d->topolog… in DMSwarmDataExView()
138 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, " message lengths status: %s \n", status_names[d->message… in DMSwarmDataExView()
139 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, " packer status status: %s \n", status_names[d->packer_… in DMSwarmDataExView()
140 …PetscCall(PetscPrintf(PETSC_COMM_WORLD, " communication status: %s \n", status_names[d->communi… in DMSwarmDataExView()
142 if (d->topology_status == DEOBJECT_FINALIZED) { in DMSwarmDataExView()
144 …PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, " [%d] neighbours: %d \n", d->rank, d->n_ne… in DMSwarmDataExView()
145 …(p = 0; p < d->n_neighbour_procs; p++) PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, " [%… in DMSwarmDataExView()
149 if (d->message_lengths_status == DEOBJECT_FINALIZED) { in DMSwarmDataExView()
151 …all(PetscSynchronizedPrintf(PETSC_COMM_WORLD, " [%d] atomic size: %ld \n", d->rank, (long int)d… in DMSwarmDataExView()
152 …d->n_neighbour_procs; p++) PetscCall(PetscSynchronizedPrintf(PETSC_COMM_WORLD, " [%d] >>>>> ( %… in DMSwarmDataExView()
153 for (p = 0; p < d->n_neighbour_procs; p++) { in DMSwarmDataExView()
154 …WORLD, " [%d] <<<<< ( %" PetscInt_FMT " units :: tag = %d) <<<<< [%d] \n", d->rank, d->messages… in DMSwarmDataExView()
161 PetscErrorCode DMSwarmDataExDestroy(DMSwarmDataEx d) in DMSwarmDataExDestroy() argument
164 PetscCallMPI(MPI_Comm_free(&d->comm)); in DMSwarmDataExDestroy()
165 if (d->neighbour_procs) PetscCall(PetscFree(d->neighbour_procs)); in DMSwarmDataExDestroy()
166 if (d->messages_to_be_sent) PetscCall(PetscFree(d->messages_to_be_sent)); in DMSwarmDataExDestroy()
167 if (d->message_offsets) PetscCall(PetscFree(d->message_offsets)); in DMSwarmDataExDestroy()
168 if (d->messages_to_be_recvieved) PetscCall(PetscFree(d->messages_to_be_recvieved)); in DMSwarmDataExDestroy()
169 if (d->send_message) PetscCall(PetscFree(d->send_message)); in DMSwarmDataExDestroy()
170 if (d->recv_message) PetscCall(PetscFree(d->recv_message)); in DMSwarmDataExDestroy()
171 if (d->pack_cnt) PetscCall(PetscFree(d->pack_cnt)); in DMSwarmDataExDestroy()
172 if (d->send_tags) PetscCall(PetscFree(d->send_tags)); in DMSwarmDataExDestroy()
173 if (d->recv_tags) PetscCall(PetscFree(d->recv_tags)); in DMSwarmDataExDestroy()
174 if (d->_stats) PetscCall(PetscFree(d->_stats)); in DMSwarmDataExDestroy()
175 if (d->_requests) PetscCall(PetscFree(d->_requests)); in DMSwarmDataExDestroy()
176 PetscCall(PetscFree(d)); in DMSwarmDataExDestroy()
182 PetscErrorCode DMSwarmDataExTopologyInitialize(DMSwarmDataEx d) in DMSwarmDataExTopologyInitialize() argument
185 d->topology_status = DEOBJECT_INITIALIZED; in DMSwarmDataExTopologyInitialize()
186 d->n_neighbour_procs = 0; in DMSwarmDataExTopologyInitialize()
187 PetscCall(PetscFree(d->neighbour_procs)); in DMSwarmDataExTopologyInitialize()
188 PetscCall(PetscFree(d->messages_to_be_sent)); in DMSwarmDataExTopologyInitialize()
189 PetscCall(PetscFree(d->message_offsets)); in DMSwarmDataExTopologyInitialize()
190 PetscCall(PetscFree(d->messages_to_be_recvieved)); in DMSwarmDataExTopologyInitialize()
191 PetscCall(PetscFree(d->pack_cnt)); in DMSwarmDataExTopologyInitialize()
192 PetscCall(PetscFree(d->send_tags)); in DMSwarmDataExTopologyInitialize()
193 PetscCall(PetscFree(d->recv_tags)); in DMSwarmDataExTopologyInitialize()
197 PetscErrorCode DMSwarmDataExTopologyAddNeighbour(DMSwarmDataEx d, const PetscMPIInt proc_id) in DMSwarmDataExTopologyAddNeighbour() argument
203 …PetscCheck(d->topology_status != DEOBJECT_FINALIZED, d->comm, PETSC_ERR_ARG_WRONGSTATE, "Topology … in DMSwarmDataExTopologyAddNeighbour()
204 …PetscCheck(d->topology_status == DEOBJECT_INITIALIZED, d->comm, PETSC_ERR_ARG_WRONGSTATE, "Topolog… in DMSwarmDataExTopologyAddNeighbour()
209 PetscCallMPI(MPI_Comm_size(d->comm, &size)); in DMSwarmDataExTopologyAddNeighbour()
210 …_SELF, PETSC_ERR_ARG_WRONGSTATE, "Trying to set proc neighbour %d with a rank >= size %d", proc_id… in DMSwarmDataExTopologyAddNeighbour()
211 if (d->n_neighbour_procs == 0) PetscCall(PetscMalloc1(1, &d->neighbour_procs)); in DMSwarmDataExTopologyAddNeighbour()
214 for (n = 0; n < d->n_neighbour_procs; n++) { in DMSwarmDataExTopologyAddNeighbour()
215 if (d->neighbour_procs[n] == proc_id) found = 1; in DMSwarmDataExTopologyAddNeighbour()
218 PetscCall(PetscRealloc(sizeof(PetscMPIInt) * (d->n_neighbour_procs + 1), &d->neighbour_procs)); in DMSwarmDataExTopologyAddNeighbour()
219 d->neighbour_procs[d->n_neighbour_procs] = proc_id; in DMSwarmDataExTopologyAddNeighbour()
220 d->n_neighbour_procs++; in DMSwarmDataExTopologyAddNeighbour()
331 PetscErrorCode DMSwarmDataExTopologyFinalize(DMSwarmDataEx d) in DMSwarmDataExTopologyFinalize() argument
336 …PetscCheck(d->topology_status == DEOBJECT_INITIALIZED, d->comm, PETSC_ERR_ARG_WRONGSTATE, "Topolog… in DMSwarmDataExTopologyFinalize()
340 …PetscCall(DMSwarmDataExCompleteCommunicationMap_Private(d->comm, d->n_neighbour_procs, d->neighbou… in DMSwarmDataExTopologyFinalize()
342 PetscCall(PetscFree(d->neighbour_procs)); in DMSwarmDataExTopologyFinalize()
343 d->n_neighbour_procs = symm_nn; in DMSwarmDataExTopologyFinalize()
344 d->neighbour_procs = symm_procs; in DMSwarmDataExTopologyFinalize()
346 …if (!d->messages_to_be_sent) PetscCall(PetscMalloc1(d->n_neighbour_procs + 1, &d->messages_to_be_s… in DMSwarmDataExTopologyFinalize()
347 if (!d->message_offsets) PetscCall(PetscMalloc1(d->n_neighbour_procs + 1, &d->message_offsets)); in DMSwarmDataExTopologyFinalize()
348 …if (!d->messages_to_be_recvieved) PetscCall(PetscMalloc1(d->n_neighbour_procs + 1, &d->messages_to… in DMSwarmDataExTopologyFinalize()
349 if (!d->pack_cnt) PetscCall(PetscMalloc(sizeof(PetscInt) * d->n_neighbour_procs, &d->pack_cnt)); in DMSwarmDataExTopologyFinalize()
350 if (!d->_stats) PetscCall(PetscMalloc(sizeof(MPI_Status) * 2 * d->n_neighbour_procs, &d->_stats)); in DMSwarmDataExTopologyFinalize()
351 …if (!d->_requests) PetscCall(PetscMalloc(sizeof(MPI_Request) * 2 * d->n_neighbour_procs, &d->_requ… in DMSwarmDataExTopologyFinalize()
352 if (!d->send_tags) PetscCall(PetscMalloc(sizeof(int) * d->n_neighbour_procs, &d->send_tags)); in DMSwarmDataExTopologyFinalize()
353 if (!d->recv_tags) PetscCall(PetscMalloc(sizeof(int) * d->n_neighbour_procs, &d->recv_tags)); in DMSwarmDataExTopologyFinalize()
355 PetscCallMPI(MPI_Comm_size(d->comm, &size)); in DMSwarmDataExTopologyFinalize()
357 …PetscCheck(iflg, d->comm, PETSC_ERR_LIB, "MPI error: MPI_Comm_get_attr() is not returning a MPI_TA… in DMSwarmDataExTopologyFinalize()
358 r0 = d->rank; in DMSwarmDataExTopologyFinalize()
359 for (n = 0; n < d->n_neighbour_procs; ++n) { in DMSwarmDataExTopologyFinalize()
360 PetscMPIInt r1 = d->neighbour_procs[n]; in DMSwarmDataExTopologyFinalize()
362 _get_tags(d->instance, size, r0, r1, *maxtag, &st, &rt); in DMSwarmDataExTopologyFinalize()
363 d->send_tags[n] = st; in DMSwarmDataExTopologyFinalize()
364 d->recv_tags[n] = rt; in DMSwarmDataExTopologyFinalize()
366 d->topology_status = DEOBJECT_FINALIZED; in DMSwarmDataExTopologyFinalize()
377 np = de->n_neighbour_procs; in _DMSwarmDataExConvertProcIdToLocalIndex()
378 *local = -1; in _DMSwarmDataExConvertProcIdToLocalIndex()
380 if (proc_id == de->neighbour_procs[i]) { in _DMSwarmDataExConvertProcIdToLocalIndex()
393 …PetscCheck(de->topology_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Topology not fin… in DMSwarmDataExInitializeSendCount()
395 de->message_lengths_status = DEOBJECT_INITIALIZED; in DMSwarmDataExInitializeSendCount()
396 for (i = 0; i < de->n_neighbour_procs; ++i) de->messages_to_be_sent[i] = 0; in DMSwarmDataExInitializeSendCount()
408 …PetscCheck(de->message_lengths_status != DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Message l… in DMSwarmDataExAddToSendCount()
409 …PetscCheck(de->message_lengths_status == DEOBJECT_INITIALIZED, de->comm, PETSC_ERR_ORDER, "Message… in DMSwarmDataExAddToSendCount()
412 …PetscCheck(local_val != -1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Proc %d is not a valid neighbou… in DMSwarmDataExAddToSendCount()
414 de->messages_to_be_sent[local_val] = de->messages_to_be_sent[local_val] + count; in DMSwarmDataExAddToSendCount()
421 …PetscCheck(de->message_lengths_status == DEOBJECT_INITIALIZED, de->comm, PETSC_ERR_ORDER, "Message… in DMSwarmDataExFinalizeSendCount()
423 de->message_lengths_status = DEOBJECT_FINALIZED; in DMSwarmDataExFinalizeSendCount()
441 np = de->n_neighbour_procs; in _DMSwarmDataExInitializeTmpStorage()
443 /* de->messages_to_be_sent[i] = -1; */ in _DMSwarmDataExInitializeTmpStorage()
444 de->messages_to_be_recvieved[i] = -1; in _DMSwarmDataExInitializeTmpStorage()
446 PetscCall(PetscFree(de->send_message)); in _DMSwarmDataExInitializeTmpStorage()
447 PetscCall(PetscFree(de->recv_message)); in _DMSwarmDataExInitializeTmpStorage()
463 …PetscCheck(de->topology_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Topology not fin… in DMSwarmDataExPackInitialize()
464 …PetscCheck(de->message_lengths_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Message l… in DMSwarmDataExPackInitialize()
466 de->packer_status = DEOBJECT_INITIALIZED; in DMSwarmDataExPackInitialize()
468 np = de->n_neighbour_procs; in DMSwarmDataExPackInitialize()
469 de->unit_message_size = unit_message_size; in DMSwarmDataExPackInitialize()
472 if (de->messages_to_be_sent[i] == -1) { in DMSwarmDataExPackInitialize()
473 PetscMPIInt proc_neighour = de->neighbour_procs[i]; in DMSwarmDataExPackInitialize()
474 …SETERRQ(PETSC_COMM_SELF, PETSC_ERR_ORDER, "Messages_to_be_sent[neighbour_proc=%d] is un-initialise… in DMSwarmDataExPackInitialize()
476 total = total + de->messages_to_be_sent[i]; in DMSwarmDataExPackInitialize()
479 PetscCall(PetscMalloc(unit_message_size * (total + 1), &de->send_message)); in DMSwarmDataExPackInitialize()
481 PetscCall(PetscMemzero(de->send_message, unit_message_size * (total + 1))); in DMSwarmDataExPackInitialize()
483 de->send_message_length = total; in DMSwarmDataExPackInitialize()
484 de->message_offsets[0] = 0; in DMSwarmDataExPackInitialize()
485 total = de->messages_to_be_sent[0]; in DMSwarmDataExPackInitialize()
487 de->message_offsets[i] = total; in DMSwarmDataExPackInitialize()
488 total = total + de->messages_to_be_sent[i]; in DMSwarmDataExPackInitialize()
491 de->total_pack_cnt = 0; in DMSwarmDataExPackInitialize()
492 for (i = 0; i < np; ++i) de->pack_cnt[i] = 0; in DMSwarmDataExPackInitialize()
506 …PetscCheck(de->packer_status != DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Packed data have b… in DMSwarmDataExPackData()
507 …PetscCheck(de->packer_status == DEOBJECT_INITIALIZED, de->comm, PETSC_ERR_ORDER, "Packed data must… in DMSwarmDataExPackData()
509 …PetscCheck(de->send_message, de->comm, PETSC_ERR_ORDER, "send_message is not initialized. Call DMS… in DMSwarmDataExPackData()
511 …PetscCheck(local != -1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "proc_id %d is not registered neighb… in DMSwarmDataExPackData()
512 …->pack_cnt[local] <= de->messages_to_be_sent[local], PETSC_COMM_SELF, PETSC_ERR_ARG_WRONG, "Trying… in DMSwarmDataExPackData()
515 insert_location = de->message_offsets[local] + de->pack_cnt[local]; in DMSwarmDataExPackData()
516 dest = ((char *)de->send_message) + de->unit_message_size * insert_location; in DMSwarmDataExPackData()
517 PetscCall(PetscMemcpy(dest, data, de->unit_message_size * n)); in DMSwarmDataExPackData()
519 de->pack_cnt[local] = de->pack_cnt[local] + n; in DMSwarmDataExPackData()
532 …PetscCheck(de->packer_status == DEOBJECT_INITIALIZED, de->comm, PETSC_ERR_ORDER, "Packer has not b… in DMSwarmDataExPackFinalize()
533 np = de->n_neighbour_procs; in DMSwarmDataExPackFinalize()
535 …->pack_cnt[i] == de->messages_to_be_sent[i], PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Not all m… in DMSwarmDataExPackFinalize()
538 for (i = 0; i < np; ++i) de->messages_to_be_recvieved[i] = -1; in DMSwarmDataExPackFinalize()
540 …) PetscCallMPI(MPIU_Isend(&de->messages_to_be_sent[i], 1, MPIU_INT, de->neighbour_procs[i], de->se… in DMSwarmDataExPackFinalize()
541 …etscCallMPI(MPIU_Irecv(&de->messages_to_be_recvieved[i], 1, MPIU_INT, de->neighbour_procs[i], de->… in DMSwarmDataExPackFinalize()
542 PetscCallMPI(MPI_Waitall(2 * np, de->_requests, de->_stats)); in DMSwarmDataExPackFinalize()
545 for (i = 0; i < np; ++i) total = total + de->messages_to_be_recvieved[i]; in DMSwarmDataExPackFinalize()
546 PetscCall(PetscMalloc(de->unit_message_size * (total + 1), &de->recv_message)); in DMSwarmDataExPackFinalize()
548 PetscCall(PetscMemzero(de->recv_message, de->unit_message_size * (total + 1))); in DMSwarmDataExPackFinalize()
550 de->recv_message_length = total; in DMSwarmDataExPackFinalize()
551 de->packer_status = DEOBJECT_FINALIZED; in DMSwarmDataExPackFinalize()
552 de->communication_status = DEOBJECT_INITIALIZED; in DMSwarmDataExPackFinalize()
564 …PetscCheck(de->topology_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Topology not fin… in DMSwarmDataExBegin()
565 …PetscCheck(de->message_lengths_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Message l… in DMSwarmDataExBegin()
566 …PetscCheck(de->packer_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Packer not finaliz… in DMSwarmDataExBegin()
567 …PetscCheck(de->communication_status != DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ORDER, "Communicati… in DMSwarmDataExBegin()
568 …PetscCheck(de->recv_message, de->comm, PETSC_ERR_ORDER, "recv_message has not been initialized. Mu… in DMSwarmDataExBegin()
570 np = de->n_neighbour_procs; in DMSwarmDataExBegin()
573 dest = ((char *)de->send_message) + de->unit_message_size * de->message_offsets[i]; in DMSwarmDataExBegin()
574 …PIU_Isend(dest, de->messages_to_be_sent[i] * de->unit_message_size, MPI_CHAR, de->neighbour_procs[… in DMSwarmDataExBegin()
589 …PetscCheck(de->communication_status == DEOBJECT_INITIALIZED, de->comm, PETSC_ERR_ORDER, "Communica… in DMSwarmDataExEnd()
590 …PetscCheck(de->recv_message, de->comm, PETSC_ERR_ORDER, "recv_message has not been initialized. Mu… in DMSwarmDataExEnd()
592 np = de->n_neighbour_procs; in DMSwarmDataExEnd()
595 total = de->messages_to_be_recvieved[0]; in DMSwarmDataExEnd()
598 total = total + de->messages_to_be_recvieved[i]; in DMSwarmDataExEnd()
602 dest = ((char *)de->recv_message) + de->unit_message_size * message_recv_offsets[i]; in DMSwarmDataExEnd()
603 …U_Irecv(dest, de->messages_to_be_recvieved[i] * de->unit_message_size, MPI_CHAR, de->neighbour_pro… in DMSwarmDataExEnd()
605 PetscCallMPI(MPI_Waitall(2 * np, de->_requests, de->_stats)); in DMSwarmDataExEnd()
607 de->communication_status = DEOBJECT_FINALIZED; in DMSwarmDataExEnd()
615 …PetscCheck(de->packer_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ARG_WRONGSTATE, "Data has … in DMSwarmDataExGetSendData()
616 *length = de->send_message_length; in DMSwarmDataExGetSendData()
617 *send = de->send_message; in DMSwarmDataExGetSendData()
624 …PetscCheck(de->communication_status == DEOBJECT_FINALIZED, de->comm, PETSC_ERR_ARG_WRONGSTATE, "Da… in DMSwarmDataExGetRecvData()
625 *length = de->recv_message_length; in DMSwarmDataExGetRecvData()
626 *recv = de->recv_message; in DMSwarmDataExGetRecvData()
633 if (n) *n = de->n_neighbour_procs; in DMSwarmDataExTopologyGetNeighbours()
634 if (neigh) *neigh = de->neighbour_procs; in DMSwarmDataExTopologyGetNeighbours()