When you call mpi_bcast all the processors should be called....in you code
you are calling mpi_bcast in all the roots expect root. Try keeping
mpi_bcast out of if condition.

_
*SAVE WATER **  ~  **SAVE ENERGY**~ **~ **SAVE EARTH *[image:
Earth-22-june.gif (7996 bytes)]

http://sites.google.com/site/kolukulasivasrinivas/

Siva Srinivas Kolukula, PhD
*Scientist - B*
Indian Tsunami Early Warning Centre (ITEWC)
Advisory Services and Satellite Oceanography Group (ASG)
Indian National Centre for Ocean Information Services (INCOIS)
"Ocean Valley"
Pragathi Nagar (B.O)
Nizampet (S.O)
Hyderabad - 500 090
Telangana, INDIA

Office: 040 23886124


*Cell: +91 9381403232; +91 8977801947*

On Wed, May 24, 2017 at 4:42 PM, Pranav Sumanth <pranav.d.suma...@gmail.com>
wrote:

> Greetings!
>
> I include a static header file utils.h with a function linspace. My
> main.cpp file is as follows:
>
> #include <iostream>#include <utils.h>#include <mpi.h>
> using namespace std;
> int main(int argc, const char * argv[]) {
>
>     float start = 0., end = 1.;
>     unsigned long int num = 100;
>
>     double *linspaced;
>
>     float delta = (end - start) / num;
>     int size, rank;
>
>
>     MPI_Init(NULL, NULL);
>
>     MPI_Comm_size(MPI_COMM_WORLD, &size);
>     MPI_Comm_rank(MPI_COMM_WORLD, &rank);
>     MPI_Status status;
>
>     // These have to be converted into unsigned long ints
>     int casesPerNode = num / size;
>     int remainderCases = num % size;
>
>
>     if(rank==0){
>         linspaced =  new double[num];
>
>         if(remainderCases!=0){
>             linspace(&linspaced[(size-1)*casesPerNode], end - 
> delta*remainderCases, end, remainderCases);
>
>         } else {
>             linspace(&linspaced[(size-1)*casesPerNode], end - 
> delta*casesPerNode, end, casesPerNode);
>
>         }
>
>     } else {
>
>         MPI_Bcast(&linspaced, num, MPI_DOUBLE, 0, MPI_COMM_WORLD);
>
>
>         // Sending job to master node.
>         // The node is already overloaded with coordinating.
>         // Additional task now is also to take on remainder cases.
>
>
>         // cout << "Rank " << rank << endl;
>         float start_in = start + casesPerNode*delta*(rank-1);
>         float end_in = start + casesPerNode*delta*(rank) - delta;
>
>         linspace(&linspaced[(rank-1)*casesPerNode], start_in, end_in, 
> casesPerNode);
>
>
>     }
>
>     MPI_Barrier(MPI_COMM_WORLD);
>     // cout << "Print Here Rank " << rank << endl ;
>
>
>     MPI_Finalize();
>
>     /*
>     for(int i=0; i< num; i++){
>         cout << *(linspaced + i) << endl;
>     }
>      */
>
>     return 0;
> }
>
> and my utils.h file is:
>
> void linspace(double *ret, double start_in, double end_in, unsigned long int 
> num_in){
>     /* This function generates equally spaced elements and returns
>      an array with the results */
>
>
>     assert(num_in!=0);
>
>
>     cout <<  "\tReceived start :" << start_in << "\tEnd :" << end_in << 
> "\tNum_in :" << num_in << endl;
>
>     double delta_in = (end_in - start_in) / (num_in - 1);
>
>     if(num_in == 1){
>         *(ret) = start_in;
>     }
>
>     *(ret) = start_in;
>     for(int i=1; i < num_in-1; i++) {
>         *(ret + i) = *(ret + i - 1) + delta_in;
>     }
>     *(ret + (num_in - 1)) = end_in;
>
>     /*
>     cout << "Finished executing linspace " << endl;
>      for(int i = 0; i<num_in; i++){
>      cout << "Address : " << &ret << "\tElement " << i << " : " << *(ret + i) 
> << endl;
>      }
>      */}
>
> I am unable to diagnose why my code gets stuck at MPI_Bcast. What could I
> do to fix it?
>
> Thanks
>
> PS: I’m new to OpenMPI and may have a lot of these doubts initially.
> Thanks for patience and support.
>
> _______________________________________________
> users mailing list
> users@lists.open-mpi.org
> https://rfd.newmexicoconsortium.org/mailman/listinfo/users
>
_______________________________________________
users mailing list
users@lists.open-mpi.org
https://rfd.newmexicoconsortium.org/mailman/listinfo/users

Reply via email to