Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
6c41685422633ddb9b2d301718d5b8f69c7914c7
[simgrid.git] / src / smpi / colls / allgatherv / allgatherv-GB.cpp
1 /* Copyright (c) 2013-2014. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #include "../colls_private.h"
8
9 namespace simgrid{
10 namespace smpi{
11
12 // Allgather - gather/bcast algorithm
13 int Coll_allgatherv_GB::allgatherv(void *send_buff, int send_count,
14                                  MPI_Datatype send_type, void *recv_buff,
15                                  int *recv_counts, int *recv_disps, MPI_Datatype recv_type,
16                                  MPI_Comm comm)
17 {
18   Colls::gatherv(send_buff, send_count, send_type, recv_buff, recv_counts,
19                    recv_disps, recv_type, 0, comm);
20   int num_procs, i, current, max = 0;
21   num_procs = comm->size();
22   for (i = 0; i < num_procs; i++) {
23     current = recv_disps[i] + recv_counts[i];
24     if (current > max)
25       max = current;
26   }
27   Colls::bcast(recv_buff, max, recv_type, 0, comm);
28
29   return MPI_SUCCESS;
30 }
31
32 }
33 }