Commit 5ea0baf4 authored by iker_martin's avatar iker_martin
Browse files

Fixed minor errors for P2PA methods.

parent 0fb35135
...@@ -61,13 +61,8 @@ void free_computeData(Compute_data *computeData, int terminate); ...@@ -61,13 +61,8 @@ void free_computeData(Compute_data *computeData, int terminate);
int n_check = 30; int n_check = 30;
int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_children, int sm, int ss, int rm, int rs); int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_children, int sm, int ss, int rm, int rs, int send_sync);
void send_matrix(struct Dist_data dist_data, Compute_data computeData, int rootBcast, int numP_child, int idI, int idE,
int *sendcounts, int *recvcounts,int *sdispls, int *rdispls);
void dist_new(struct Dist_data *dist_data, Compute_data *computeData); void dist_new(struct Dist_data *dist_data, Compute_data *computeData);
void recv_matrix(struct Dist_data *dist_data, Compute_data *computeData, int idI, int idE,
int *sendcounts, int *recvcounts,int *sdispls, int *rdispls);
void update_dist_data(struct Dist_data *dist_data); void update_dist_data(struct Dist_data *dist_data);
//---------------------------------------------------------------------------------------------------- //----------------------------------------------------------------------------------------------------
void get_dist(int total_r, int id, int numP, struct Dist_data *dist_data); void get_dist(int total_r, int id, int numP, struct Dist_data *dist_data);
...@@ -78,7 +73,7 @@ void getIds_intercomm(struct Dist_data dist_data, int numP_other, int **idS); ...@@ -78,7 +73,7 @@ void getIds_intercomm(struct Dist_data dist_data, int numP_other, int **idS);
int main (int argc, char *argv[]) { int main (int argc, char *argv[]) {
int terminate; int terminate;
int req, num_nodes, num_cpus = 20; int req, num_nodes, num_cpus = 20;
int sm, ss, rm, rs; int sm, ss, rm, rs, send_sync;
char *nodelist = NULL; char *nodelist = NULL;
Compute_data computeData; Compute_data computeData;
...@@ -89,21 +84,22 @@ int main (int argc, char *argv[]) { ...@@ -89,21 +84,22 @@ int main (int argc, char *argv[]) {
computeData.subm.vptr = NULL; computeData.subm.vptr = NULL;
computeData.vlen = NULL; computeData.vlen = NULL;
//FIXME Cambiar send_sync=1;
sm = 1; ss = 1; rm = 0; rs = 1; sm = 1; ss = 1; rm = 0; rs = 1;
int numP, myId, num_children = 0; int numP, myId, num_children = 0;
struct Dist_data dist_data; struct Dist_data dist_data;
if (argc >= 5) { if (argc >= 10) {
num_children = atoi(argv[2]); num_children = atoi(argv[2]);
sm = atoi(argv[3]); sm = atoi(argv[3]);
ss = atoi(argv[4]); ss = atoi(argv[4]);
rm = atoi(argv[5]); rm = atoi(argv[5]);
rs = atoi(argv[6]); rs = atoi(argv[6]);
nodelist = argv[7]; send_sync = atoi(argv[7]);
num_nodes = atoi(argv[8]); nodelist = argv[8];
num_nodes = atoi(argv[9]);
num_cpus = num_nodes * num_cpus; num_cpus = num_nodes * num_cpus;
} }
MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &req); MPI_Init_thread(&argc, &argv, MPI_THREAD_MULTIPLE, &req);
MPI_Comm_size(MPI_COMM_WORLD, &numP); MPI_Comm_size(MPI_COMM_WORLD, &numP);
...@@ -116,14 +112,14 @@ int main (int argc, char *argv[]) { ...@@ -116,14 +112,14 @@ int main (int argc, char *argv[]) {
if( !new_group ) { //First set of processes if( !new_group ) { //First set of processes
init_app(&computeData, &dist_data, argv); init_app(&computeData, &dist_data, argv);
dist_old(&dist_data, &computeData, num_children, sm, ss, rm, rs); dist_old(&dist_data, &computeData, num_children, sm, ss, rm, rs, send_sync);
} else { } else {
dist_new(&dist_data, &computeData); dist_new(&dist_data, &computeData);
} }
// if(computeData.iter==0) // if(computeData.iter==0)
terminate = compute(&computeData, &dist_data, sm); terminate = compute(&computeData, &dist_data, sm);
if(myId == ROOT && terminate) { if(myId == ROOT && terminate) {
printf ("End(%d) --> (%d,%20.10e)\n", computeData.n, computeData.iter, computeData.tol); printf ("End(%d) --> (%d,%20.10e)\n", computeData.n, computeData.iter, computeData.tol);
...@@ -438,7 +434,7 @@ int compute(Compute_data *computeData, struct Dist_data *dist_data, int sm) { ...@@ -438,7 +434,7 @@ int compute(Compute_data *computeData, struct Dist_data *dist_data, int sm) {
if (computeData->iter == 3) reconfigure = 1; if (computeData->iter == 3) reconfigure = 1;
if (reconfigure) { if (reconfigure) {
state = malleability_checkpoint(); state = malleability_checkpoint();
if ((state == MALL_COMPLETED && sm == 0) || state == MALL_ZOMBIE) {break;} if ((state == MALL_COMPLETED && sm == 0) || state == MALL_ZOMBIE) { ended_loop = 0; break; }
else if(state == MALL_COMPLETED) { else if(state == MALL_COMPLETED) {
reconfigure = 0; reconfigure = 0;
//dumb(computeData,dist_data); //dumb(computeData,dist_data);
...@@ -530,9 +526,8 @@ void free_computeData(Compute_data *computeData, int terminate) { ...@@ -530,9 +526,8 @@ void free_computeData(Compute_data *computeData, int terminate) {
/* /*
*/ */
int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_children, int sm, int ss, int rm, int rs) { int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_children, int sm, int ss, int rm, int rs, int send_sync) {
int phy_dist = 2; int phy_dist = 2;
int send_synch = rs == 1 ? 1 : 0;
set_malleability_configuration(sm, ss, phy_dist, rm, rs); set_malleability_configuration(sm, ss, phy_dist, rm, rs);
set_children_number(num_children); set_children_number(num_children);
...@@ -550,9 +545,9 @@ int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_chi ...@@ -550,9 +545,9 @@ int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_chi
malleability_add_data(computeData->z, computeData->n, MAL_DOUBLE, MAL_DATA_ALONE, 0, 1); malleability_add_data(computeData->z, computeData->n, MAL_DOUBLE, MAL_DATA_ALONE, 0, 1);
//FIXME SIguientes valores pueden ser asincronos //FIXME SIguientes valores pueden ser asincronos
malleability_add_data(computeData->vlen, computeData->n, MAL_INT, 1+MAL_DATA_INDEPENDENT, 0, send_synch); malleability_add_data(computeData->vlen, computeData->n, MAL_INT, 1+MAL_DATA_INDEPENDENT, 0, send_sync);
malleability_add_data(computeData->subm.vpos, computeData->n, MAL_INT, 1+MAL_DATA_DEPENDENT, 0, send_synch); malleability_add_data(computeData->subm.vpos, computeData->n, MAL_INT, 1+MAL_DATA_DEPENDENT, 0, send_sync);
malleability_add_data(computeData->subm.vval, computeData->n, MAL_DOUBLE, 1+MAL_DATA_DEPENDENT, 0, send_synch); malleability_add_data(computeData->subm.vval, computeData->n, MAL_DOUBLE, 1+MAL_DATA_DEPENDENT, 0, send_sync);
} }
/* /*
......
...@@ -10,7 +10,7 @@ void check_requests(struct Counts s_counts, struct Counts r_counts, MPI_Request ...@@ -10,7 +10,7 @@ void check_requests(struct Counts s_counts, struct Counts r_counts, MPI_Request
void sync_point2point(void *send, void *recv, int mal_type, int is_intercomm, int myId, struct Counts s_counts, struct Counts r_counts, MPI_Comm comm); void sync_point2point(void *send, void *recv, int mal_type, int is_intercomm, int myId, struct Counts s_counts, struct Counts r_counts, MPI_Comm comm);
void async_point2point(void *send, void *recv, MPI_Datatype datatype, struct Counts s_counts, struct Counts r_counts, MPI_Comm comm, MPI_Request *requests); void async_point2point(void *send, void *recv, int mal_type, struct Counts s_counts, struct Counts r_counts, MPI_Comm comm, MPI_Request *requests);
void perform_manual_communication(void *send, void *recv, int mal_type, int myId, struct Counts s_counts, struct Counts r_counts); void perform_manual_communication(void *send, void *recv, int mal_type, int myId, struct Counts s_counts, struct Counts r_counts);
...@@ -281,7 +281,7 @@ int async_communication(void *send, void **recv, int qty, int mal_type, int depe ...@@ -281,7 +281,7 @@ int async_communication(void *send, void **recv, int qty, int mal_type, int depe
/* PERFORM COMMUNICATION */ /* PERFORM COMMUNICATION */
switch(red_method) { switch(red_method) {
case MALL_RED_POINT: case MALL_RED_POINT:
async_point2point(send, *recv, datatype, s_counts, r_counts, comm, *requests); async_point2point(send, *recv, mal_type, s_counts, r_counts, comm, *requests);
break; break;
case MALL_RED_BASELINE: case MALL_RED_BASELINE:
default: default:
...@@ -336,16 +336,34 @@ int async_communication(void *send, void **recv, int qty, int mal_type, int depe ...@@ -336,16 +336,34 @@ int async_communication(void *send, void **recv, int qty, int mal_type, int depe
* - requests (OUT): Pointer to array of requests to be used to determine if the communication has ended. * - requests (OUT): Pointer to array of requests to be used to determine if the communication has ended.
* *
*/ */
void async_point2point(void *send, void *recv, MPI_Datatype datatype, struct Counts s_counts, struct Counts r_counts, MPI_Comm comm, MPI_Request *requests) { void async_point2point(void *send, void *recv, int mal_type, struct Counts s_counts, struct Counts r_counts, MPI_Comm comm, MPI_Request *requests) {
int i, j = 0; int i, j = 0;
size_t datasize, offset;
MPI_Datatype datatype;
if(mal_type == MAL_INT) {
datatype = MPI_INT;
datasize = sizeof(int);
} else if(mal_type == MAL_DOUBLE) {
datatype = MPI_DOUBLE;
datasize = sizeof(double);
} else if(mal_type == MAL_CHAR) {
datatype = MPI_CHAR;
datasize = sizeof(char);
} else {
printf("Malleability -- Redistribution type not recognised\n");
MPI_Abort(MPI_COMM_WORLD, -1);
}
for(i=s_counts.idI; i<s_counts.idE; i++) { for(i=s_counts.idI; i<s_counts.idE; i++) {
MPI_Isend(send+s_counts.displs[i], s_counts.counts[i], datatype, i, 99, comm, &(requests[j])); offset = s_counts.displs[i] * datasize;
MPI_Isend(send+offset, s_counts.counts[i], datatype, i, 99, comm, &(requests[j]));
j++; j++;
} }
for(i=r_counts.idI; i<r_counts.idE; i++) { for(i=r_counts.idI; i<r_counts.idE; i++) {
MPI_Irecv(recv+r_counts.displs[i], r_counts.counts[i], datatype, i, 99, comm, &(requests[j])); offset = s_counts.displs[i] * datasize;
MPI_Irecv(recv+offset, r_counts.counts[i], datatype, i, 99, comm, &(requests[j]));
j++; j++;
} }
} }
......
...@@ -430,7 +430,7 @@ void send_data(int numP_children, malleability_data_t *data_struct, int is_async ...@@ -430,7 +430,7 @@ void send_data(int numP_children, malleability_data_t *data_struct, int is_async
if(is_asynchronous) { if(is_asynchronous) {
i= dep_not_send ? 0 : data_struct->entries - 2; //FIXME BORRAR i= dep_not_send ? 0 : data_struct->entries - 2; //FIXME BORRAR
for(; i < data_struct->entries; i++) { for(; i < data_struct->entries; i++) {
if(data_struct->dependencies[i] == 1+MAL_DATA_DEPENDENT && dep_not_send) break; //FIXME BORRAR dep_not_send if(data_struct->dependencies[i] == 1+MAL_DATA_DEPENDENT && dep_not_send && mall_conf->spawn_method == MALL_SPAWN_MERGE) break; //FIXME BORRAR dep_not_send
aux_send = data_struct->arrays[i]; aux_send = data_struct->arrays[i];
aux_recv = NULL; aux_recv = NULL;
async_communication(aux_send, &aux_recv, data_struct->qty[i], data_struct->types[i], data_struct->dependencies[i], mall->myId, mall->numP, numP_children, MALLEABILITY_NOT_CHILDREN, mall_conf->red_method, mall_conf->red_strategies, mall->intercomm, async_communication(aux_send, &aux_recv, data_struct->qty[i], data_struct->types[i], data_struct->dependencies[i], mall->myId, mall->numP, numP_children, MALLEABILITY_NOT_CHILDREN, mall_conf->red_method, mall_conf->red_strategies, mall->intercomm,
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment