Re: [OMPI users] question to scattering an object in openmpi-1.9a1r27380

2012-12-15 Thread Jeff Squyres
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
> us...@open-mpi.org
> http://www.open-mpi.org/mailman/listinfo.cgi/users


-- 
Jeff Squyres
jsquy...@cisco.com
For corporate legal information go to: 
http://www.cisco.com/web/about/doing_business/legal/cri/




[OMPI users] question to scattering an object in openmpi-1.9a1r27380

2012-10-11 Thread Siegmar Gross
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 intage;
  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
  {
intmytid;   /* 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