El 22/08/14 21:31, Saliya Ekanayake escribió:
My apologies, I think I wasn't clear on my question. My question was,
given that copying of data is necessary in both approaches (either by
the system with arrays or by programmer with buffers), is there a
foreseeable performance difference in terms of performance considering
the time it takes for copying?
Both approaches need copying matrix row by row. In Java side there
should not be differences, but in the C side (JNI) if the buffer is an
array it will be necessary one more copy. The performance differences
will be bigger as the matrix size is increased.
Thank you,
Saliya
On Fri, Aug 22, 2014 at 3:24 PM, Oscar Vega-Gisbert <ov...@dsic.upv.es
<mailto:ov...@dsic.upv.es>> wrote:
El 22/08/14 20:44, Saliya Ekanayake escribió:
Thank you Oscar for the detailed information, but I'm still
wondering how would the copying in 2 would be different than
what's done here with copying to a buffer.
If you have a buffer array like this:
double buffer[] = new double[m * n];
Copy the 2D matrix to the buffer:
for(int i = 0; i < m; i++)
System.arraycopy(matrix[i], 0, buffer, i * n, n);
Copy from the buffer to the 2D matrix:
for(int i = 0; i < m; i++)
System.arraycopy(buffer, i * n, matrix[i], 0, n);
On Fri, Aug 22, 2014 at 2:17 PM, Oscar Vega-Gisbert
<ov...@dsic.upv.es <mailto:ov...@dsic.upv.es>
<mailto:ov...@dsic.upv.es <mailto:ov...@dsic.upv.es>>> wrote:
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> <mailto:esal...@gmail.com
<mailto:esal...@gmail.com>>
<mailto:esal...@gmail.com <mailto:esal...@gmail.com>
<mailto:esal...@gmail.com <mailto:esal...@gmail.com>>>
http://saliya.org
_______________________________________________
users mailing list
us...@open-mpi.org <mailto:us...@open-mpi.org>
<mailto:us...@open-mpi.org <mailto: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
_______________________________________________
users mailing list
us...@open-mpi.org <mailto:us...@open-mpi.org>
<mailto:us...@open-mpi.org <mailto: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/25131.php
--
Saliya Ekanayake esal...@gmail.com <mailto:esal...@gmail.com>
<mailto:esal...@gmail.com <mailto:esal...@gmail.com>>
Cell 812-391-4914 <tel:812-391-4914> Home 812-961-6383
<tel:812-961-6383>
http://saliya.org
_______________________________________________
users mailing list
us...@open-mpi.org <mailto: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/25132.php
_______________________________________________
users mailing list
us...@open-mpi.org <mailto: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/25133.php
--
Saliya Ekanayake esal...@gmail.com <mailto:esal...@gmail.com>
Cell 812-391-4914 Home 812-961-6383
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/25134.php