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

Reply via email to