1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
package mpi.dtyp;
import mpi.*;
import java.util.Arrays;
/**
* This example application, is to check and demonstrate the functonality of
* contiguous datatypes. I'm writing an MPJ program by coverting a C program by
* Forest Hoffman at following URL
* http://www.linux-mag.com/2003-04/extreme_01.html
*
*/
public class Vector {
public static int NUM_PARAMS = 1024;
public static void main(String args[]) throws Exception {
try {
Vector c = new Vector(args);
}
catch (Exception e) {
}
}
public Vector() {
}
public Vector(String[] args) throws Exception {
MPI.Init(args);
int i, rank, size;
double[] data = new double[NUM_PARAMS];
double[] rdata = new double[NUM_PARAMS];
rank = MPI.COMM_WORLD.Rank();
size = MPI.COMM_WORLD.Size();
Datatype parameterType;
/* only the first process reads the parameters */
if (rank == 0) {
for (i = 0; i < NUM_PARAMS; i++) {
data[i] = (double) (i * i);
}
}
if (rank == 1) {
MPI.COMM_WORLD.Recv(rdata, 0, 64, MPI.DOUBLE, 0, 10);
System.out.println("recv completed");
for (int j = 0; j < 10; j++) {
System.out.print("rdata[" + j + "]=" + rdata[j] + "\t");
}
/*
* work out what would be test ? if (Arrays.equals(source,dest)) {
* System.out.println("PASS"); }else { System.out.println("\n****");
* System.out.println("FAIL"); System.out.println("****"); }
*/
} else if (rank == 0) {
parameterType = Datatype.Vector(64, 1, 16, MPI.DOUBLE);
parameterType.Commit();
MPI.COMM_WORLD.Send(data, 0, 1, parameterType, 1, 10);
System.out.println("Send Completed");
}
try {
Thread.currentThread().sleep(1000);
}
catch (Exception e) {
}
MPI.COMM_WORLD.Barrier();
MPI.Finalize();
}
}
|