On 6 Jul 2010, at 00:24, Jack Bryan wrote:

Hi, 

Thanks for all your reply. 

I attached the code in the email. 

I downloaded : Rhapsodia.Scheduler
from 
http://rhascheduler.sourceforge.net/
because I need to do application program level task scheduling. 

In file "TaskPackSystem.hpp", I designed a task class "TaskPackage" to carry my defined task.

Other classes in the file are not used. 

My main program is mpi_message_transfer.cpp, which can transfer tasks from master to workers 
and then collects results from them. 


Right now, I am testing 3 tasks (TOTALTASKNUM =3) and 2 workers (nodes). 

I use 3 nodes totally, another node is the master. 

node 0 : is master.

node 1 : worker 1 assigned with task 1 and 3. 

node 2 : worker 2 assigned with task 2. 

Each task has a distinct tag, which is assigned by master before it is sent out to a worker. 

After receiving a task and doing its local work on the task, the worker uses the same tag ID to send 
it to master. 

The master use non-blocking world.recv(resultSourceRank, tagID, resultTaskPackage) to get the result task. 

You may need to download the Rhapsodia.Scheduler to get their header files. 

I attached the 4 files in the email. 

mpi_message_transfer.cpp
TaskPackSystem.hpp
BasicScheduler.hpp
SimpleScheduler.hpp

Hi Jack,

it would help a lot if you could reduce this to a simpler example - for example I don't even know whether your problem is with the T1 or T2 tasks, or anything else. One immediate problem I see is that you never post a wait for recvReqsT2, and thus those receives will never happen. 

You will need to reduce this to a simpler problem, and it might also help if, as suggested before, you also try to use the native MPI API instead of Boost.MPI.

Matthias


Matthias