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: Siegmar Gross (Siegmar.Gross_at_[hidden])
Date: 2012-12-15 10:46:06


Hello,

> #3351: JAVA scatter error
> ---------------------+-----------------------------
> Reporter: rhc | Owner: jsquyres
> Type: defect | Status: closed
> Priority: critical | Milestone: Open MPI 1.7.1
> Version: trunk | Resolution: invalid
> Keywords: |
> ---------------------+-----------------------------
> Changes (by jsquyres):
>
> * status: new => closed
> * resolution: => invalid
>
>
> Comment:
>
> I do not believe that the sample code provided is a valid MPI program, for
> two reasons (disclaimer: I do ''not'' know Java -- I'm just reading the
> code and making some assumptions about Java):
>
> 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. 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?

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

> 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)

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

tyr java 117 mpiexec -np 1 java -cp $DIRPREFIX_LOCAL/mpi_classfiles \
  ObjectBroadcastMain

Process 0 running on tyr.informatik.hs-fulda.de.
  Age: 35
  Name: Smith
  Salary: 2545.75

tyr java 118 mpiexec -np 2 java -cp $DIRPREFIX_LOCAL/mpi_classfiles \
  ObjectBroadcastMain
Exception in thread "main" java.lang.ClassCastException: MyData cannot
  be cast to [Ljava.lang.Object;
        at mpi.Comm.Object_Serialize(Comm.java:207)
        at mpi.Comm.Send(Comm.java:292)
        at mpi.Intracomm.Bcast(Intracomm.java:202)
        at ObjectBroadcastMain.main(ObjectBroadcastMain.java:44)

> Short version -- I don't think this bug is valid. I'm closing the ticket.

If I misunderstood the mpiJava specification and I must create a special
MPI object from my Java object: How do I create it? Thank you very much
for any help in advance.

Kind regards

Siegmar