if (!strcmp(process_name, "p0")) {
XBT_DEBUG("%s: %s is the Root", reduce_identifier, process_name);
- xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
+ msg_comm_t *comms = xbt_new0(msg_comm_t, communicator_size - 1);
msg_task_t *tasks = xbt_new0(msg_task_t, communicator_size - 1);
for (i = 1; i < communicator_size; i++) {
sprintf(mailbox, "%s_p%d_p0", reduce_identifier, i);
- xbt_dynar_push_as(comms, msg_comm_t,
- MSG_task_irecv(&(tasks[i - 1]), mailbox));
+ comms[i - 1] = MSG_task_irecv(&(tasks[i - 1]), mailbox);
}
- MSG_comm_waitall(comms, -1);
-
- msg_comm_t comm;
- unsigned int cursor;
- xbt_dynar_foreach(comms, cursor, comm) {
- MSG_comm_destroy(comm);
- MSG_task_destroy(tasks[i]);
+ MSG_comm_waitall(comms, communicator_size - 1, -1);
+ for (i = 1; i < communicator_size; i++) {
+ MSG_comm_destroy(comms[i - 1]);
+ MSG_task_destroy(tasks[i - 1]);
}
free(tasks);
- xbt_dynar_free(&comms);
comp_task = MSG_task_create("reduce_comp", comp_size, 0, NULL);
XBT_DEBUG("%s: computing 'reduce_comp'", reduce_identifier);
if (!strcmp(process_name, "p0")) {
XBT_DEBUG("%s: %s is the Root", bcast_identifier, process_name);
- xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
-
+ msg_comm_t *comms = xbt_new0(msg_comm_t, communicator_size - 1);
for (i = 1; i < communicator_size; i++) {
sprintf(mailbox, "%s_p0_p%d", bcast_identifier, i);
- xbt_dynar_push_as(comms, msg_comm_t,
- MSG_task_isend(MSG_task_create
- (mailbox, 0, comm_size, NULL), mailbox));
- }
- MSG_comm_waitall(comms, -1);
-
- msg_comm_t comm;
- unsigned int cursor;
- xbt_dynar_foreach(comms, cursor, comm) {
- MSG_comm_destroy(comm);
+ comms[i - 1] =
+ MSG_task_isend(MSG_task_create(mailbox, 0, comm_size, NULL), mailbox);
}
- xbt_dynar_free(&comms);
-
+ MSG_comm_waitall(comms, communicator_size - 1, -1);
+ for (i = 1; i < communicator_size; i++)
+ MSG_comm_destroy(comms[i - 1]);
+ free(comms);
XBT_DEBUG("%s: all messages sent by %s have been received",
bcast_identifier, process_name);
if (!strcmp(process_name, "p0")) {
XBT_DEBUG("%s: %s is the Root", allreduce_identifier, process_name);
- xbt_dynar_t comms = xbt_dynar_new(sizeof(msg_comm_t), NULL);
+ msg_comm_t *comms = xbt_new0(msg_comm_t, communicator_size - 1);
msg_task_t *tasks = xbt_new0(msg_task_t, communicator_size - 1);
for (i = 1; i < communicator_size; i++) {
sprintf(mailbox, "%s_p%d_p0", allreduce_identifier, i);
- xbt_dynar_push_as(comms, msg_comm_t,
- MSG_task_irecv(&(tasks[i - 1]), mailbox));
+ comms[i - 1] = MSG_task_irecv(&(tasks[i - 1]), mailbox);
}
- MSG_comm_waitall(comms, -1);
-
- msg_comm_t comm;
- unsigned int cursor;
- xbt_dynar_foreach(comms, cursor, comm) {
- MSG_comm_destroy(comm);
- MSG_task_destroy(tasks[i]);
+ MSG_comm_waitall(comms, communicator_size - 1, -1);
+ for (i = 1; i < communicator_size; i++) {
+ MSG_comm_destroy(comms[i - 1]);
+ MSG_task_destroy(tasks[i - 1]);
}
free(tasks);
MSG_task_destroy(comp_task);
XBT_DEBUG("%s: computed", allreduce_identifier);
- xbt_dynar_reset(comms);
for (i = 1; i < communicator_size; i++) {
sprintf(mailbox, "%s_p0_p%d", allreduce_identifier, i);
- xbt_dynar_push_as(comms, msg_comm_t,
- MSG_task_isend(MSG_task_create
- (mailbox, 0, comm_size, NULL), mailbox));
- }
- MSG_comm_waitall(comms, -1);
- xbt_dynar_foreach(comms, cursor, comm) {
- MSG_comm_destroy(comm);
+ comms[i - 1] =
+ MSG_task_isend(MSG_task_create(mailbox, 0, comm_size, NULL), mailbox);
}
- xbt_dynar_free(&comms);
+ MSG_comm_waitall(comms, communicator_size - 1, -1);
+ for (i = 1; i < communicator_size; i++)
+ MSG_comm_destroy(comms[i - 1]);
+ free(comms);
XBT_DEBUG("%s: all messages sent by %s have been received",
allreduce_identifier, process_name);