El 22/08/14 17:10, Saliya Ekanayake escribió:
Hi,
I've a quick question about the usage of Java binding.
Say there's a 2 dimensional double array (size m x n) that needs to be
sent to another rank. I see two options to get this done,
1. Copy values to a direct buffer of size m*n and send it
2. Copy values to a 1D array of size m*n and send it
I guess 2 would internally do the copying to a buffer and use it, so
suggesting 1. is the best option. Is this the case or is there a
better way to do this?
The best option is 1 because 2 requires one extra copy to C heap.
Supposing the matrix is the following:
double matrix[][] = new double[m][n];
Then you can allocate a direct DoubleBuffer:
DoubleBuffer buffer = MPI.newDoubleBuffer(m * n);
In order to send/receive the matrix I suggest to use the bulk put/get
methods:
for(int i = 0; i < m; i++)
buffer.put(matrix[i]); // Copy to the buffer.
MPI.COMM_WORLD.send(buffer, m*n, MPI.DOUBLE, 1, 0);
The receive code:
MPI.COMM_WORLD.recv(buffer, m*n, MPI.DOUBLE, 0, 0);
for(int i = 0; i < m; i++)
buffer.get(matrix[i]); // Copy from the buffer.
Note that bulk get/put methods increment the buffer position in n. So if
you want reuse the buffer you must set the buffer position to 0 before
copy the matrix:
buffer.position(0);
Regards,
Oscar
Thank you,
Saliya
--
Saliya Ekanayake esal...@gmail.com <mailto:esal...@gmail.com>
http://saliya.org
_______________________________________________
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/08/25130.php