Open MPI logo

Open MPI User's Mailing List Archives

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

Subject: [OMPI users] question to scattering an object in openmpi-1.9a1r27380
From: Siegmar Gross (Siegmar.Gross_at_[hidden])
Date: 2012-10-11 07:40:51


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