Subject: MPI_Abort

From: Fethiye Akbulut <[email-masked]>
Date: Sun, 28 Feb 1999 13:14:02 -0600 (CST)

Hi all,

I am so new with MPI and not so sure if this is the right forum to ask
questions about the difficulties I am facing with MPI, but here comes one:

I have several processors competing to finish a job. All I want to do is
to kill the other processes when one is done. Yes, I know MPI_Abort would
do that, and it really kills but it also generates all the error messages.
So, is there another way of doing this? Or, is there a way not to show
these error messages generated?

Also, what about the error_code part of MPI_Abort? Is there any site which
gives a listing of which integer correspond to which kind of `error'
generated?

Thanks,
Fethiye

---

From: Bill Saphir <[email-masked]>
Date: Sun, 28 Feb 1999 13:06:55 -0800 (PST)

> these error messages generated?

No. 

The general rule in MPI is that operations are cooperative.  That is,
one process cannot do something to another without the explicit
cooperation of the other process. This both improves performance and
eliminates race conditions. The "MPI" way of shutting down is for all
processes to call MPI_Finalize() and exit. In your case, the process
that "wins" would need to send a message to the others to enable
cooperative shutdown, and all processes would need to poll. 
Admittedly not pretty. 

As for not showing the error messages, the standard is silent. It would
be possible for an implementation to decide not to show an error
message, or to not show an error message for certain error codes, but
this would be implementation dependent.

> gives a listing of which integer correspond to which kind of `error'

The code can be anything you want. I don't believe this code is
necessarily related to error codes returned by MPI routines, as
described in section 7.3 of the standard, "Error codes and classes", at
http://www.mpi-forum.org/docs/mpi-11-html/node149.html#Node149.

Bill

---

From: Fethiye Akbulut <[email-masked]>
Date: Tue, 2 Mar 1999 20:04:45 -0600 (CST)

Hi all,

OK, since MPI_Abort does put the errors to stdout and it is not what we
want I am trying another suggested way: using MPI_Iprobe.

Here, I still have questions...

In Dr.Pacheco's Book, it is written that MPI_Iprobe function searches for
an incoming message matching three of the given parameters. And when it
does match, then the flag is turned and we should use MPI_Recv to receive
the message sent. So far, it is great.

But, in my situation, since I want to kill the other processes when I am
done, I don't want to wait for them to come to the same stage as I am. So,
where should I put this MPI_Iprobe and MPI_Recv funstions? Do they have to
follow each other?

Thank you in advance,
Fethiye

---

From: Tony Skjellum <[email-masked]>
Date: Tue, 2 Mar 1999 20:48:40 -0600 (CST)

I think you are asking for something outside the MPI standard,
unfortunately.

Anthony Skjellum, PhD, President ([email-masked]) 
MPI Software Technology, Inc., Ste 201, 1 Research Blvd., Starkville, MS 39759
+1-(601)320-4300 x15; FAX: +1-(601)320-4301; http://www.mpi-softtech.com
*The source for MPI, MPI-2, MPI/RT, Embedded & High Performance Middleware(tm)*

> where should I put this MPI_Iprobe and MPI_Recv funstions? Do they have to
well, you really want an interrupt approach, and that is outside MPI.
Otherwise, you should do your own reactive programming model, and
dispatch over the type of messages received, with one special message,
the kill message, being any example to dispatch on.