Commit e4e11cf5 authored by iker_martin's avatar iker_martin
Browse files

Minor bugfix when freeing memory.

parent 9100320b
...@@ -50,14 +50,14 @@ void get_rows_dist(Compute_data *computeData, int numP, int n); ...@@ -50,14 +50,14 @@ void get_rows_dist(Compute_data *computeData, int numP, int n);
void mat_alloc(Compute_data *computeData, SparseMatrix mat, struct Dist_data dist_data); void mat_alloc(Compute_data *computeData, SparseMatrix mat, struct Dist_data dist_data);
void computeSolution(Compute_data computeData, double **subsol, SparseMatrix mat, int myId, double **full_vec); void computeSolution(Compute_data computeData, double **subsol, SparseMatrix mat, int myId, double **full_vec);
void pre_compute(Compute_data *computeData, struct Dist_data dist_data, double *subsol, double *full_vec); void pre_compute(Compute_data *computeData, struct Dist_data dist_data, double *subsol, double *full_vec);
int compute(Compute_data *computeData, struct Dist_data *dist_data, char *argv[]); int compute(Compute_data *computeData, struct Dist_data *dist_data);
void free_computeData(Compute_data *computeData); void free_computeData(Compute_data *computeData);
//===================================MALLEABILITY FUNCTIONS==================================================== //===================================MALLEABILITY FUNCTIONS====================================================
int n_check = 30; int n_check = 30;
int dist_old(struct Dist_data *dist_data, Compute_data *computeData, char *argv[], int type_dist); int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_children, int sm, int ss, int rm, int rs);
void send_matrix(struct Dist_data dist_data, Compute_data computeData, int rootBcast, int numP_child, int idI, int idE, 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); int *sendcounts, int *recvcounts,int *sdispls, int *rdispls);
...@@ -76,9 +76,12 @@ int main (int argc, char *argv[]) { ...@@ -76,9 +76,12 @@ int main (int argc, char *argv[]) {
char *nodelist = NULL; char *nodelist = NULL;
Compute_data computeData; Compute_data computeData;
computeData.z = NULL; computeData.d_full = NULL, computeData.d = NULL;
computeData.vec = NULL; computeData.res = NULL; computeData.vec = NULL; computeData.res = NULL;
computeData.dist_elem = NULL; computeData.displs_elem = NULL; computeData.dist_elem = NULL; computeData.displs_elem = NULL;
computeData.dist_rows = NULL; computeData.displs_rows = NULL; computeData.dist_rows = NULL; computeData.displs_rows = NULL;
computeData.subm.vptr = NULL;
computeData.vlen = NULL;
int numP, myId, num_children = 0; int numP, myId, num_children = 0;
struct Dist_data dist_data; struct Dist_data dist_data;
...@@ -93,6 +96,7 @@ int main (int argc, char *argv[]) { ...@@ -93,6 +96,7 @@ int main (int argc, char *argv[]) {
MPI_Comm_size(MPI_COMM_WORLD, &numP); MPI_Comm_size(MPI_COMM_WORLD, &numP);
MPI_Comm_rank(MPI_COMM_WORLD, &myId); MPI_Comm_rank(MPI_COMM_WORLD, &myId);
printf("Nuevo set %d/%d\n", myId, numP);
dist_data.myId = myId; dist_data.myId = myId;
dist_data.numP = numP; dist_data.numP = numP;
dist_data.comm = MPI_COMM_WORLD; dist_data.comm = MPI_COMM_WORLD;
...@@ -101,14 +105,15 @@ int main (int argc, char *argv[]) { ...@@ -101,14 +105,15 @@ 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, 0, 1, 0, 1);
} else { } else {
dist_new(&dist_data, &computeData); dist_new(&dist_data, &computeData);
} }
// Esta variable se envia a los hijos para que conozcan cuantos padres tienen
dist_data.numP_parents = numP;
terminate = compute(&computeData, &dist_data, argv); if ( computeData.iter == 0 ) {
terminate = compute(&computeData, &dist_data);
}
terminate = 1; terminate = 1;
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);
...@@ -380,7 +385,7 @@ void pre_compute(Compute_data *computeData, struct Dist_data dist_data, double * ...@@ -380,7 +385,7 @@ void pre_compute(Compute_data *computeData, struct Dist_data dist_data, double *
/* /*
* Bucle de computo principal * Bucle de computo principal
*/ */
int compute(Compute_data *computeData, struct Dist_data *dist_data, char *argv[]) { int compute(Compute_data *computeData, struct Dist_data *dist_data) {
int IZERO = 0, IONE = 1; int IZERO = 0, IONE = 1;
double DONE = 1.0, DMONE = -1.0, DZERO = 0.0; double DONE = 1.0, DMONE = -1.0, DZERO = 0.0;
...@@ -391,7 +396,7 @@ int compute(Compute_data *computeData, struct Dist_data *dist_data, char *argv[] ...@@ -391,7 +396,7 @@ int compute(Compute_data *computeData, struct Dist_data *dist_data, char *argv[]
while ((computeData->iter < computeData->maxiter) && (computeData->tol > computeData->umbral)) { while ((computeData->iter < computeData->maxiter) && (computeData->tol > computeData->umbral)) {
//while (computeData->tol > computeData->umbral) { //while (computeData->tol > computeData->umbral) {
//malleability_checkpoint(); if (computeData->iter == 3) { malleability_checkpoint(); }
// if(dist_data->myId == ROOT) printf ("(%d,%20.10e)\n", computeData->iter, computeData->tol); // if(dist_data->myId == ROOT) printf ("(%d,%20.10e)\n", computeData->iter, computeData->tol);
...@@ -427,17 +432,36 @@ int compute(Compute_data *computeData, struct Dist_data *dist_data, char *argv[] ...@@ -427,17 +432,36 @@ int compute(Compute_data *computeData, struct Dist_data *dist_data, char *argv[]
void free_computeData(Compute_data *computeData) { void free_computeData(Compute_data *computeData) {
if(computeData->res != NULL) {
RemoveDoubles (&computeData->res); RemoveDoubles (&computeData->res);
}
if(computeData->z != NULL) {
RemoveDoubles (&computeData->z); RemoveDoubles (&computeData->z);
}
if(computeData->d != NULL) {
RemoveDoubles (&computeData->d); RemoveDoubles (&computeData->d);
}
if(computeData->vec != NULL) {
RemoveDoubles (&computeData->vec); RemoveDoubles (&computeData->vec);
}
RemoveDoubles (&computeData->d_full);
if(computeData->d_full != NULL) {
RemoveDoubles (&computeData->d_full);
}
if(computeData->subm.vptr != NULL) {
RemoveSparseMatrix2 (&computeData->subm); RemoveSparseMatrix2 (&computeData->subm);
}
if(computeData->dist_rows != NULL) {
RemoveInts (&computeData->dist_rows); RemoveInts (&computeData->dist_rows);
}
if(computeData->displs_rows != NULL) {
RemoveInts (&computeData->displs_rows); RemoveInts (&computeData->displs_rows);
}
if(computeData->vlen != NULL) {
RemoveInts (&computeData->vlen); RemoveInts (&computeData->vlen);
}
} }
/* /*
...@@ -465,15 +489,16 @@ void free_computeData(Compute_data *computeData) { ...@@ -465,15 +489,16 @@ void free_computeData(Compute_data *computeData) {
/* /*
*/ */
int dist_old(struct Dist_data *dist_data, Compute_data *computeData, char *argv[], int type_dist) { int dist_old(struct Dist_data *dist_data, Compute_data *computeData, int num_children, int sm, int ss, int rm, int rs) {
int i; int phy_dist = 2;
//set_malleability_configuration(sm, ss, phy_dist, rm, rs); set_malleability_configuration(sm, ss, phy_dist, rm, rs);
//set_children_number(numC); set_children_number(num_children);
malleability_add_data(&(computeData->iter), 1, MAL_INT, 1, 1);
malleability_add_data(&(computeData->tol), 1, MAL_DOUBLE, 1, 1);
malleability_add_data(&(computeData->beta), 1, MAL_DOUBLE, 1, 1);
malleability_add_data(&(computeData->umbral), 1, MAL_DOUBLE, 1, 1);
malleability_add_data(&(computeData->iter), 1, MAL_INT, 1, 1);
//malleability_add_data(&(computeData->tol), 1, MAL_DOUBLE, 1, 1);
//malleability_add_data(&(computeData->beta), 1, MAL_DOUBLE, 1, 1);
//malleability_add_data(&(computeData->umbral), 1, MAL_DOUBLE, 1, 1);
/*
malleability_add_data(&(computeData->vec), computeData->n, MAL_DOUBLE, 0, 1); malleability_add_data(&(computeData->vec), computeData->n, MAL_DOUBLE, 0, 1);
malleability_add_data(&(computeData->res), computeData->n, MAL_DOUBLE, 0, 1); malleability_add_data(&(computeData->res), computeData->n, MAL_DOUBLE, 0, 1);
malleability_add_data(&(computeData->z), computeData->n, MAL_DOUBLE, 0, 1); malleability_add_data(&(computeData->z), computeData->n, MAL_DOUBLE, 0, 1);
...@@ -482,6 +507,7 @@ int dist_old(struct Dist_data *dist_data, Compute_data *computeData, char *argv[ ...@@ -482,6 +507,7 @@ int dist_old(struct Dist_data *dist_data, Compute_data *computeData, char *argv[
malleability_add_data(&(computeData->vlen), computeData->n, MAL_INT, 1, 1); //FIXME Ultimo valor puede sere asinc malleability_add_data(&(computeData->vlen), computeData->n, MAL_INT, 1, 1); //FIXME Ultimo valor puede sere asinc
malleability_add_data(&(computeData->subm.vpos), computeData->n, MAL_INT, 1, 1); malleability_add_data(&(computeData->subm.vpos), computeData->n, MAL_INT, 1, 1);
malleability_add_data(&(computeData->subm.vval), computeData->n, MAL_DOUBLE, 1, 1); malleability_add_data(&(computeData->subm.vval), computeData->n, MAL_DOUBLE, 1, 1);
*/
} }
/* /*
...@@ -538,13 +564,14 @@ void dist_new(struct Dist_data *dist_data, Compute_data *computeData) { ...@@ -538,13 +564,14 @@ void dist_new(struct Dist_data *dist_data, Compute_data *computeData) {
void *value = NULL; void *value = NULL;
malleability_get_data(&value, 0, 1, 1); malleability_get_data(&value, 0, 1, 1);
computeData->iter = *((int *)value); computeData->iter = *((int *)value);
malleability_get_data(&value, 1, 1, 1); /* malleability_get_data(&value, 1, 1, 1);
computeData->tol = *((double *)value); computeData->tol = *((double *)value);
malleability_get_data(&value, 2, 1, 1); malleability_get_data(&value, 2, 1, 1);
computeData->beta = *((double *)value); computeData->beta = *((double *)value);
malleability_get_data(&value, 3, 1, 1); malleability_get_data(&value, 3, 1, 1);
computeData->umbral = *((double *)value); computeData->umbral = *((double *)value);
*/
/*
malleability_get_data(&value, 0, 0, 1); malleability_get_data(&value, 0, 0, 1);
computeData->vec = ((double *)value); computeData->vec = ((double *)value);
malleability_get_data(&value, 1, 0, 1); malleability_get_data(&value, 1, 0, 1);
...@@ -561,6 +588,7 @@ void dist_new(struct Dist_data *dist_data, Compute_data *computeData) { ...@@ -561,6 +588,7 @@ void dist_new(struct Dist_data *dist_data, Compute_data *computeData) {
malleability_get_data(&value, 7, 1, 1); malleability_get_data(&value, 7, 1, 1);
computeData->subm.vval = ((double *)value); computeData->subm.vval = ((double *)value);
TransformLengthtoHeader(computeData->subm.vptr, computeData->subm.dim1); // De vlen a vptr TransformLengthtoHeader(computeData->subm.vptr, computeData->subm.dim1); // De vlen a vptr
*/
} }
/* /*
......
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