From: Frederic Suter Date: Mon, 29 Feb 2016 13:05:33 +0000 (+0100) Subject: start to clean MM smpi example X-Git-Tag: v3_13~626 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/dae1dd8653d74810b1dce5ea941f2e4d214827d9 start to clean MM smpi example --- diff --git a/examples/smpi/MM/2.5D_MM.c b/examples/smpi/MM/2.5D_MM.c deleted file mode 100644 index 041342e8a0..0000000000 --- a/examples/smpi/MM/2.5D_MM.c +++ /dev/null @@ -1,285 +0,0 @@ -/* Copyright (c) 2012-2014. The SimGrid Team. - * All rights reserved. */ - -/* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. */ - -/*! - * 2.5D Block Matrix Multiplication example - * - */ - -#include "Matrix_init.h" -#include "Summa.h" -#include "2.5D_MM.h" -#include -#include -#include "xbt/log.h" -#define CHECK_25D 1 - - XBT_LOG_NEW_DEFAULT_CATEGORY(25D_MM, - "Messages specific for this msg example"); - -double two_dot_five( - size_t m, size_t k, size_t n, - size_t Block_size, size_t group, size_t key, - size_t size_row, size_t size_col, size_t NB_groups ){ - double *a, *b, *c; - double *res = NULL; - /* Split the communicator into groups */ - - /* Find out my identity in the default communicator */ - int myrank; - int NB_proc; - int err; - int useless = 0; - - - double time, communication_time = 0; - double start_time, end_time; //time mesure - double end_time_intern; //time mesure - double start_time_reduce, end_time_reduce; //time mesure - - MPI_Comm my_world; - - if ( group >= NB_groups ){ - XBT_DEBUG( - "Not enough group NB_groups : %zu my group id : %zu\n", - NB_groups, group); - MPI_Comm_split(MPI_COMM_WORLD, 0, key, &my_world); - return -1; - }else{ - MPI_Comm_split(MPI_COMM_WORLD, 1, key, &my_world); - } - - MPI_Comm_size (my_world, &NB_proc); - - if ( NB_proc < (int)(size_row*size_col*NB_groups) ){ - XBT_INFO( - "Not enough processors NB_proc : %d required : %zu\n", - NB_proc, size_row*size_col*NB_groups); - return -1; - } - - - - MPI_Comm group_comm; - MPI_Comm_split(my_world, group, key, &group_comm); - - MPI_Comm_rank(group_comm, &myrank); - MPI_Comm_size (group_comm, &NB_proc); - /* for each group start the execution of his */ - - - NB_proc=size_row*size_col; - size_t row = myrank / size_row; - size_t col = myrank % size_row; - - - - - /*-------------------------Check some mandatory conditions------------------*/ - size_t NB_Block = k / Block_size; - if ( k % Block_size != 0 ){ - XBT_INFO( - "The matrix size has to be proportionnal to the number\ - of blocks: %zu\n", NB_Block); - return -1; - } - - if ( size_row > NB_Block || size_col > NB_Block ){ - XBT_INFO( - "Number of blocks is too small compare to the number of" - " processors (%zu,%zu) in a row or a col (%zu)\n", - size_col, size_row, NB_Block); - return -1; - } - - if ( NB_Block % size_row != 0 || NB_Block % size_col != 0){ - XBT_INFO("The number of Block by processor is not an %s", - "integer\n"); - return -1; - } - - - - if(row >= size_col || col >= size_row){ - XBT_INFO( "I'm useless bye!!! col: %zu row: %zu, " - "size_col: %zu , size_row: %zu \n", - col,row,size_col,size_row); - useless = 1; - } - - - if(useless == 1){ - /*----------------------Prepare the Communication Layer-------------------*/ - /* add useless processor on a new color to execute the matrix - * multiplication with the other processors*/ - - /* Split comm size_to row and column comms */ - MPI_Comm row_comm, col_comm, group_line; - MPI_Comm_split(my_world, myrank, MPI_UNDEFINED, &group_line); - /* color by row, rank by column */ - MPI_Comm_split(group_comm, size_row, MPI_UNDEFINED, &row_comm); - /* color by column, rank by row */ - MPI_Comm_split(group_comm, size_col, MPI_UNDEFINED, &col_comm); - /*------------------------Communication Layer can be used-----------------*/ - - return 0; - } - XBT_DEBUG( "I'm initialized col: %zu row: %zu, " - "size_col: %zu , size_row: %zu, my rank: %d \n" - ,col,row,size_col,size_row, myrank); - - - - /*------------------------Initialize the matrices---------------------------*/ - - /* think about a common interface - * int pdgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, - * m, n, k, alpha, a, ia, ja, lda, b, ib, jb, ldb, - * beta, c, ldc, Comm, rank ); - */ - - /*------------------------Prepare the Communication Layer-------------------*/ - /* Split comm size_to row and column comms */ - MPI_Comm row_comm, col_comm, group_line; - MPI_Comm_split(my_world, myrank, group, &group_line); - /* color by row, rank by column */ - MPI_Comm_split(group_comm, row, col, &row_comm); - /* color by column, rank by row */ - MPI_Comm_split(group_comm, col, row, &col_comm); - /*-------------------------Communication Layer can be used------------------*/ - - // matrix sizes - m = m / size_col; - n = n / size_row; - size_t k_a = k / size_row; - size_t k_b = k / size_col; - - - - /*only on the group 0*/ - if( group == 0 ) { - matrices_initialisation(&a, &b, &c, m, k_a, k_b, n, row, col); - if( NB_groups > 1 ) res = malloc( sizeof(double)*m*n ); - } else matrices_allocation(&a, &b, &c, m, k_a, k_b, n); - - - /*-------------------Configuration for Summa algorihtm--------------------*/ - /*--------------------Allocation of matrices block-------------------------*/ - double *a_Summa, *b_Summa; - blocks_initialisation(&a_Summa, &b_Summa, m, Block_size, n); - - /*--------------------Communication types for MPI--------------------------*/ - MPI_Datatype Block_a; - MPI_Datatype Block_a_local; - MPI_Datatype Block_b; - MPI_Type_vector(m , Block_size, k_a, MPI_DOUBLE, &Block_a); - MPI_Type_vector(m , Block_size, Block_size, MPI_DOUBLE, &Block_a_local); - MPI_Type_vector(Block_size, n, n, MPI_DOUBLE, &Block_b); - MPI_Type_commit(&Block_a); - MPI_Type_commit(&Block_a_local); - MPI_Type_commit(&Block_b); - /*-------------Communication types for MPI are configured------------------*/ - - - - - MPI_Barrier(my_world); - start_time = MPI_Wtime(); - if( NB_groups > 1 ) { - err = MPI_Bcast(a, m*k_a, MPI_DOUBLE, 0, group_line); - if (err != MPI_SUCCESS) { - perror("Error Bcast A\n"); - return -1; - } - err = MPI_Bcast(b, n*k_b, MPI_DOUBLE, 0, group_line); - if (err != MPI_SUCCESS) { - perror("Error Bcast B\n"); - return -1; - } - MPI_Barrier(my_world); - } - end_time_intern = MPI_Wtime(); - communication_time += end_time_intern - start_time; - - XBT_INFO( "group %zu NB_block: %zu, NB_groups %zu\n" - ,group,NB_Block, NB_groups); - XBT_INFO( - "m %zu, k_a %zu, k_b %zu, n %zu, Block_size %zu, " - "group*NB_Block/NB_groups %zu, " - "(group+1)*NB_Block/NB_groups %zu, row %zu, col %zu," - "size_row %zu, size_col %zu\n" , - m, k_a, k_b, n, Block_size, - group*NB_Block/NB_groups, (group+1)*NB_Block/NB_groups, - row, col, size_row, size_col); - - - Summa( a, b, c, k_a, n, n, m, k_a, k_b, n, Block_size, - group*NB_Block/NB_groups, (group+1)*NB_Block/NB_groups, - row, col, size_row, size_col, a_Summa, b_Summa, Block_a, - Block_a_local, Block_b, row_comm, col_comm, 0); - - /*-------------------------End Summa algorihtm-----------------------------*/ - - MPI_Comm_rank(group_line, &myrank); - - MPI_Barrier(my_world); - start_time_reduce = MPI_Wtime(); - if( NB_groups > 1 ) { - // a gather is better? - err = MPI_Reduce(c, res, m*n, MPI_DOUBLE, MPI_SUM, 0, group_line); - if (err != MPI_SUCCESS) { - perror("Error Bcast A\n"); - return -1; - } - }else{ - double *swap= c; - c = res; - res=swap; - } - MPI_Barrier(my_world); - end_time_reduce = MPI_Wtime(); - - MPI_Barrier(my_world); - end_time = MPI_Wtime(); - time = end_time - start_time; - double reduce_time = end_time_reduce - start_time_reduce; - printf("communication time: %e reduce time: %e seconds, " - "total time: %e seconds\n",communication_time,reduce_time,time); - MPI_Barrier(my_world); - -#if CHECK_25D - if(myrank == 0) - check_result(res, a, b, m, n, k_a, k_b, row, col, size_row, size_col); -#endif - - // close properly the pragram - - MPI_Type_free(&Block_a); - MPI_Type_free(&Block_a_local); - MPI_Type_free(&Block_b); - - free(a_Summa); - free(b_Summa); - - - free( a ); - free( b ); - if( NB_groups > 1 ) { - free( c ); - } - free(res); - - MPI_Barrier(MPI_COMM_WORLD); - MPI_Comm_free(&my_world); - MPI_Comm_free(&group_comm); - MPI_Comm_free(&group_line); - MPI_Comm_free(&row_comm); - MPI_Comm_free(&col_comm); - return 0; -} - - - diff --git a/examples/smpi/MM/2.5D_MM.h b/examples/smpi/MM/2.5D_MM.h deleted file mode 100644 index 3415d6b29e..0000000000 --- a/examples/smpi/MM/2.5D_MM.h +++ /dev/null @@ -1,12 +0,0 @@ -/* Copyright (c) 2012, 2014. The SimGrid Team. - * All rights reserved. */ - -/* This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. */ - -#include -double two_dot_five( - size_t m, size_t k, size_t n, - size_t Block_size, size_t group, size_t key, - size_t size_row, size_t size_col, size_t NB_groups ); - diff --git a/examples/smpi/MM/CMakeLists.txt b/examples/smpi/MM/CMakeLists.txt index 4438eec075..02819baf17 100644 --- a/examples/smpi/MM/CMakeLists.txt +++ b/examples/smpi/MM/CMakeLists.txt @@ -3,21 +3,16 @@ if(enable_smpi) include_directories(BEFORE "${CMAKE_HOME_DIRECTORY}/include/smpi") if(NOT WIN32) - add_executable (MM_mpi MM_mpi.c 2.5D_MM.c Summa.c Matrix_init.c) + add_executable (MM_mpi MM_mpi.c Summa.c Matrix_init.c) target_link_libraries(MM_mpi simgrid) endif() endif() -set(tesh_files - ${tesh_files} - PARENT_SCOPE) set(examples_src ${examples_src} ${CMAKE_CURRENT_SOURCE_DIR}/MM_mpi.c - ${CMAKE_CURRENT_SOURCE_DIR}/2.5D_MM.c ${CMAKE_CURRENT_SOURCE_DIR}/Summa.c ${CMAKE_CURRENT_SOURCE_DIR}/Matrix_init.c - ${CMAKE_CURRENT_SOURCE_DIR}/2.5D_MM.h ${CMAKE_CURRENT_SOURCE_DIR}/Summa.h ${CMAKE_CURRENT_SOURCE_DIR}/Matrix_init.h PARENT_SCOPE) diff --git a/examples/smpi/MM/MM_mpi.c b/examples/smpi/MM/MM_mpi.c index ecaab74e8d..70974a37e8 100644 --- a/examples/smpi/MM/MM_mpi.c +++ b/examples/smpi/MM/MM_mpi.c @@ -4,33 +4,242 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -/* - * Block Matrix Multiplication example - * - */ +/* Block Matrix Multiplication example */ #include "Matrix_init.h" -#include "2.5D_MM.h" +#include "Summa.h" #include "xbt/log.h" #include -/*int sched_setaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask); - int sched_getaffinity(pid_t pid, size_t cpusetsize, cpu_set_t *mask); - */ #include #include #include #include #include - XBT_LOG_NEW_DEFAULT_CATEGORY(MM_mpi, - "Messages specific for this msg example"); +#define CHECK_25D 1 +XBT_LOG_NEW_DEFAULT_CATEGORY(MM_mpi, "Messages specific for this msg example"); +static double two_dot_five(size_t m, size_t k, size_t n, size_t Block_size, size_t group, size_t key, size_t size_row, + size_t size_col, size_t NB_groups ){ + double *a, *b, *c; + double *res = NULL; + /* Split the communicator into groups */ + + /* Find out my identity in the default communicator */ + int myrank; + int NB_proc; + int err; + int useless = 0; + + double time, communication_time = 0; + double start_time, end_time; //time mesure + double end_time_intern; //time mesure + double start_time_reduce, end_time_reduce; //time mesure + + MPI_Comm my_world; + + if ( group >= NB_groups ){ + XBT_DEBUG("Not enough group NB_groups : %zu my group id : %zu\n", NB_groups, group); + MPI_Comm_split(MPI_COMM_WORLD, 0, key, &my_world); + return -1; + }else{ + MPI_Comm_split(MPI_COMM_WORLD, 1, key, &my_world); + } + + MPI_Comm_size (my_world, &NB_proc); + + if ( NB_proc < (int)(size_row*size_col*NB_groups) ){ + XBT_INFO("Not enough processors NB_proc : %d required : %zu\n", NB_proc, size_row*size_col*NB_groups); + return -1; + } + + MPI_Comm group_comm; + MPI_Comm_split(my_world, group, key, &group_comm); + + MPI_Comm_rank(group_comm, &myrank); + MPI_Comm_size (group_comm, &NB_proc); + /* for each group start the execution of his */ + + NB_proc=size_row*size_col; + size_t row = myrank / size_row; + size_t col = myrank % size_row; + + /*-------------------------Check some mandatory conditions------------------*/ + size_t NB_Block = k / Block_size; + if ( k % Block_size != 0 ){ + XBT_INFO("The matrix size has to be proportionnal to the number of blocks: %zu\n", NB_Block); + return -1; + } + + if ( size_row > NB_Block || size_col > NB_Block ){ + XBT_INFO("Number of blocks is too small compare to the number of processors (%zu,%zu) in a row or a col (%zu)\n", + size_col, size_row, NB_Block); + return -1; + } + + if ( NB_Block % size_row != 0 || NB_Block % size_col != 0){ + XBT_INFO("The number of Block by processor is not an integer\n"); + return -1; + } + + if(row >= size_col || col >= size_row){ + XBT_INFO( "I'm useless bye!!! col: %zu row: %zu, size_col: %zu , size_row: %zu \n", col,row,size_col,size_row); + useless = 1; + } + + if(useless == 1){ + /*----------------------Prepare the Communication Layer-------------------*/ + /* add useless processor on a new color to execute the matrix + * multiplication with the other processors*/ + + /* Split comm size_to row and column comms */ + MPI_Comm row_comm, col_comm, group_line; + MPI_Comm_split(my_world, myrank, MPI_UNDEFINED, &group_line); + /* color by row, rank by column */ + MPI_Comm_split(group_comm, size_row, MPI_UNDEFINED, &row_comm); + /* color by column, rank by row */ + MPI_Comm_split(group_comm, size_col, MPI_UNDEFINED, &col_comm); + /*------------------------Communication Layer can be used-----------------*/ + + return 0; + } + XBT_DEBUG("I'm initialized col: %zu row: %zu, size_col: %zu , size_row: %zu, my rank: %d \n", col,row,size_col, + size_row, myrank); + + /*------------------------Initialize the matrices---------------------------*/ + /* think about a common interface + * int pdgemm( CblasRowMajor, CblasNoTrans, CblasNoTrans, m, n, k, alpha, a, ia, ja, lda, b, ib, jb, ldb, + * beta, c, ldc, Comm, rank ); + */ + + /*------------------------Prepare the Communication Layer-------------------*/ + /* Split comm size_to row and column comms */ + MPI_Comm row_comm, col_comm, group_line; + MPI_Comm_split(my_world, myrank, group, &group_line); + /* color by row, rank by column */ + MPI_Comm_split(group_comm, row, col, &row_comm); + /* color by column, rank by row */ + MPI_Comm_split(group_comm, col, row, &col_comm); + /*-------------------------Communication Layer can be used------------------*/ + + // matrix sizes + m = m / size_col; + n = n / size_row; + size_t k_a = k / size_row; + size_t k_b = k / size_col; + + /*only on the group 0*/ + if( group == 0 ) { + matrices_initialisation(&a, &b, &c, m, k_a, k_b, n, row, col); + if( NB_groups > 1 ) res = malloc( sizeof(double)*m*n ); + } else matrices_allocation(&a, &b, &c, m, k_a, k_b, n); + + /*-------------------Configuration for Summa algorihtm--------------------*/ + /*--------------------Allocation of matrices block-------------------------*/ + double *a_Summa, *b_Summa; + blocks_initialisation(&a_Summa, &b_Summa, m, Block_size, n); + + /*--------------------Communication types for MPI--------------------------*/ + MPI_Datatype Block_a; + MPI_Datatype Block_a_local; + MPI_Datatype Block_b; + MPI_Type_vector(m , Block_size, k_a, MPI_DOUBLE, &Block_a); + MPI_Type_vector(m , Block_size, Block_size, MPI_DOUBLE, &Block_a_local); + MPI_Type_vector(Block_size, n, n, MPI_DOUBLE, &Block_b); + MPI_Type_commit(&Block_a); + MPI_Type_commit(&Block_a_local); + MPI_Type_commit(&Block_b); + /*-------------Communication types for MPI are configured------------------*/ + + MPI_Barrier(my_world); + start_time = MPI_Wtime(); + if( NB_groups > 1 ) { + err = MPI_Bcast(a, m*k_a, MPI_DOUBLE, 0, group_line); + if (err != MPI_SUCCESS) { + perror("Error Bcast A\n"); + return -1; + } + err = MPI_Bcast(b, n*k_b, MPI_DOUBLE, 0, group_line); + if (err != MPI_SUCCESS) { + perror("Error Bcast B\n"); + return -1; + } + MPI_Barrier(my_world); + } + end_time_intern = MPI_Wtime(); + communication_time += end_time_intern - start_time; + + XBT_INFO( "group %zu NB_block: %zu, NB_groups %zu\n",group,NB_Block, NB_groups); + XBT_INFO("m %zu, k_a %zu, k_b %zu, n %zu, Block_size %zu, group*NB_Block/NB_groups %zu, " + "(group+1)*NB_Block/NB_groups %zu, row %zu, col %zu, size_row %zu, size_col %zu\n",m, k_a, k_b, n, + Block_size, group*NB_Block/NB_groups, (group+1)*NB_Block/NB_groups,row, col, size_row, size_col); + + + Summa(a, b, c, k_a, n, n, m, k_a, k_b, n, Block_size, group*NB_Block/NB_groups, (group+1)*NB_Block/NB_groups, + row, col, size_row, size_col, a_Summa, b_Summa, Block_a, Block_a_local, Block_b, row_comm, col_comm, 0); + + /*-------------------------End Summa algorihtm-----------------------------*/ + + MPI_Comm_rank(group_line, &myrank); + + MPI_Barrier(my_world); + start_time_reduce = MPI_Wtime(); + if( NB_groups > 1 ) { + // a gather is better? + err = MPI_Reduce(c, res, m*n, MPI_DOUBLE, MPI_SUM, 0, group_line); + if (err != MPI_SUCCESS) { + perror("Error Bcast A\n"); + return -1; + } + }else{ + double *swap= c; + c = res; + res=swap; + } + MPI_Barrier(my_world); + end_time_reduce = MPI_Wtime(); + + MPI_Barrier(my_world); + end_time = MPI_Wtime(); + time = end_time - start_time; + double reduce_time = end_time_reduce - start_time_reduce; + printf("communication time: %e reduce time: %e seconds, total time: %e seconds\n", communication_time, reduce_time, + time); + MPI_Barrier(my_world); + +#if CHECK_25D + if(myrank == 0) + check_result(res, a, b, m, n, k_a, k_b, row, col, size_row, size_col); +#endif + + // close properly the pragram + MPI_Type_free(&Block_a); + MPI_Type_free(&Block_a_local); + MPI_Type_free(&Block_b); + + free(a_Summa); + free(b_Summa); + + free( a ); + free( b ); + if( NB_groups > 1 ) { + free( c ); + } + free(res); + + MPI_Barrier(MPI_COMM_WORLD); + MPI_Comm_free(&my_world); + MPI_Comm_free(&group_comm); + MPI_Comm_free(&group_line); + MPI_Comm_free(&row_comm); + MPI_Comm_free(&col_comm); + return 0; +} int main(int argc, char ** argv) { - size_t m = 1024 , n = 1024 , k = 1024; size_t NB_Block = 16; size_t Block_size = k/NB_Block ; @@ -39,8 +248,6 @@ int main(int argc, char ** argv) y index on N Z index on K */ - - int myrank; int NB_proc; size_t row, col, size_row, size_col; //description: vitual processor topology @@ -50,7 +257,6 @@ int main(int argc, char ** argv) MPI_Init(&argc, &argv); /* Find out my identity in the default communicator */ - MPI_Comm_rank ( MPI_COMM_WORLD, &myrank ); MPI_Comm_size ( MPI_COMM_WORLD, &NB_proc ); @@ -65,8 +271,6 @@ int main(int argc, char ** argv) size_row = NB_proc/size_col; } - - // for the degub #if DEBUG_MPI size_t loop=1; while(loop==1); @@ -79,19 +283,17 @@ int main(int argc, char ** argv) while ((opt = getopt(argc, argv, "hr:c:M:N:K:B:G:g:k:P:")) != -1) { switch(opt) { case 'h': - XBT_INFO( - "Usage: mxm_cblas_test [options]\n" - " -M I M size (default: %zu)\n" - " -N I N size (default: %zu)\n" - " -K I K size (default: %zu)\n" - " -B I Block size on the k dimension (default: %zu)\n" - " -G I Number of processor groups (default: %zu)\n" - " -g I group index (default: %zu)\n" - " -k I group rank (default: %zu)\n" - " -r I processor row size (default: %zu)\n" - " -c I processor col size (default: %zu)\n" - " -h help\n", - m, n, k, Block_size, NB_groups, group, key, row, col); + XBT_INFO("Usage: mxm_cblas_test [options]\n" + " -M I M size (default: %zu)\n" + " -N I N size (default: %zu)\n" + " -K I K size (default: %zu)\n" + " -B I Block size on the k dimension (default: %zu)\n" + " -G I Number of processor groups (default: %zu)\n" + " -g I group index (default: %zu)\n" + " -k I group rank (default: %zu)\n" + " -r I processor row size (default: %zu)\n" + " -c I processor col size (default: %zu)\n" + " -h help\n", m, n, k, Block_size, NB_groups, group, key, row, col); return 0; case 'M': m = xbt_str_parse_int(optarg, "Invalid M size: %s"); @@ -120,26 +322,12 @@ int main(int argc, char ** argv) case 'c': size_col = xbt_str_parse_int(optarg, "Invalid processor col size: %s"); break; - /*case 'P': - str_mask = strdup(optarg); - break;*/ } } + two_dot_five( m, k, n, Block_size, group, key, size_row, size_col, NB_groups); - - - - - - // Defined the device if we use the GPU - //TODO explain parameters - - - two_dot_five( m, k, n, Block_size, group, key, - size_row, size_col, NB_groups); - - // close properly the pragram + // close properly the program MPI_Barrier(MPI_COMM_WORLD); MPI_Finalize(); return 0; diff --git a/examples/smpi/MM/Matrix_init.c b/examples/smpi/MM/Matrix_init.c index fe56602dec..3305772d15 100644 --- a/examples/smpi/MM/Matrix_init.c +++ b/examples/smpi/MM/Matrix_init.c @@ -8,38 +8,33 @@ #include #include #include "xbt/log.h" - XBT_LOG_NEW_DEFAULT_CATEGORY(MM_init, - "Messages specific for this msg example"); + XBT_LOG_NEW_DEFAULT_CATEGORY(MM_init, "Messages specific for this msg example"); #define _unused(x) ((void)x) - -void matrices_initialisation( double ** p_a, double ** p_b, double ** p_c, - size_t m, size_t k_a, size_t k_b, size_t n, - size_t row, size_t col) +void matrices_initialisation(double ** p_a, double ** p_b, double ** p_c, size_t m, size_t k_a, size_t k_b, size_t n, + size_t row, size_t col) { - - size_t x,y,z; + size_t x, y, z; size_t lda = k_a; size_t ldb = n; size_t ldc = n; - double *a, *b, *c; _unused(row); - a = malloc(sizeof(double) * m * k_a); + double *a = malloc(sizeof(double) * m * k_a); if ( a == 0 ){ perror("Error allocation Matrix A"); exit(-1); } - b = malloc(sizeof(double) * k_b * n); + double *b = malloc(sizeof(double) * k_b * n); if ( b == 0 ){ perror("Error allocation Matrix B"); exit(-1); } - c = malloc(sizeof(double) * m * n); + double *c = malloc(sizeof(double) * m * n); if ( c == 0 ){ perror("Error allocation Matrix C"); exit(-1); @@ -75,27 +70,23 @@ void matrices_initialisation( double ** p_a, double ** p_b, double ** p_c, } } -void matrices_allocation( double ** p_a, double ** p_b, double ** p_c, - size_t m, size_t k_a, size_t k_b, size_t n) +void matrices_allocation( double ** p_a, double ** p_b, double ** p_c, size_t m, size_t k_a, size_t k_b, size_t n) { - - double * a, *b, *c; - - a = malloc(sizeof(double) * m * k_a); + double *a = malloc(sizeof(double) * m * k_a); if ( a == 0 ){ perror("Error allocation Matrix A"); exit(-1); } - b = malloc(sizeof(double) * k_b * n); + double *b = malloc(sizeof(double) * k_b * n); if ( b == 0 ){ perror("Error allocation Matrix B"); exit(-1); } - c = malloc(sizeof(double) * m * n); + double *c = malloc(sizeof(double) * m * n); if ( c == 0 ){ perror("Error allocation Matrix C"); exit(-1); @@ -104,25 +95,22 @@ void matrices_allocation( double ** p_a, double ** p_b, double ** p_c, *p_a=a; *p_b =b; *p_c=c; - } -void blocks_initialisation( double ** p_a_local, double ** p_b_local, - size_t m, size_t B_k, size_t n) +void blocks_initialisation( double ** p_a_local, double ** p_b_local, size_t m, size_t B_k, size_t n) { size_t x,y,z; size_t lda = B_k; size_t ldb = n; - double * a_local, *b_local; - a_local = malloc(sizeof(double) * m * B_k); + double *a_local = malloc(sizeof(double) * m * B_k); if ( a_local == 0 ){ perror("Error allocation Matrix A"); exit(-1); } - b_local = malloc(sizeof(double) * B_k * n); + double *b_local = malloc(sizeof(double) * B_k * n); if ( b_local == 0 ){ perror("Error allocation Matrix B"); @@ -145,10 +133,8 @@ void blocks_initialisation( double ** p_a_local, double ** p_b_local, } } -void check_result(double *c, double *a, double *b, - size_t m, size_t n, size_t k_a, size_t k_b, - size_t row, size_t col, - size_t size_row, size_t size_col) +void check_result(double *c, double *a, double *b, size_t m, size_t n, size_t k_a, size_t k_b, + size_t row, size_t col, size_t size_row, size_t size_col) { size_t x,y; size_t ldc = n; @@ -162,7 +148,6 @@ void check_result(double *c, double *a, double *b, /* these variable could be use to check the result in function of the * matrix initialization */ - /*Display for checking */ #ifdef SIMPLE_MATRIX XBT_INFO("Value get : %f excepted %zu multiply by y\n", c[((int)m/2)*ldc+1],size_row*k_a ); @@ -179,11 +164,9 @@ void check_result(double *c, double *a, double *b, #endif { #ifdef SIMPLE_MATRIX - XBT_INFO( "%f\t%zu, y : %zu x : %zu \n", - c[x*ldc+y], size_row*k_a, y, x); + XBT_INFO( "%f\t%zu, y : %zu x : %zu \n", c[x*ldc+y], size_row*k_a, y, x); #else - XBT_INFO( "%f\t%zu, y : %zu x : %zu \n", - c[x*ldc+y], y*(size_col*m)*((size_col*m)-1)/2, y, x); + XBT_INFO( "%f\t%zu, y : %zu x : %zu \n", c[x*ldc+y], y*(size_col*m)*((size_col*m)-1)/2, y, x); #endif goto error_exit; } @@ -192,10 +175,6 @@ void check_result(double *c, double *a, double *b, XBT_INFO("result check: ok\n"); return; error_exit: - XBT_INFO("result check not ok\n" - "WARNING the test could be lead to some " - "errors ( precision with double )\n"); + XBT_INFO("result check not ok\nWARNING the test could be lead to some errors ( precision with double )\n"); return; } - - diff --git a/examples/smpi/MM/Summa.c b/examples/smpi/MM/Summa.c index cb51445097..3f907680a9 100644 --- a/examples/smpi/MM/Summa.c +++ b/examples/smpi/MM/Summa.c @@ -4,27 +4,19 @@ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ -/*! - * Classical Block Matrix Multiplication example - * - */ +/* Classical Block Matrix Multiplication example */ #include "Matrix_init.h" #include "Summa.h" #include "xbt/log.h" #include - XBT_LOG_NEW_DEFAULT_CATEGORY(MM_Summa, - "Messages specific for this msg example"); - -double Summa(double *a, double *b, double *c, - size_t lda, size_t ldb, size_t ldc, - size_t m, size_t k_a, size_t k_b, size_t n, - size_t Block_size, size_t start, size_t end, - size_t row, size_t col, size_t size_row, size_t size_col, - double *a_local, double *b_local, - MPI_Datatype Block_a, MPI_Datatype Block_a_local, - MPI_Datatype Block_b, +XBT_LOG_NEW_DEFAULT_CATEGORY(MM_Summa, "Messages specific for this msg example"); + +double Summa(double *a, double *b, double *c, size_t lda, size_t ldb, size_t ldc, + size_t m, size_t k_a, size_t k_b, size_t n, size_t Block_size, size_t start, size_t end, + size_t row, size_t col, size_t size_row, size_t size_col, double *a_local, double *b_local, + MPI_Datatype Block_a, MPI_Datatype Block_a_local, MPI_Datatype Block_b, MPI_Comm row_comm, MPI_Comm col_comm, int subs) { double *B_a , *B_b ; //matrix blocks @@ -41,14 +33,10 @@ double Summa(double *a, double *b, double *c, size_t lda_local = lda; size_t ldb_local = ldb; - double time, computation_time = 0, communication_time = 0; double start_time, end_time; //time mesure double start_time_intern, end_time_intern; //time mesure - - - start_time = MPI_Wtime(); /*-------------Distributed Matrix Multiplication algorithm-----------------*/ @@ -80,8 +68,7 @@ double Summa(double *a, double *b, double *c, pos_b = (iter % B_proc_col) * ldb * Block_size; } #endif - XBT_DEBUG( "pivot: %zu, iter: %zu, B_proc_col: %zu, " - "size_col:%zu, size_row: %zu\n", + XBT_DEBUG( "pivot: %zu, iter: %zu, B_proc_col: %zu, size_col:%zu, size_row: %zu\n", pivot_row, iter, B_proc_row,size_col,size_row); /* MPI_Barrier(row_comm);*/ /* MPI_Barrier(col_comm);*/ @@ -115,8 +102,7 @@ double Summa(double *a, double *b, double *c, if(size_col > 1){ if( pivot_row == row ){ B_b = b + pos_b; - XBT_DEBUG("sent B_b Block_size: %zu, pos:%zu \n", - ldb, pos_b); + XBT_DEBUG("sent B_b Block_size: %zu, pos:%zu \n", ldb, pos_b); }else{ B_b = b_local; XBT_DEBUG("recieve B_b %zu,%zu \n", Block_size,n); @@ -157,10 +143,7 @@ double Summa(double *a, double *b, double *c, end_time = MPI_Wtime(); time = end_time - start_time ; - printf("communication time: %e seconds, " - "computation time: %e seconds\n", - communication_time, computation_time); - + printf("communication time: %e seconds, computation time: %e seconds\n", communication_time, computation_time); return time; } diff --git a/examples/smpi/MM/Summa.h b/examples/smpi/MM/Summa.h index c0ce2480ed..03c9d577fb 100644 --- a/examples/smpi/MM/Summa.h +++ b/examples/smpi/MM/Summa.h @@ -5,14 +5,11 @@ * under the terms of the license (GNU LGPL) which comes with this package. */ #include -double Summa( - double *a, double *b, double *c, - size_t lda, size_t ldb, size_t ldc, +double Summa(double *a, double *b, double *c, size_t lda, size_t ldb, size_t ldc, size_t m, size_t k_a, size_t k_b, size_t n, size_t Block_size, size_t start, size_t end, size_t row, size_t col, size_t size_row, size_t size_col, double *a_local, double *b_local, - MPI_Datatype Block_a, MPI_Datatype Block_a_local, - MPI_Datatype Block_b, + MPI_Datatype Block_a, MPI_Datatype Block_a_local, MPI_Datatype Block_b, MPI_Comm row_comm, MPI_Comm col_comm, int subs); diff --git a/examples/smpi/MM/command_exemple b/examples/smpi/MM/command_exemple deleted file mode 100644 index 2cc9b7cbc2..0000000000 --- a/examples/smpi/MM/command_exemple +++ /dev/null @@ -1 +0,0 @@ -../../../smpi_script/bin/smpirun --cfg=smpi/running_power:2.1175E9 -np 2 -platform ../../platforms/cluster.xml -hostfile host ./MM_mpi diff --git a/tools/internal/check_dist_archive.exclude b/tools/internal/check_dist_archive.exclude index 7cae75e06d..1d51086913 100644 --- a/tools/internal/check_dist_archive.exclude +++ b/tools/internal/check_dist_archive.exclude @@ -26,7 +26,6 @@ + examples/msg/actions/NAS_LU_S_4/.* + examples/msg/chord/chord3\.xml -+ examples/smpi/MM/command_exemple + examples/smpi/MM/host + examples/smpi/NAS/.*