Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |  

This web mail archive is frozen.

This page is part of a frozen web archive of this mailing list.

You can still navigate around this archive, but know that no new mails have been added to it since July of 2016.

Click here to be taken to the new web archives of this list; it includes all the mails that are in this frozen archive plus all new mails that have been sent to the list since it was migrated to the new archives.

Subject: Re: [OMPI users] [Open MPI] #3351: JAVA scatter error
From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2012-12-17 17:12:19


On Dec 15, 2012, at 10:46 AM, Siegmar Gross wrote:

>> 1. The datatypes passed to Scatter are not valid MPI datatypes
>> (MPI.OBJECT). You need to construct a datatype that is specific to the
>> !MyData class, just like you would in C/C++. I think that this is the
>> first error that you are seeing (i.e., that OMPI is trying to treat
>> MPI.OBJECT as an MPI Datatype object, and failing (and therefore throwing
>> an !ClassCastException exception).
>
> Perhaps you are right and my small example program ist not a valid MPI
> program. The problem is that I couldn't find any good documentation or
> example programs how to write a program which uses a structured data
> type.

In Java, that's probably true. Remember: there are no official MPI Java bindings. What is included in Open MPI is a research project from several years ago. We picked what appeared to be the best one, freshened it up a little, updated its build system to incorporate into ours, verified its basic functionality, and went with that.

In C, there should be plenty of google-able examples about how to use Scatter (and friends). You might want to have a look at a few of those to get an idea how to use MPI_Scatter in general, and then apply that knowledge to a Java program.

Make sense?

> Therefore I sticked to the mpiJava specification which states
> for derived datatypes in chapter 3.12 that the effect for MPI_Type_struct
> can be achieved by using MPI.OBJECT as the buffer type and relying on
> Java object serialization. "dataItem" is a serializable Java object and
> I used MPI.OBJECT as buffer type. How can I create a valid MPI datatype
> MPI.OBJECT so that I get a working example program?

/me reads some Java implementation code...

It looks like they allow passing MPI.OBJECT as the datatype argument; sorry, I guess I was wrong about that.

> MPI.COMM_WORLD.Scatter (dataItem, 0, 1, MPI.OBJECT,
> objBuffer, 0, 1, MPI.OBJECT, 0);

What I think you're running into here is that you're still using Scatter wrong, per my other point, below:

>> 1. It looks like you're trying to Scatter a single object to N peers.
>> That's invalid MPI -- you need to scatter (N*M) objects to N peers, where
>> M is a positive integer value (e.g., 1 or 2). Are you trying to
>> broadcast?
>
> It is the very first version of the program where I scatter one object
> to the process itself (at this point it is not the normal application
> area for scatter, but should nevertheless work). I didn't continue due
> to the error. I get the same error when I broadcast my data item.
>
> tyr java 116 mpiexec -np 1 java -cp $DIRPREFIX_LOCAL/mpi_classfiles \
> ObjectScatterMain
> Exception in thread "main" java.lang.ClassCastException: MyData cannot
> be cast to [Ljava.lang.Object;
> at mpi.Intracomm.copyBuffer(Intracomm.java:119)
> at mpi.Intracomm.Scatter(Intracomm.java:389)
> at ObjectScatterMain.main(ObjectScatterMain.java:45)

I don't know Java, but it looks like it's complaining about the type of dataItem, not the type of MPI.OBJECT. It says it can't cast dataItem to a Ljava.lang.Object -- which appears to be the type of the first argument to Scatter.

Do you need to have MyData inherit from the Java base Object type, or some such?

> "Broadcast" works if I have only a root process and it fails when I have
> one more process.

If I change MPI.COMM_WORLD.Scatter(...) to

        MPI.COMM_WORLD.Bcast(dataItem, 0, 1, MPI.OBJECT, 0);

I get the same casting error.

I'm sorry; I really don't know Java, and don't know how to fix this offhand.

-- 
Jeff Squyres
jsquyres_at_[hidden]
For corporate legal information go to: http://www.cisco.com/web/about/doing_business/legal/cri/