Thanks again for taking the time and effort to answer my questions. &#39;am going to order that book now.<div><br><br><div class="gmail_quote">On Fri, Dec 10, 2010 at 9:13 AM, Jayesh Krishna <span dir="ltr">&lt;<a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">Hi,<br>
 All MPI processes are OS processes not threads and each MPI process executes the same code. So creating an array in one process should not interfere with creating an array in another process.<br>
 You can broadcast the data used to populate the array to other MPI processes from the root. The other processes should still have a placeholder (an array) to store the data. Since MPI_Bcast() blocks on the communicator (as mentioned in my previous email), each MPI process blocks on the call till it receives the data.<br>

 Hope this helps.<br>
<br>
(PS: You might also want to take a look at books like <a href="http://www.mcs.anl.gov/research/projects/mpi/usingmpi/" target="_blank">http://www.mcs.anl.gov/research/projects/mpi/usingmpi/</a> to get an overview of MPI)<br>

<div class="im">Regards,<br>
Jayesh<br>
----- Original Message -----<br>
From: Prashanth &lt;<a href="mailto:prashanth.dumpuri@gmail.com">prashanth.dumpuri@gmail.com</a>&gt;<br>
To: Jayesh Krishna &lt;<a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a>&gt;<br>
Cc: <a href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</a><br>
</div><div><div></div><div class="h5">Sent: Thu, 09 Dec 2010 16:43:22 -0600 (CST)<br>
Subject: Re: [mpich-discuss] MPICH2 hangs during debug<br>
<br>
Thanks for all your help. My code works but part of it still has memory<br>
leaks. Hopefully the solution to that lies in the answer to this<br>
question(s):<br>
<br>
     Currently I let all processors create one sequential array and populate<br>
the same array. Is this thread-safe? Or should I let root node create the<br>
array and then broadcast it? If I let root node create that array, how do i<br>
ensure other nodes/processors are not going to jump and execute the<br>
statements below the array creation?<br>
<br>
Thanks again<br>
<br>
<br>
On Thu, Dec 9, 2010 at 4:30 PM, Jayesh Krishna &lt;<a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a>&gt; wrote:<br>
<br>
&gt; Hi,<br>
&gt;  Yes, you can execute non-parallel version of class 1 from the root MPI<br>
&gt; process (rank = 0) and broadcast the result to other MPI processes.<br>
&gt; Typically you divide work (computation) among MPI processes if the work is<br>
&gt; scalable and the cost of computation of the results using a single worker is<br>
&gt; greater than the (cost of computation of the divided work in a single worker<br>
&gt; + cost of communication of the result among MPI processes). If the work is<br>
&gt; significantly small you might be better off doing it in a single process.<br>
&gt;  Make sure that when you call MPI_Bcast() from all the MPI processes<br>
&gt; (Correctly speaking, all MPI processes belonging to the same communicator<br>
&gt; should call MPI_Bcast(). In your case the communicator, MPI_COMM_WORLD,<br>
&gt; consists of all the MPI processes).<br>
&gt;  From your email I am guessing that you no longer have any problems<br>
&gt; executing your MPI program with MPICH2 (Am I right ? ).<br>
&gt;<br>
&gt; Regards,<br>
&gt; Jayesh<br>
&gt; ----- Original Message -----<br>
&gt; From: Prashanth &lt;<a href="mailto:prashanth.dumpuri@gmail.com">prashanth.dumpuri@gmail.com</a>&gt;<br>
&gt; To: Jayesh Krishna &lt;<a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a>&gt;<br>
&gt; Cc: <a href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</a><br>
&gt; Sent: Thu, 09 Dec 2010 15:38:55 -0600 (CST)<br>
&gt; Subject: Re: [mpich-discuss] MPICH2 hangs during debug<br>
&gt;<br>
&gt; Jayesh,<br>
&gt;       Just playing catch up in the next 2 lines - I have 3 classes 2 of<br>
&gt; which have been parallelized using MPI and all 3 are being instantiated and<br>
&gt; executed in my main code. Since one of the classes was not parallelized i<br>
&gt; had it inside an &quot;if&quot; condition: if rank==zero then execute the<br>
&gt; non-parallel<br>
&gt; class1. I then used MPI_BCast to broadcast the results from class1 to all<br>
&gt; the processors.<br>
&gt;        Turns out this &quot;if&quot; condition caused the child processors (those<br>
&gt; with rank not equal to zero) to jump directly to the functions below the<br>
&gt; MPI_BCast command while root node was still stuck at MPI_BCast. This caused<br>
&gt; my code/debugger to hang.<br>
&gt;         It takes me less than 2seconds to execute class1 so I can get away<br>
&gt; with running class1 on all the processors but I want to learn the &quot;proper&quot;<br>
&gt; way to execute a MPI application. Any thoughts?<br>
&gt;         Please let me know if the above email was confusing.<br>
&gt; Thanks<br>
&gt; Prashanth<br>
&gt;<br>
&gt;<br>
&gt; On Thu, Dec 9, 2010 at 1:48 PM, Prashanth &lt;<a href="mailto:prashanth.dumpuri@gmail.com">prashanth.dumpuri@gmail.com</a><br>
&gt; &gt;wrote:<br>
&gt;<br>
&gt; &gt; Jayesh,<br>
&gt; &gt;    Thanks for the immediate response (again). You need VTK (visualization<br>
&gt; &gt; toolkit) and PETSc (parallel sparse matrix) libraries to compile my code.<br>
&gt; &gt; Can I include these toolkits in the zip file i&#39;m going to send you?<br>
&gt; &gt; Thanks<br>
&gt; &gt; Prashanth<br>
&gt; &gt;<br>
&gt; &gt; On Thu, Dec 9, 2010 at 1:44 PM, Jayesh Krishna &lt;<a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a>&gt;<br>
&gt; wrote:<br>
&gt; &gt;<br>
&gt; &gt;&gt; Hi,<br>
&gt; &gt;&gt;  The parameters to MPI_Bcast() look alright. It might be easier for me<br>
&gt; to<br>
&gt; &gt;&gt; debug if you can send me the complete code. Can you send a zip of the<br>
&gt; &gt;&gt; complete code to <a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a> ?<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Regards,<br>
&gt; &gt;&gt; Jayesh<br>
&gt; &gt;&gt; ----- Original Message -----<br>
&gt; &gt;&gt; From: Prashanth &lt;<a href="mailto:prashanth.dumpuri@gmail.com">prashanth.dumpuri@gmail.com</a>&gt;<br>
&gt; &gt;&gt; To: Jayesh Krishna &lt;<a href="mailto:jayesh@mcs.anl.gov">jayesh@mcs.anl.gov</a>&gt;<br>
&gt; &gt;&gt; Cc: <a href="mailto:mpich-discuss@mcs.anl.gov">mpich-discuss@mcs.anl.gov</a><br>
&gt; &gt;&gt; Sent: Thu, 09 Dec 2010 13:33:08 -0600 (CST)<br>
&gt; &gt;&gt; Subject: Re: [mpich-discuss] MPICH2 hangs during debug<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Jayesh,<br>
&gt; &gt;&gt;    Thanks for the immediate response. The example MPI application ran<br>
&gt; fine<br>
&gt; &gt;&gt; in the Debug mode. MPI_BCast did not hang for the example application.<br>
&gt; To<br>
&gt; &gt;&gt; answer your question as to why i&#39;m reading the same file from all MPI<br>
&gt; &gt;&gt; processes, I couldn&#39;t figure out how to use MPI_Byte(s) / MPI_Send() to<br>
&gt; &gt;&gt; send<br>
&gt; &gt;&gt; data from root node to all the child nodes. Once I figure that out I&#39;ll<br>
&gt; &gt;&gt; ask<br>
&gt; &gt;&gt; my code to read the data on the root node and then broadcast it to child<br>
&gt; &gt;&gt; nodes.<br>
&gt; &gt;&gt;   I&#39;m not sure if can attach documents to this mailing list and hence<br>
&gt; &#39;am<br>
&gt; &gt;&gt; just pasting the snippet of my code containing the MPI call. If you need<br>
&gt; &gt;&gt; the<br>
&gt; &gt;&gt; entire code, please let me know how to send it to you and i&#39;ll send it<br>
&gt; to<br>
&gt; &gt;&gt; you.  The code hangs at the MPI_BCast command in the Debug mode. FYI,<br>
&gt; I&#39;m<br>
&gt; &gt;&gt; using another toolkit VTK - visualization toolkit - to format my data.<br>
&gt; &gt;&gt; Output1 from class1 is in the vtk data format and translates to a double<br>
&gt; &gt;&gt; array in C++.<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; int main(  int argc, char * argv[] )<br>
&gt; &gt;&gt; {<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    MPI_Init(&amp;argc,&amp;argv);<br>
&gt; &gt;&gt;    int rank, number_of_processors;<br>
&gt; &gt;&gt;    MPI_Comm_size(MPI_COMM_WORLD,&amp; number_of_processors);<br>
&gt; &gt;&gt;    MPI_Comm_rank(MPI_COMM_WORLD,&amp;rank);<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    // read inputs on all processors<br>
&gt; &gt;&gt;    // snipped for brevity<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;   // class1 - read the inputs and generate output1: need not be<br>
&gt; &gt;&gt; parallelized<br>
&gt; &gt;&gt;  vtkSmartPointer&lt;vtkGetSignedClosestPointDistances&gt;<br>
&gt; &gt;&gt; ComputeSignedClosestPointDistances =<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;  vtkSmartPointer&lt;vtkGetSignedClosestPointDistances&gt;::New();<br>
&gt; &gt;&gt;  if ( rank == 0 )<br>
&gt; &gt;&gt;  {<br>
&gt; &gt;&gt;           ComputeSignedClosestPointDistances-&gt;SetInput( inputs i just<br>
&gt; read<br>
&gt; &gt;&gt; );<br>
&gt; &gt;&gt;           ComputeSignedClosestPointDistances-&gt;Update();<br>
&gt; &gt;&gt;  }<br>
&gt; &gt;&gt;   // get output1 from class1<br>
&gt; &gt;&gt;   vtkSmartPointer&lt;vtkDoubleArray&gt; signedclosestpointdistancesbefore =<br>
&gt; &gt;&gt; vtkSmartPointer&lt;vtkDoubleArray&gt;::New();<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; signedclosestpointdistancesbefore-&gt;DeepCopy(<br>
&gt; &gt;&gt; ComputeSignedClosestPointDistances-&gt;GetSignedClosestPointDistances() );<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    // GetVoidPointer(0) returns the void pointer at 0th element<br>
&gt; &gt;&gt;    // GetNumberOfTuples - size of the array<br>
&gt; &gt;&gt;    MPI_Bcast( signedclosestpointdistancesbefore-&gt;GetVoidPointer(0),<br>
&gt; &gt;&gt; signedclosestpointdistancesbefore-&gt;GetNumberOfTuples(), MPI_DOUBLE, 0,<br>
&gt; &gt;&gt;                                                 MPI_COMM_WORLD );<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;   // code snipped for brevity<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;   MPI_Finalize();<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;    return 0;<br>
&gt; &gt;&gt; }<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt; Thanks again for all your help<br>
&gt; &gt;&gt; Prashanth<br>
&gt; &gt;&gt;<br>
&gt; &gt;&gt;<br>
&gt; &gt;<br>
&gt;<br>
&gt;<br>
<br>
</div></div></blockquote></div><br></div>