Commit 9b3fed07 authored by iker_martin's avatar iker_martin
Browse files

First working version for Ethernet network. Found bug around MPICH+OFI for function MPI_Probe.

parent cf2459d8
...@@ -187,7 +187,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) { ...@@ -187,7 +187,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) {
n = size; n_dist = sizeR; maxiter = 16 * size; rec_iter = maxiter / 2; umbral = 1.0e-8; n = size; n_dist = sizeR; maxiter = 16 * size; rec_iter = maxiter / 2; umbral = 1.0e-8;
myId = computeData->myId; myId = computeData->myId;
state = -1; state = -1;
reconfigure = 0; rec_iter = 1; reconfigure = 0; rec_iter = 1; maxiter=100;
while ((computeData->iter < maxiter) && (computeData->tol > umbral)) { while ((computeData->iter < maxiter) && (computeData->tol > umbral)) {
...@@ -290,7 +290,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) { ...@@ -290,7 +290,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) {
computeData->iter++; computeData->iter++;
if (computeData->iter == rec_iter) { reconfigure = 1;} if (computeData->iter == rec_iter) { reconfigure = 1;}
if (reconfigure) { if (reconfigure) {
//dump(computeData); // dump(computeData);
MAM_Checkpoint(&state, MAM_CHECK_COMPLETION, user_func, (void *) user_data); MAM_Checkpoint(&state, MAM_CHECK_COMPLETION, user_func, (void *) user_data);
if(state == MAM_COMPLETED) { if(state == MAM_COMPLETED) {
reconfigure = 0; reconfigure = 0;
...@@ -298,7 +298,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) { ...@@ -298,7 +298,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) {
targets_update(computeData, user_data); targets_update(computeData, user_data);
sizeR = computeData->matL.dim1; sizeR = computeData->matL.dim1;
n_dist = sizeR; n_dist = sizeR;
//dump(computeData); // dump(computeData);
} }
} }
} }
...@@ -335,6 +335,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) { ...@@ -335,6 +335,7 @@ void BiCGStab_compute (Compute_data *computeData, user_redist_t *user_data) {
void BiCGStab_free (Compute_data *computeData) { void BiCGStab_free (Compute_data *computeData) {
RemoveDoubles (&computeData->x); RemoveDoubles (&computeData->b);
RemoveDoubles (&computeData->aux); RemoveDoubles (&computeData->s); RemoveDoubles (&computeData->aux); RemoveDoubles (&computeData->s);
RemoveDoubles (&computeData->q); RemoveDoubles (&computeData->r); RemoveDoubles (&computeData->q); RemoveDoubles (&computeData->r);
RemoveDoubles (&computeData->p); RemoveDoubles (&computeData->r0); RemoveDoubles (&computeData->y); RemoveDoubles (&computeData->p); RemoveDoubles (&computeData->r0); RemoveDoubles (&computeData->y);
...@@ -346,8 +347,6 @@ void BiCGStab_free (Compute_data *computeData) { ...@@ -346,8 +347,6 @@ void BiCGStab_free (Compute_data *computeData) {
RemoveDoubles (&computeData->res_err); RemoveDoubles (&computeData->x_exact); RemoveDoubles (&computeData->res_err); RemoveDoubles (&computeData->x_exact);
#endif #endif
RemoveDoubles (&computeData->x);
RemoveDoubles (&computeData->b);
RemoveInts (&computeData->sizes); RemoveInts (&computeData->dspls); RemoveInts (&computeData->sizes); RemoveInts (&computeData->dspls);
RemoveInts (&computeData->vlen); RemoveInts (&computeData->vlen);
if (computeData->isOriginal) { if (computeData->isOriginal) {
...@@ -366,7 +365,8 @@ int main (int argc, char **argv) { ...@@ -366,7 +365,8 @@ int main (int argc, char **argv) {
int index = 0, indexL = 0; int index = 0, indexL = 0;
SparseMatrix mat = {0, 0, NULL, NULL, NULL}, sym = {0, 0, NULL, NULL, NULL}; SparseMatrix mat = {0, 0, NULL, NULL, NULL}, sym = {0, 0, NULL, NULL, NULL};
int root = 0, myId, nProcs, isTarget, numTarget, req; int root = 0, myId, nProcs;
int isTarget, numTarget, req, initNumP;
int dimL, dspL, *vdimL = NULL, *vdspL = NULL; int dimL, dspL, *vdimL = NULL, *vdspL = NULL;
SparseMatrix matL = {0, 0, NULL, NULL, NULL}; SparseMatrix matL = {0, 0, NULL, NULL, NULL};
double *sol1L = NULL, *sol2L = NULL; double *sol1L = NULL, *sol2L = NULL;
...@@ -391,6 +391,7 @@ int main (int argc, char **argv) { ...@@ -391,6 +391,7 @@ int main (int argc, char **argv) {
computeData.myId = myId; computeData.myId = myId;
computeData.numP = nProcs; computeData.numP = nProcs;
computeData.comm = MPI_COMM_WORLD; computeData.comm = MPI_COMM_WORLD;
initNumP = computeData.numP;
user_data = empty_user_data; user_data = empty_user_data;
user_data.comm = computeData.comm; user_data.comm = computeData.comm;
...@@ -400,7 +401,7 @@ int main (int argc, char **argv) { ...@@ -400,7 +401,7 @@ int main (int argc, char **argv) {
if(isTarget) { if(isTarget) {
targets_update(&computeData, &user_data); targets_update(&computeData, &user_data);
computeData.isOriginal = 0; computeData.isOriginal = 0;
//dump(&computeData); // dump(&computeData);
} else { } else {
/***************************************/ /***************************************/
if (argc == 4) { if (argc == 4) {
...@@ -414,7 +415,7 @@ int main (int argc, char **argv) { ...@@ -414,7 +415,7 @@ int main (int argc, char **argv) {
} }
/***************************************/ /***************************************/
printf ("A\n"); // printf ("A\n");
CreateInts (&vdimL, nProcs); CreateInts (&vdspL, nProcs); CreateInts (&vdimL, nProcs); CreateInts (&vdspL, nProcs);
if(mat_from_file) { if(mat_from_file) {
if (myId == root) { if (myId == root) {
...@@ -431,7 +432,7 @@ int main (int argc, char **argv) { ...@@ -431,7 +432,7 @@ int main (int argc, char **argv) {
RemoveSparseMatrix (&mat); RemoveSparseMatrix (&mat);
RemoveSparseMatrix (&sym); RemoveSparseMatrix (&sym);
} }
printf ("B\n"); // printf ("B\n");
} }
else { else {
dim = size_param * size_param * size_param; dim = size_param * size_param * size_param;
...@@ -466,7 +467,7 @@ int main (int argc, char **argv) { ...@@ -466,7 +467,7 @@ int main (int argc, char **argv) {
/***************************************/ /***************************************/
printf ("C\n"); // printf ("C\n");
beta = 1.0 / sqrt(dim); beta = 1.0 / sqrt(dim);
if(mat_from_file) { if(mat_from_file) {
...@@ -486,11 +487,11 @@ int main (int argc, char **argv) { ...@@ -486,11 +487,11 @@ int main (int argc, char **argv) {
} }
} }
printf ("D\n"); // printf ("D\n");
// MPI_Scatterv (sol2, vdimL, vdspL, MPI_DOUBLE, sol2L, dimL, MPI_DOUBLE, root, MPI_COMM_WORLD); //FIXME It does not seem to do anything // MPI_Scatterv (sol2, vdimL, vdspL, MPI_DOUBLE, sol2L, dimL, MPI_DOUBLE, root, MPI_COMM_WORLD); //FIXME It does not seem to do anything
printf ("E\n"); // printf ("E\n");
computeData.sizes = vdimL; computeData.sizes = vdimL;
computeData.my_size = dimL; computeData.my_size = dimL;
computeData.dspls = vdspL; computeData.dspls = vdspL;
...@@ -529,16 +530,22 @@ int main (int argc, char **argv) { ...@@ -529,16 +530,22 @@ int main (int argc, char **argv) {
// } // }
beta = sqrt(beta); beta = sqrt(beta);
if (computeData.myId == 0) if (computeData.myId == 0) {
printf ("Error: %20.10e\n", beta); printf ("Error: %20.10e\n", beta);
print_global_results(computeData.t1);
}
/***************************************/ /***************************************/
// Freeing memory // Freeing memory
BiCGStab_free (&computeData); BiCGStab_free (&computeData);
RemoveDoubles (&sol2); RemoveDoubles (&sol2);
MAM_Finalize ();
if(initNumP > numTarget && computeData.myId == 0) {
MPI_Abort(MPI_COMM_WORLD, -100);
}
if(computeData.comm != MPI_COMM_WORLD && computeData.comm != MPI_COMM_NULL) MPI_Comm_free(&(computeData.comm)); if(computeData.comm != MPI_COMM_WORLD && computeData.comm != MPI_COMM_NULL) MPI_Comm_free(&(computeData.comm));
MAM_Finalize ();
MPI_Finalize (); MPI_Finalize ();
return 0; return 0;
......
...@@ -277,6 +277,6 @@ void print_global_results(double start_time) { ...@@ -277,6 +277,6 @@ void print_global_results(double start_time) {
printf("T_spawn: %lf", sp_time); printf("T_spawn: %lf", sp_time);
printf("\nT_SR: %lf", sy_time); printf("\nT_SR: %lf", sy_time);
printf("\nT_AR: %lf", asy_time); printf("\nT_AR: %lf", asy_time);
printf("\nT_Malleability: %lf", mall_time); printf("\nT_Malleability: %lf\n", mall_time);
printf("\nT_total: %lf\n", global_time); //printf("T_total: %lf\n", global_time);
} }
...@@ -30,5 +30,6 @@ static const user_redist_t empty_user_data = { ...@@ -30,5 +30,6 @@ static const user_redist_t empty_user_data = {
extern void targets_distribution(mam_user_reconf_t user_reconf, user_redist_t *user_data); extern void targets_distribution(mam_user_reconf_t user_reconf, user_redist_t *user_data);
//extern void targets_distribution_synch(mam_user_reconf_t user_reconf, user_redist_t *user_data); //extern void targets_distribution_synch(mam_user_reconf_t user_reconf, user_redist_t *user_data);
extern void print_global_results(double start_time);
#endif #endif
...@@ -154,13 +154,13 @@ int ComputeSprMatrixRecvWeights (int prc_src, int dimL, MPI_Comm comm) { ...@@ -154,13 +154,13 @@ int ComputeSprMatrixRecvWeights (int prc_src, int dimL, MPI_Comm comm) {
int tam, tam_int, tam_double, tam_ub; int tam, tam_int, tam_double, tam_ub;
MPI_Status sta; MPI_Status sta;
// Definition of sizes // Definition of sizes
MPI_Type_size(MPI_INT, &tam_int); MPI_Type_size(MPI_INT, &tam_int);
MPI_Type_size(MPI_DOUBLE, &tam_double); MPI_Type_size(MPI_DOUBLE, &tam_double);
MPI_Type_size(MPI_UB, &tam_ub); MPI_Type_size(MPI_UB, &tam_ub);
MPI_Probe (prc_src, Tag_Send_Packet_Matrix_To_Leaf, comm, &sta); MPI_Probe (prc_src, Tag_Send_Packet_Matrix_To_Leaf, comm, &sta);
MPI_Get_count (&sta, MPI_BYTE, &tam); MPI_Get_count (&sta, MPI_BYTE, &tam);
// Return the number of nonzeros included in a packet // Return the number of nonzeros included in a packet
return (tam - (dimL*tam_int + tam_ub)) / (tam_int + tam_double); return (tam - (dimL*tam_int + tam_ub)) / (tam_int + tam_double);
} }
...@@ -175,7 +175,7 @@ int DistributeMatrix (SparseMatrix spr, int index, ptr_SparseMatrix sprL, int in ...@@ -175,7 +175,7 @@ int DistributeMatrix (SparseMatrix spr, int index, ptr_SparseMatrix sprL, int in
// Getiing the parameter of the communicator // Getiing the parameter of the communicator
MPI_Comm_rank(comm, &myId); MPI_Comm_size(comm, &nProcs); MPI_Comm_rank(comm, &myId); MPI_Comm_size(comm, &nProcs);
// Broadcasting the matrix dimension // Broadcasting the matrix dimension
MPI_Bcast (&dim, 1, MPI_INT, root, MPI_COMM_WORLD); MPI_Bcast (&dim, 1, MPI_INT, root, comm);
// Calculating the vectors of sizes (vdimL) and displacements (vdspl) // Calculating the vectors of sizes (vdimL) and displacements (vdspl)
divL = (dim / nProcs); rstL = (dim % nProcs); divL = (dim / nProcs); rstL = (dim % nProcs);
......
...@@ -23,8 +23,7 @@ ...@@ -23,8 +23,7 @@
# ============================================================ # ============================================================
DIR = /home/martini/mam_bicgstab DIR = /home/martini/mam_bicgstab
APP = malleability/build APP = malleability/build
MAMFLAGS = -I$(DIR)/malleability -L$(DIR)/$(APP) -lmam MAMFLAGS = -I$(DIR)/malleability -L$(DIR)/$(APP) -Wl,-rpath=$(DIR)/$(APP) -lmam
#-Wl,-rpath=$(DIR)/$(APP)
CC = mpicc CC = mpicc
CFLAGS = -std=c++11 -mavx -fabi-version=0 -Wall -fopenmp -I. -I${MKLROOT}/include -I${HOME}/libs CFLAGS = -std=c++11 -mavx -fabi-version=0 -Wall -fopenmp -I. -I${MKLROOT}/include -I${HOME}/libs
......
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