<div dir="ltr">Hi,<br>Thanks for your answer. <br>I solved the problem. And now it is working perfectly.<br><br>Best regards,<br><br>Reza<br><br><div class="gmail_quote">On Mon, Jul 28, 2008 at 10:24 PM, Burlen Loring <span dir="ltr">&lt;<a href="mailto:burlen.loring@kitware.com">burlen.loring@kitware.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">Hi,<br>
In my experience a number of things could cause this. e.g. I have seen this if I run out of memory. The kernel steps in and kills the process. There might be some info in dmesg, have you looked? Might be something entirely different as well, such as too many open files. There are a bunch of settings you can tweak take a look at your environment settings via ulimit -a.<br>

Burlen<br>
<br>
Gholamreza Sobhaninejad wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;"><div><div></div><div class="Wj3C7c">
Dear All,<br>
<br>
Hi,<br>
This is a prototype program which I am going to implement it in another program. I want to send objects. The program works very well when &#39;shapeset&#39; is small. But when I increase number of CPU, and Shapeset size , I get the following error message:<br>

<br>
&quot;rank 0 in job 12 &nbsp;localhost.localdomain_60694 &nbsp; caused collective abort of all ranks<br>
 &nbsp;exit status of rank 0: killed by signal 9 &quot;<br>
<br>
I have a master process which works on Rank 0 and Slaves which are working on Other ranks.<br>
Master serialize (write all the information in a char buffer) a Shape object and send it through MPI::Send. Slaves are reciving the Objects and Deserialize it and call a function pointer to operate on the object.<br>
Sorry the code is little bit long.<br>
<br>
I really appreciate your help. I need some advices. I am working on Linux-Fedora with dual core cpu.<br>
<br>
Sincerely,<br>
<br>
-- <br>
Gholamreza Sobhaninejad(Reza)<br>
PhD candidate, University of Tokyo<br>
Earthquake Research Institute<br>
Tel: 090-9807-2477<br>
<br>
<br>
This is a code that I am trying to run it:<br>
------------------------------------------------------------------------<br>
head.h :<br>
#include &lt;mpi.h&gt;<br>
#include &lt;stdio.h&gt;<br>
#include &lt;cstdlib&gt;<br>
#include &lt;iostream&gt;<br>
#include &lt;string&gt;<br>
#include &lt;sstream&gt;<br>
#include &lt;fstream&gt;<br>
#include &lt;vector&gt;<br>
#include &lt;time.h&gt;<br>
<br>
using namespace std;<br>
<br>
const char delim = &#39; &#39;;<br>
<br>
#include &quot;Node.h&quot;<br>
#include &quot;Shape.h&quot;<br>
<br>
#include &quot;MPI_Process.h&quot;<br>
<br>
------------------------------------------------------------------------<br>
Node.h<br>
#ifndef _NODE_H_<br>
#define _NODE_H_<br>
<br>
static const string Node_head=&quot;&lt;\\Node&gt;&quot;;<br>
static const string Node_tail=&quot;&lt;Node\\&gt;&quot;;<br>
<br>
class Node<br>
{<br>
<br>
public:<br>
 &nbsp; &nbsp;int id;<br>
 &nbsp; &nbsp;double x,y,z;<br>
 &nbsp; &nbsp;///---- Constructur, Destructor, Copy Constructor<br>
<br>
 &nbsp; &nbsp;Node():x(0),y(0),z(0),id(0) {}<br>
 &nbsp; &nbsp;~Node() {}<br>
 &nbsp; &nbsp;Node(int ID, double X=0, double Y=0, double Z=0) {id = ID; x=X; y=Y; z=Z;}<br></div></div>
 &nbsp; &nbsp;Node(const Node&amp; anode) {id=<a href="http://anode.id" target="_blank">anode.id</a> &lt;<a href="http://anode.id" target="_blank">http://anode.id</a>&gt;; x=anode.x; y= anode.y; z=anode.z;}<div><div></div><div class="Wj3C7c">
<br>
<br>
 &nbsp; &nbsp;//---- Mutator and Accessors<br>
 &nbsp; &nbsp;void SetID(int ID) {id = ID;}<br>
 &nbsp; &nbsp;void Set(int ID, double X=0, double Y=0, double Z=0) {id = ID; x=X; y=Y; z=Z;}<br>
<br>
 &nbsp; &nbsp;Node Get() {return *this;}<br>
<br>
<br>
<br>
<br>
 &nbsp; &nbsp;//---- Serialization and De serialization<br>
 &nbsp; &nbsp;void Serialize(stringstream&amp; out)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;out &lt;&lt; delim &lt;&lt; Node_head &lt;&lt; delim &lt;&lt; this-&gt;id &lt;&lt; delim &lt;&lt; this-&gt;x &lt;&lt; delim<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&lt;&lt; this-&gt;y &lt;&lt; delim &lt;&lt; this-&gt;z &lt;&lt; delim &lt;&lt;Node_tail &lt;&lt; &#39;\n&#39;;<br>
 &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp;void DeSerialize(stringstream&amp; in)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;string tmp;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;in &gt;&gt; tmp &gt;&gt; this-&gt;id &gt;&gt;this-&gt;x &gt;&gt; this-&gt;y &gt;&gt; this-&gt;z &gt;&gt;tmp;<br>
<br>
 &nbsp; &nbsp;}<br>
<br>
<br>
};<br>
<br>
#endif<br>
---------------------------------------------------------------------------------------------<br>
MPI_Process.h :<br>
#ifndef _MPI_PROCESS_H_<br>
#define _MPI_PROCESS_H_<br>
<br>
///---- Message Passing Tags<br>
<br>
#define WORKTAG 1<br>
#define LENTAG &nbsp;3<br>
#define DIETAG 2<br>
#define SLAVE_GET_LENGTH 4<br>
#define SLAVE_WORK_FINISH 5<br>
<br>
class MPI_Process<br>
{<br>
private:<br>
 &nbsp; &nbsp;int* source_ID;<br>
 &nbsp; &nbsp;int* current_ID;<br>
 &nbsp; &nbsp;int* num_Process ;<br>
 &nbsp; &nbsp;int* length ;<br>
<br>
 &nbsp; &nbsp;MPI::Status status;<br>
<br>
 &nbsp; &nbsp;void Probe_Message_Length();<br>
<br>
public:<br>
 &nbsp; &nbsp;MPI_Process(void);<br>
 &nbsp; &nbsp;~MPI_Process(void);<br>
<br>
 &nbsp; &nbsp;void Kill_Process(int rank);<br>
<br>
 &nbsp; &nbsp;//-- Set &amp; Get<br>
<br>
 &nbsp; &nbsp;void Set_Num_Proc(int i);<br>
 &nbsp; &nbsp;int &nbsp;Get_Num_Proc();<br>
<br>
 &nbsp; &nbsp;void Set_SourceID(int i);<br>
 &nbsp; &nbsp;int Get_SourceID();<br>
<br>
 &nbsp; &nbsp;void Set_CurrentID(int i);<br>
 &nbsp; &nbsp;int &nbsp;Get_CurrentID();<br>
<br>
 &nbsp; &nbsp;int Send_Serializable_Object &nbsp; &nbsp; ( void* Object ,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; int &nbsp;rank &nbsp; &nbsp;,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void (*pt2function)(void* Object,stringstream&amp; stream)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;);<br>
<br>
 &nbsp; &nbsp;int Recieve_Serializable_Object &nbsp;( void* Object,<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; void (*pt2function)(void* Object,stringstream&amp; stream)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; );<br>
<br>
};<br>
<br>
<br>
#endif<br>
----------------------------------------------------------------------------------<br>
Shape.h :<br>
<br>
#ifndef _SHAPE_H_<br>
#define _SHAPE_H_<br>
<br>
<br>
static const string Shape_head=&quot;&lt;\\Shape&gt;&quot;;<br>
static const string Shape_tail=&quot;&lt;Shape\\&gt;&quot;;<br>
<br>
string &nbsp; &nbsp;Int2Str(int num);<br>
<br>
<br>
class Shape<br>
{<br>
public :<br>
 &nbsp; &nbsp;int id;<br>
 &nbsp; &nbsp;vector&lt;Node&gt; nodeset;<br>
<br>
 &nbsp; &nbsp;Shape() : id(0) {}<br>
 &nbsp; &nbsp;~Shape() {nodeset.clear();}<br>
<br>
 &nbsp; &nbsp;Shape(const Shape&amp; aShape);<br>
<br>
 &nbsp; &nbsp;void SetID(int ID) {id = ID;}<br>
 &nbsp; &nbsp;void MakeShape();<br>
 &nbsp; &nbsp;void Serialize(stringstream&amp; out);<br>
 &nbsp; &nbsp;void DeSerialize(stringstream&amp; in);<br>
<br>
 &nbsp; &nbsp;void Write2File()<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;stringstream ss;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ofstream out( (&quot;Shape&quot; + Int2Str(this-&gt;id)+&quot;.shp&quot;).c_str());<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;this-&gt;Serialize(ss);<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;out.write(ss.str().c_str(), ss.str().size());<br>
 &nbsp; &nbsp; &nbsp; &nbsp;out.close();<br>
 &nbsp; &nbsp; &nbsp; &nbsp;ss.clear();<br>
 &nbsp; &nbsp;}<br>
<br>
<br>
 &nbsp; &nbsp;static void Wrapper_To_MPI_SEND (void* Object, stringstream&amp; out);<br>
<br>
 &nbsp; &nbsp;static void Wrapper_To_MPI_RECIVE (void* Object, stringstream&amp; in);<br>
 &nbsp; };<br>
<br>
#endif<br>
-------------------------------------------------------------------------------------------<br>
MPI_Process.cpp :<br>
<br>
#include &quot;head.h&quot;<br>
#include &lt;string.h&gt;<br>
MPI_Process::MPI_Process(void){}<br>
<br>
MPI_Process::~MPI_Process(void){}<br>
<br>
void MPI_Process::Set_Num_Proc(int i)<br>
{<br>
 &nbsp; &nbsp;this-&gt;num_Process = new int;<br>
 &nbsp; &nbsp;*this-&gt;num_Process = i;<br>
}<br>
<br>
int MPI_Process::Get_Num_Proc()<br>
{<br>
 &nbsp; &nbsp;return *this-&gt;num_Process;<br>
}<br>
<br>
void MPI_Process::Set_SourceID(int i)<br>
{<br>
 &nbsp; &nbsp; this-&gt;source_ID &nbsp;= new int;<br>
 &nbsp; &nbsp; *this-&gt;source_ID = i;<br>
}<br>
<br>
int MPI_Process::Get_SourceID()<br>
{<br>
 &nbsp; &nbsp;return *this-&gt;source_ID;<br>
}<br>
<br>
void MPI_Process::Set_CurrentID(int i)<br>
{<br>
 &nbsp; &nbsp;this-&gt;current_ID = new int;<br>
 &nbsp; &nbsp;*this-&gt;current_ID = i;<br>
}<br>
<br>
void MPI_Process::Probe_Message_Length()<br>
{<br>
 &nbsp; &nbsp;MPI::COMM_WORLD.Probe(*this-&gt;source_ID,WORKTAG,this-&gt;status);<br>
 &nbsp; &nbsp;this-&gt;length = new int(status.Get_count(MPI::CHAR) );<br>
}<br>
<br>
<br>
int MPI_Process::Send_Serializable_Object(void* Object, int rank, void (*pt2function)(void* Object,stringstream&amp; stream))<br>
{<br>
 &nbsp; &nbsp;stringstream * stream;<br>
 &nbsp; &nbsp;char* buffer;<br>
 &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp;int message_length;<br>
 &nbsp;  &nbsp; &nbsp;stream = new stringstream();<br>
 &nbsp;  &nbsp; &nbsp;//-- Serialize &nbsp;  &nbsp; &nbsp;pt2function(Object,*stream);<br>
 &nbsp;  &nbsp; &nbsp;message_length = stream-&gt;str().length();<br>
 &nbsp; &nbsp;buffer = new char[message_length];<br>
<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp;strcpy(buffer,stream-&gt;str().c_str());<br>
<br>
 &nbsp; &nbsp;MPI::COMM_WORLD.Send(buffer,message_length,MPI::CHAR,rank,WORKTAG);<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp;delete stream;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;delete[] buffer;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return message_length ;<br>
}<br>
<br>
int MPI_Process::Recieve_Serializable_Object(void* Object, void (*pt2function)(void* Object,stringstream&amp; stream))<br>
{ &nbsp;  &nbsp; &nbsp;stringstream * stream;<br>
 &nbsp; &nbsp;char* buffer;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp;this-&gt;Probe_Message_Length();<br>
 &nbsp;  &nbsp; &nbsp;buffer = new char[ *this-&gt;length ];<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp;if(*this-&gt;length == 1 ) cout &lt;&lt; buffer &lt;&lt;endl;<br>
<br>
<br>
<br>
 &nbsp; &nbsp;MPI::COMM_WORLD.Recv(buffer,*this-&gt;length,MPI::CHAR, 0 ,WORKTAG);<br>
 &nbsp;  &nbsp; &nbsp;if(buffer[0] ==&#39;0&#39;)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete stream;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete[] buffer;<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return 0;<br>
 &nbsp; &nbsp;}<br>
 &nbsp; &nbsp;else<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;stream = new stringstream(); &nbsp; <br>
 &nbsp; &nbsp; &nbsp; &nbsp;stream-&gt;str(buffer);<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;pt2function(Object,*stream);<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;stream-&gt;clear();<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete stream;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;delete[] buffer;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp;return *this-&gt;length;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; }<br>
<br>
}<br>
<br>
void MPI_Process::Kill_Process(int rank)<br>
{<br>
 &nbsp; &nbsp;char *buffer;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;buffer = new char[1];<br>
 &nbsp; &nbsp; &nbsp; &nbsp;buffer[0]=&#39;0&#39;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;Process No: &quot; &lt;&lt; rank &lt;&lt; &quot;is killed&quot; &lt;&lt; &#39;\n&#39;;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;MPI::COMM_WORLD.Send(&amp;buffer,1,MPI::CHAR,rank,WORKTAG);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;delete[] buffer;<br>
 &nbsp; &nbsp;//MPI::COMM_WORLD.Sendrecv(&amp;buffer,1,MPI::CHAR,rank,WORKTAG,&amp;tmp,1,MPI::INT,rank,WORKTAG);<br>
}<br>
----------------------------------------------------------------------------------------------------------------------<br>
Shape.h :<br>
#include &quot;head.h&quot;<br>
<br>
<br>
Shape::Shape(const Shape&amp; aShape)<br>
{<br>
 &nbsp; &nbsp;/*this-&gt;id = aShape.id;<br>
 &nbsp;  &nbsp; &nbsp;for(vector&lt;Node&gt;::iterator i=aShape.nodeset.begin() ; i!=aShape.nodeset.end(); i++)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;this-&gt;nodeset.push_back(*i);*/<br>
}<br>
string &nbsp; &nbsp;Int2Str(int num)<br>
{<br>
 &nbsp; &nbsp;stringstream ss;<br>
 &nbsp; &nbsp;ss &lt;&lt; num;<br>
 &nbsp; &nbsp;return ss.str();<br>
}<br>
<br>
void Shape::MakeShape()<br>
{<br>
 &nbsp; &nbsp;Node n;<br>
 &nbsp; &nbsp;for(register int i=0;i&lt;10;i++)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;//n.Set(i,0.01*i,1.0*i,2.0*i);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;n.Set(rand()%100,rand()%100,rand()%100,rand()%100);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;this-&gt;nodeset.push_back(n);<br>
 &nbsp; &nbsp;}<br>
}<br>
<br>
void Shape::Serialize(stringstream&amp; out)<br>
{<br>
 &nbsp; &nbsp;cout &lt;&lt; &quot;Start of Serialization Processes NO &quot; &lt;&lt; MPI::COMM_WORLD.Get_rank() &nbsp; &nbsp;&lt;&lt;endl;<br>
<br>
 &nbsp; &nbsp;out &lt;&lt; Shape_head &lt;&lt; &#39;\n&#39; &lt;&lt;delim &lt;&lt; this-&gt;id &lt;&lt; delim &lt;&lt; (int) this-&gt;nodeset.size() &lt;&lt; &#39;\n&#39;;<br>
 &nbsp; &nbsp;for(vector&lt;Node&gt;::iterator i=this-&gt;nodeset.begin(); i!= this-&gt;nodeset.end();i++)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;i-&gt;Serialize(out);<br>
 &nbsp; &nbsp;out &lt;&lt; Shape_tail &nbsp;&lt;&lt;&#39;\n&#39; ;<br>
}<br>
<br>
void Shape::DeSerialize(stringstream&amp; in)<br>
{<br>
 &nbsp; &nbsp;cout &lt;&lt; &quot;Start of DeSerialization Processes NO &quot; &lt;&lt; MPI::COMM_WORLD.Get_rank() &nbsp; &nbsp;&lt;&lt;endl;<br>
<br>
 &nbsp; &nbsp;string tmp;<br>
 &nbsp; &nbsp;int &nbsp; &nbsp;number_of_nodes;<br>
 &nbsp; &nbsp;in &gt;&gt; tmp &gt;&gt; this-&gt;id &gt;&gt; number_of_nodes;<br>
 &nbsp; &nbsp;this-&gt;nodeset.resize(number_of_nodes);<br>
 &nbsp; &nbsp;for(vector&lt;Node&gt;::iterator i=this-&gt;nodeset.begin(); i!=this-&gt;nodeset.end();i++)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;i-&gt;DeSerialize(in);<br>
 &nbsp; &nbsp;in &gt;&gt; tmp; &nbsp; }<br>
<br>
<br>
<br>
void Shape::Wrapper_To_MPI_SEND(void* Object, stringstream&amp; out)<br>
{<br>
 &nbsp; &nbsp;Shape* myself = (Shape*) Object;<br>
 &nbsp; &nbsp;myself-&gt;Serialize(out);<br>
}<br>
<br>
<br>
void Shape::Wrapper_To_MPI_RECIVE(void *Object, std::stringstream&amp; in)<br>
{<br>
 &nbsp; &nbsp;Shape* myself = (Shape*) Object;<br>
 &nbsp; &nbsp;myself-&gt;DeSerialize(in);<br>
 &nbsp; &nbsp;myself-&gt;Write2File();<br>
}<br>
<br>
<br>
-------------------------------------------------------------------------------------<br>
<br>
main.cpp :<br>
#include &quot;head.h&quot;<br>
<br>
<br>
<br>
void Slave()<br>
{<br>
<br>
 &nbsp; &nbsp;MPI_Process *slave_process = new MPI_Process();<br>
 &nbsp;  &nbsp; &nbsp;slave_process-&gt;Set_SourceID(0);<br>
 &nbsp; &nbsp;slave_process-&gt;Set_CurrentID(MPI::COMM_WORLD.Get_rank());<br>
 &nbsp;  &nbsp; &nbsp;Shape shape;<br>
<br>
 &nbsp; &nbsp;while(slave_process-&gt;Recieve_Serializable_Object( (void*) &amp;shape, Shape::Wrapper_To_MPI_RECIVE) &nbsp;!= 0)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;Slave No: &quot; &lt;&lt; MPI::COMM_WORLD.Get_size() &lt;&lt; &quot; Finished Work.&quot; &lt;&lt;endl;<br>
 &nbsp; &nbsp;}<br>
 &nbsp; &nbsp;cout &lt;&lt; &quot;Slave No: &quot; &lt;&lt; MPI::COMM_WORLD.Get_size() &lt;&lt; &quot; Quit.&quot; &lt;&lt;endl;<br>
}<br>
<br>
&nbsp;void Master(vector&lt;Shape&gt;&amp; shapeset)<br>
{<br>
 &nbsp; &nbsp;MPI_Process* master_Process = new MPI_Process();<br>
 &nbsp;  &nbsp; &nbsp;int check(0),rank(1),nproc,counter(0);<br>
<br>
 &nbsp; &nbsp;master_Process -&gt;Set_Num_Proc(MPI::COMM_WORLD.Get_size());<br>
 &nbsp; &nbsp;master_Process-&gt;Set_CurrentID(0);<br>
 &nbsp; &nbsp;master_Process-&gt;Set_SourceID(0);<br>
 &nbsp; &nbsp;nproc = master_Process-&gt;Get_Num_Proc();<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp;vector&lt;Shape&gt;::iterator i(shapeset.begin());<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; shapeset.size() &lt;&lt; endl;<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp;for(counter; counter &lt; (int) shapeset.size();counter++,rank++)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;if(i!=shapeset.end())<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;if(rank &gt; nproc-1) rank =1;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;Master Send a Message with Lenght of :&quot; &lt;&lt;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;master_Process-&gt;Send_Serializable_Object((void*) &amp;(*i) ,rank, Shape::Wrapper_To_MPI_SEND)<br>
 &nbsp; &nbsp; &nbsp; &nbsp;&lt;&lt; &quot; to CPU Rank:&quot; &lt;&lt; rank &lt;&lt;endl;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i++;<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;}<br>
 &nbsp; &nbsp;}<br>
<br>
 &nbsp; &nbsp;cout &lt;&lt;&quot; Start of Turning off System!&quot; &lt;&lt; endl;<br>
<br>
 &nbsp; &nbsp;for(rank=1; rank&lt; nproc ; &nbsp;++rank)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;sending Kill Message to Proc: &quot; &lt;&lt; rank &lt;&lt;endl;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;master_Process-&gt;Kill_Process(rank);<br>
 &nbsp; &nbsp;}<br>
}<br>
<br>
<br>
<br>
<br>
<br>
int main(int argc, char ** argv)<br>
{<br>
 &nbsp; &nbsp;srand( (int) time(NULL));<br>
 &nbsp; <br>
 &nbsp; &nbsp;int rank,nproc,nwork;<br>
<br>
 &nbsp; &nbsp;//--- Start of MPI CALL<br>
 &nbsp;  &nbsp; &nbsp;MPI::Status status;<br>
 &nbsp; &nbsp;MPI::Init(argc,argv);<br>
<br>
 &nbsp; &nbsp;nproc=MPI::COMM_WORLD.Get_size();<br>
 &nbsp; &nbsp;rank = MPI::COMM_WORLD.Get_rank();<br>
 &nbsp;  &nbsp; &nbsp;if(rank==0)<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;vector&lt;Shape&gt; shapeset;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;shapeset.resize(10000);<br>
 &nbsp; &nbsp; &nbsp; &nbsp;int j=0;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;for( vector&lt;Shape&gt;::iterator i=shapeset.begin(); i!=shapeset.end(); i++, ++j)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i-&gt;SetID(j);<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;for( vector&lt;Shape&gt;::iterator i=shapeset.begin(); i!=shapeset.end(); i++)<br>
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;i-&gt;MakeShape();<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;Shape Initialization Finished&quot; &lt;&lt; endl;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;Processor NO: &nbsp;&quot; &lt;&lt; rank &lt;&lt; &quot; Started&quot; &lt;&lt;endl;<br>
<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Master(shapeset);<br>
 &nbsp; &nbsp;}<br>
 &nbsp; &nbsp;else<br>
 &nbsp; &nbsp;{<br>
 &nbsp; &nbsp; &nbsp; &nbsp;cout &lt;&lt; &quot;Processor NO: &nbsp;&quot; &lt;&lt; rank &lt;&lt; &quot; Started&quot; &lt;&lt;endl;<br>
 &nbsp; &nbsp; &nbsp; &nbsp;Slave();<br>
 &nbsp; &nbsp;}<br>
 &nbsp; &nbsp; &nbsp;  &nbsp; &nbsp;MPI::Finalize();<br>
<br>
<br>
 &nbsp; &nbsp;return 0;<br>
}<br>
<br>
<br>
<br>
</div></div></blockquote><font color="#888888">
<br>
<br>
-- <br>
Burlen Loring<br>
Kitware, Inc.<br>
R&amp;D Engineer<br>
28 Corporate Drive<br>
Clifton Park, NY 12065-8662<br>
Phone: 518-371-3971 x137<br>
<br>
</font></blockquote></div><br><br clear="all"><br>-- <br>Gholamreza Sobhaninejad(Reza)<br>PhD candidate, University of Tokyo<br>Earthquake Research Institute<br>Tel: 090-9807-2477<br>
</div>