Open MPI logo

Open MPI User's Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Open MPI User's mailing list

Subject: Re: [OMPI users] question to scattering an object in openmpi-1.9a1r27380
From: Jeff Squyres (jsquyres_at_[hidden])
Date: 2012-12-15 07:51:00


Greetings Siegmar; sorry for the horrid delay in replying. :-(

Ralph opened a ticket about this a while ago (https://svn.open-mpi.org/trac/ompi/ticket/3351). I answered it this morning -- see the ticket for the details.

Short version: I don't think that your program is correct.

On Oct 11, 2012, at 7:40 AM, Siegmar Gross wrote:

> Hi,
>
> I have built openmpi-1.9a1r27380 with Java support and try some small
> programs. When I try to scatter an object, I get a ClassCastException.
> I use the following object.
>
> public class MyData implements java.io.Serializable
> {
> static final long serialVersionUID = -5243516570672186644L;
>
> private int age;
> private String name;
> private double salary;
>
> public MyData ()
> {
> age = 0;
> name = "";
> salary = 0.0;
> }
>
> public void setAge (int newAge)
> {
> age = newAge;
> }
> ...
> }
>
>
> I use the following main program.
>
> import mpi.*;
>
> public class ObjectScatterMain
> {
> public static void main (String args[]) throws MPIException
> {
> int mytid; /* my task id */
> MyData dataItem, objBuffer;
> String processor_name; /* name of local machine */
>
> MPI.Init (args);
> processor_name = MPI.Get_processor_name ();
> mytid = MPI.COMM_WORLD.Rank ();
> dataItem = new MyData ();
> objBuffer = new MyData ();
> if (mytid == 0)
> {
> /* initialize data item */
> dataItem.setAge (35);
> dataItem.setName ("Smith");
> dataItem.setSalary (2545.75);
> }
> MPI.COMM_WORLD.Scatter (dataItem, 0, 1, MPI.OBJECT,
> objBuffer, 0, 1, MPI.OBJECT, 0);
> /* Each process prints its received data item. The outputs
> * can intermingle on the screen so that you must use
> * "-output-filename" in Open MPI.
> */
> System.out.printf ("\nProcess %d running on %s.\n" +
> " Age: %d\n" +
> " Name: %s\n" +
> " Salary: %10.2f\n",
> mytid, processor_name,
> objBuffer.getAge (),
> objBuffer.getName (),
> objBuffer.getSalary ());
> MPI.Finalize();
> }
> }
>
>
> I get the following error, when I compile and run the program.
>
> tyr java 218 mpijavac ObjectScatterMain.java
> tyr java 219 mpiexec java 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)
> --------------------------------------------------------------------------
> mpiexec has exited due to process rank 0 with PID 25898 on
> ...
>
>
> Has anybody an idea why I get a ClassCastException or how I must define
> an object, which I can use in a scatter operation? Thank you very much
> for any help in advance.
>
>
> Kind regards
>
> Siegmar
>
> _______________________________________________
> users mailing list
> users_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/users

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