Hello Oscar,

your comments and code was very helpful! Thanks a lot for your help.

Cheers

2014-10-09 22:42 GMT+01:00 Oscar Vega-Gisbert <ov...@dsic.upv.es>:

> Hello Atsugua,
>
> You can only send contiguous data, i.e. arrays of basic datatypes (byte,
> char, short, boolean, int, long, float and double) or direct buffers. If
> you need to send complex data, then you must serialize into an array or a
> direct buffer. This is made using using the mpi.Struct class, which
> represents the MPI_STRUCT datatype.
>
> A user-defined struct must be a subclass of Struct and it must have three
> parts:
> 1. A number of data fields defined using the add[Type]() methods, that
> return the corresponding offsets according to the size of the type. The
> offsets must be stored because they will be necessary to access data.
> 2. A subclass of Struct.Data with get/put methods to access data. These
> methods will need the previously stored offsets.
> 3. The implementation of the method newData() in order to tell the library
> how to create Data objects.
>
> Another question is the String class. It is not supported because it is a
> variable sized object. When it is necessary sending strings you must use
> char arrays.
>
> I attached a similar example to what you want.
> Instead of defining two strings you have an int and a string.
>
> Regards,
> Oscar
>
> El 09/10/14 16:27, Atsugua Ada escribió:
>
>> Hello, I am using Open-MPI 1.8.3 for Java. I would like to know how to
>> create a derived datatype that enables the sending of an array of complex
>> data (objects, strings, etc.) to each processor. In fact, I want to create
>> an array of string or objects and sending a part of this array to each
>> proccess.
>>
>> E.g., I created the next class:
>>
>> |/class  Data{
>>     String  data1;
>>     String  data2;
>>
>>     public  Data(String  d1,  String  d2)
>>     {
>>          this.data1=  d1;
>>          this.data2=  d2;
>>     }
>> }/|
>> |and then a array of Data objects is created|
>> |
>> |/      Data[]  myData=  new  Data[4];        myData[0]  =  new
>> Data("d1",  "this is a test");
>>       ....
>>       myData[3]  =  new  Data("the third data",  "this is another
>> test");/||
>> |How can I create the datatype to send, e.g., myData[0] and [1] to proc#1
>> and the remaining to the proc#2?|
>> |Thanks.|
>>
>>
>> _______________________________________________
>> users mailing list
>> us...@open-mpi.org
>> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
>> Link to this post: http://www.open-mpi.org/community/lists/users/2014/10/
>> 25480.php
>>
>
>
> _______________________________________________
> users mailing list
> us...@open-mpi.org
> Subscription: http://www.open-mpi.org/mailman/listinfo.cgi/users
> Link to this post:
> http://www.open-mpi.org/community/lists/users/2014/10/25482.php
>

Reply via email to