From: Frederic Suter Date: Fri, 3 Mar 2017 12:51:44 +0000 (+0100) Subject: Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid X-Git-Tag: v3_15~232 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/00e649212cc6ca64c4cb8103e4c5bb4b98d2ff3f?hp=4f018f8c56a2adf782d9394dbb7ca34ea5bd7596 Merge branch 'master' of git+ssh://scm.gforge.inria.fr//gitroot/simgrid/simgrid --- diff --git a/src/smpi/smpi_base.cpp b/src/smpi/smpi_base.cpp index 59f3d3ad3f..cd9ae5b301 100644 --- a/src/smpi/smpi_base.cpp +++ b/src/smpi/smpi_base.cpp @@ -1338,7 +1338,8 @@ void smpi_mpi_allreduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype da void smpi_mpi_scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) { int system_tag = -888; - MPI_Aint lb = 0, dataext = 0; + MPI_Aint lb = 0; + MPI_Aint dataext = 0; int rank = smpi_comm_rank(comm); int size = smpi_comm_size(comm); @@ -1397,7 +1398,8 @@ void smpi_mpi_scan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatyp void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm) { int system_tag = -888; - MPI_Aint lb = 0, dataext = 0; + MPI_Aint lb = 0; + MPI_Aint dataext = 0; int recvbuf_is_empty=1; int rank = smpi_comm_rank(comm); int size = smpi_comm_size(comm); @@ -1419,6 +1421,7 @@ void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datat } // Wait for completion of all comms. smpi_mpi_startall(size - 1, requests); + if(smpi_op_is_commute(op)){ for (int other = 0; other < size - 1; other++) { index = smpi_mpi_waitany(size - 1, requests, MPI_STATUS_IGNORE); @@ -1439,11 +1442,11 @@ void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datat for (int other = 0; other < size - 1; other++) { smpi_mpi_wait(&(requests[other]), MPI_STATUS_IGNORE); if(index < rank) { - if(recvbuf_is_empty){ - smpi_datatype_copy(tmpbufs[other], count, datatype, recvbuf, count, datatype); - recvbuf_is_empty=0; - } else - smpi_op_apply(op, tmpbufs[other], recvbuf, &count, &datatype); + if (recvbuf_is_empty) { + smpi_datatype_copy(tmpbufs[other], count, datatype, recvbuf, count, datatype); + recvbuf_is_empty = 0; + } else + smpi_op_apply(op, tmpbufs[other], recvbuf, &count, &datatype); } } } diff --git a/src/smpi/smpi_mpi_dt.cpp b/src/smpi/smpi_mpi_dt.cpp index 630ca733df..cc01776fff 100644 --- a/src/smpi/smpi_mpi_dt.cpp +++ b/src/smpi/smpi_mpi_dt.cpp @@ -4,16 +4,17 @@ /* 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 -#include -#include -#include +#include "mc/mc.h" #include "private.h" +#include "simgrid/modelchecker.h" #include "smpi_mpi_dt_private.h" -#include "mc/mc.h" #include "xbt/replay.h" +#include +#include +#include +#include +#include #include -#include "simgrid/modelchecker.h" XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi_mpi_dt, smpi, "Logging specific to SMPI (datatype)"); @@ -187,15 +188,15 @@ int smpi_datatype_dup(MPI_Datatype datatype, MPI_Datatype* new_t) if(datatype->attributes !=nullptr){ (*new_t)->attributes = xbt_dict_new_homogeneous(nullptr); xbt_dict_cursor_t cursor = nullptr; - int* key; + char* key; int flag; void* value_in; void* value_out; xbt_dict_foreach (datatype->attributes, cursor, key, value_in) { - smpi_type_key_elem elem = static_cast( - xbt_dict_get_or_null_ext(smpi_type_keyvals, reinterpret_cast(key), sizeof(int))); + smpi_type_key_elem elem = + static_cast(xbt_dict_get_or_null_ext(smpi_type_keyvals, key, sizeof(int))); if (elem != nullptr && elem->copy_fn != MPI_NULL_COPY_FN) { - ret = elem->copy_fn(datatype, *key, nullptr, value_in, &value_out, &flag); + ret = elem->copy_fn(datatype, atoi(key), nullptr, value_in, &value_out, &flag); if (ret != MPI_SUCCESS) { smpi_datatype_unuse(*new_t); *new_t = MPI_DATATYPE_NULL; @@ -203,7 +204,7 @@ int smpi_datatype_dup(MPI_Datatype datatype, MPI_Datatype* new_t) return ret; } if (flag) - xbt_dict_set_ext((*new_t)->attributes, reinterpret_cast(key), sizeof(int), value_out, nullptr); + xbt_dict_set_ext((*new_t)->attributes, key, sizeof(int), value_out, nullptr); } } } @@ -400,12 +401,12 @@ void smpi_datatype_free(MPI_Datatype* type){ if((*type)->attributes !=nullptr){ xbt_dict_cursor_t cursor = nullptr; - int* key; + char* key; void * value; int flag; xbt_dict_foreach((*type)->attributes, cursor, key, value){ smpi_type_key_elem elem = - static_cast(xbt_dict_get_or_null_ext(smpi_type_keyvals, reinterpret_cast(key), sizeof(int))); + static_cast(xbt_dict_get_or_null_ext(smpi_type_keyvals, key, sizeof(int))); if(elem!=nullptr && elem->delete_fn!=nullptr) elem->delete_fn(*type,*key, value, &flag); } @@ -700,11 +701,10 @@ int smpi_datatype_hvector(int count, int blocklen, MPI_Aint stride, MPI_Datatype void serialize_indexed( void* noncontiguous_indexed, void *contiguous_indexed, int count, void *type) { s_smpi_mpi_indexed_t* type_c = reinterpret_cast(type); - int i,j; char* contiguous_indexed_char = static_cast(contiguous_indexed); char* noncontiguous_indexed_char = static_cast(noncontiguous_indexed)+type_c->block_indices[0] * type_c->size_oldtype; - for(j=0; jblock_count; i++) { + for (int j = 0; j < count; j++) { + for (int i = 0; i < type_c->block_count; i++) { if (type_c->old_type->sizeof_substruct == 0) memcpy(contiguous_indexed_char, noncontiguous_indexed_char, type_c->block_lengths[i] * type_c->size_oldtype); else @@ -734,12 +734,11 @@ void serialize_indexed( void* noncontiguous_indexed, void *contiguous_indexed, i void unserialize_indexed( void* contiguous_indexed, void *noncontiguous_indexed, int count, void *type, MPI_Op op) { s_smpi_mpi_indexed_t* type_c = reinterpret_cast(type); - int i,j; char* contiguous_indexed_char = static_cast(contiguous_indexed); char* noncontiguous_indexed_char = static_cast(noncontiguous_indexed)+type_c->block_indices[0]*smpi_datatype_get_extent(type_c->old_type); - for(j=0; jblock_count; i++) { + for (int j = 0; j < count; j++) { + for (int i = 0; i < type_c->block_count; i++) { if (type_c->old_type->sizeof_substruct == 0) smpi_op_apply(op, contiguous_indexed_char, noncontiguous_indexed_char, &type_c->block_lengths[i], &type_c->old_type); @@ -784,8 +783,7 @@ s_smpi_mpi_indexed_t* smpi_datatype_indexed_create( int* block_lengths, int* blo new_t->base.subtype_use = &use_indexed; new_t->block_lengths= xbt_new(int, block_count); new_t->block_indices= xbt_new(int, block_count); - int i; - for(i=0;iblock_lengths[i]=block_lengths[i]; new_t->block_indices[i]=block_indices[i]; } @@ -798,8 +796,6 @@ s_smpi_mpi_indexed_t* smpi_datatype_indexed_create( int* block_lengths, int* blo int smpi_datatype_indexed(int count, int* blocklens, int* indices, MPI_Datatype old_type, MPI_Datatype* new_type) { - int i; - int retval; int size = 0; bool contiguous=true; MPI_Aint lb = 0; @@ -809,8 +805,8 @@ int smpi_datatype_indexed(int count, int* blocklens, int* indices, MPI_Datatype ub=indices[0]*smpi_datatype_get_extent(old_type) + blocklens[0]*smpi_datatype_ub(old_type); } - for(i=0; i< count; i++){ - if (blocklens[i]<0) + for (int i = 0; i < count; i++) { + if (blocklens[i] < 0) return MPI_ERR_ARG; size += blocklens[i]; @@ -835,8 +831,7 @@ int smpi_datatype_indexed(int count, int* blocklens, int* indices, MPI_Datatype smpi_datatype_create(new_type, size * smpi_datatype_size(old_type), lb, ub, sizeof(s_smpi_mpi_contiguous_t), subtype, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS); } - retval=MPI_SUCCESS; - return retval; + return MPI_SUCCESS; } /* Hindexed Implementation - Indexed with indices in bytes */ @@ -851,11 +846,10 @@ int smpi_datatype_indexed(int count, int* blocklens, int* indices, MPI_Datatype void serialize_hindexed( void* noncontiguous_hindexed, void *contiguous_hindexed, int count, void *type) { s_smpi_mpi_hindexed_t* type_c = reinterpret_cast(type); - int i,j; char* contiguous_hindexed_char = static_cast(contiguous_hindexed); char* noncontiguous_hindexed_char = static_cast(noncontiguous_hindexed)+ type_c->block_indices[0]; - for(j=0; jblock_count; i++) { + for (int j = 0; j < count; j++) { + for (int i = 0; i < type_c->block_count; i++) { if (type_c->old_type->sizeof_substruct == 0) memcpy(contiguous_hindexed_char, noncontiguous_hindexed_char, type_c->block_lengths[i] * type_c->size_oldtype); else @@ -885,12 +879,11 @@ void unserialize_hindexed( void* contiguous_hindexed, void *noncontiguous_hindex MPI_Op op) { s_smpi_mpi_hindexed_t* type_c = reinterpret_cast(type); - int i,j; char* contiguous_hindexed_char = static_cast(contiguous_hindexed); char* noncontiguous_hindexed_char = static_cast(noncontiguous_hindexed)+ type_c->block_indices[0]; - for(j=0; jblock_count; i++) { + for (int j = 0; j < count; j++) { + for (int i = 0; i < type_c->block_count; i++) { if (type_c->old_type->sizeof_substruct == 0) smpi_op_apply(op, contiguous_hindexed_char, noncontiguous_hindexed_char, &type_c->block_lengths[i], &type_c->old_type); @@ -947,8 +940,6 @@ s_smpi_mpi_hindexed_t* smpi_datatype_hindexed_create( int* block_lengths, MPI_Ai int smpi_datatype_hindexed(int count, int* blocklens, MPI_Aint* indices, MPI_Datatype old_type, MPI_Datatype* new_type) { - int i; - int retval; int size = 0; bool contiguous=true; MPI_Aint lb = 0; @@ -957,8 +948,8 @@ int smpi_datatype_hindexed(int count, int* blocklens, MPI_Aint* indices, MPI_Dat lb=indices[0] + smpi_datatype_lb(old_type); ub=indices[0] + blocklens[0]*smpi_datatype_ub(old_type); } - for(i=0; i< count; i++){ - if (blocklens[i]<0) + for (int i = 0; i < count; i++) { + if (blocklens[i] < 0) return MPI_ERR_ARG; size += blocklens[i]; @@ -982,8 +973,7 @@ int smpi_datatype_hindexed(int count, int* blocklens, MPI_Aint* indices, MPI_Dat smpi_datatype_create(new_type, size * smpi_datatype_size(old_type), 0,size * smpi_datatype_size(old_type), 1, subtype, DT_FLAG_DATA|DT_FLAG_CONTIGUOUS); } - retval=MPI_SUCCESS; - return retval; + return MPI_SUCCESS; } /* struct Implementation - Indexed with indices in bytes */ @@ -999,11 +989,10 @@ int smpi_datatype_hindexed(int count, int* blocklens, MPI_Aint* indices, MPI_Dat void serialize_struct( void* noncontiguous_struct, void *contiguous_struct, int count, void *type) { s_smpi_mpi_struct_t* type_c = reinterpret_cast(type); - int i,j; char* contiguous_struct_char = static_cast(contiguous_struct); char* noncontiguous_struct_char = static_cast(noncontiguous_struct)+ type_c->block_indices[0]; - for(j=0; jblock_count; i++) { + for (int j = 0; j < count; j++) { + for (int i = 0; i < type_c->block_count; i++) { if (type_c->old_types[i]->sizeof_substruct == 0) memcpy(contiguous_struct_char, noncontiguous_struct_char, type_c->block_lengths[i] * smpi_datatype_size(type_c->old_types[i])); @@ -1035,12 +1024,11 @@ void serialize_struct( void* noncontiguous_struct, void *contiguous_struct, int void unserialize_struct( void* contiguous_struct, void *noncontiguous_struct, int count, void *type, MPI_Op op) { s_smpi_mpi_struct_t* type_c = reinterpret_cast(type); - int i,j; char* contiguous_struct_char = static_cast(contiguous_struct); char* noncontiguous_struct_char = static_cast(noncontiguous_struct)+ type_c->block_indices[0]; - for(j=0; jblock_count; i++) { + for (int j = 0; j < count; j++) { + for (int i = 0; i < type_c->block_count; i++) { if (type_c->old_types[i]->sizeof_substruct == 0) smpi_op_apply(op, contiguous_struct_char, noncontiguous_struct_char, &type_c->block_lengths[i], & type_c->old_types[i]); @@ -1061,8 +1049,7 @@ void unserialize_struct( void* contiguous_struct, void *noncontiguous_struct, in } void free_struct(MPI_Datatype* type){ - int i=0; - for (i = 0; i < reinterpret_cast((*type)->substruct)->block_count; i++) + for (int i = 0; i < reinterpret_cast((*type)->substruct)->block_count; i++) smpi_datatype_unuse(reinterpret_cast((*type)->substruct)->old_types[i]); if((*type)->in_use==0){ xbt_free(reinterpret_cast((*type)->substruct)->block_lengths); @@ -1072,8 +1059,7 @@ void free_struct(MPI_Datatype* type){ } void use_struct(MPI_Datatype* type){ - int i=0; - for (i = 0; i < reinterpret_cast((*type)->substruct)->block_count; i++) + for (int i = 0; i < reinterpret_cast((*type)->substruct)->block_count; i++) smpi_datatype_use(reinterpret_cast((*type)->substruct)->old_types[i]); } @@ -1090,8 +1076,7 @@ s_smpi_mpi_struct_t* smpi_datatype_struct_create( int* block_lengths, MPI_Aint* new_t->block_lengths= xbt_new(int, block_count); new_t->block_indices= xbt_new(MPI_Aint, block_count); new_t->old_types= xbt_new(MPI_Datatype, block_count); - int i; - for(i=0;iblock_lengths[i]=block_lengths[i]; new_t->block_indices[i]=block_indices[i]; new_t->old_types[i]=old_types[i]; @@ -1103,7 +1088,6 @@ s_smpi_mpi_struct_t* smpi_datatype_struct_create( int* block_lengths, MPI_Aint* int smpi_datatype_struct(int count, int* blocklens, MPI_Aint* indices, MPI_Datatype* old_types, MPI_Datatype* new_type) { - int i; size_t size = 0; bool contiguous=true; size = 0; @@ -1115,7 +1099,7 @@ int smpi_datatype_struct(int count, int* blocklens, MPI_Aint* indices, MPI_Datat } bool forced_lb=false; bool forced_ub=false; - for(i=0; i< count; i++){ + for (int i = 0; i < count; i++) { if (blocklens[i]<0) return MPI_ERR_ARG; if (old_types[i]->sizeof_substruct != 0) @@ -1363,8 +1347,7 @@ CREATE_MPI_OP(MPI_REPLACE, replace_func); MPI_Op smpi_op_new(MPI_User_function * function, bool commute) { - MPI_Op op; - op = xbt_new(s_smpi_mpi_op_t, 1); + MPI_Op op = xbt_new(s_smpi_mpi_op_t, 1); op->func = function; op-> is_commute = commute; op-> is_fortran_op = false; diff --git a/src/smpi/smpi_rma.cpp b/src/smpi/smpi_rma.cpp index 30278c8acc..159bbc1c9a 100644 --- a/src/smpi/smpi_rma.cpp +++ b/src/smpi/smpi_rma.cpp @@ -28,13 +28,11 @@ typedef struct s_smpi_mpi_win{ MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm){ - MPI_Win win; - int comm_size = smpi_comm_size(comm); - int rank=smpi_comm_rank(comm); + int rank = smpi_comm_rank(comm); XBT_DEBUG("Creating window"); - win = xbt_new(s_smpi_mpi_win_t, 1); + MPI_Win win = xbt_new(s_smpi_mpi_win_t, 1); win->base = base; win->size = size; win->disp_unit = disp_unit; @@ -278,17 +276,18 @@ int smpi_mpi_win_start(MPI_Group group, int assert, MPI_Win win){ must complete, without further dependencies. */ //naive, blocking implementation. - int i=0,j=0; - int size = smpi_group_size(group); - MPI_Request* reqs = xbt_new0(MPI_Request, size); - - while(j!=size){ - int src=smpi_group_index(group,j); - if(src!=smpi_process_index()&& src!=MPI_UNDEFINED){ - reqs[i]=smpi_irecv_init(nullptr, 0, MPI_CHAR, src,SMPI_RMA_TAG+4, MPI_COMM_WORLD); - i++; - } - j++; + int i = 0; + int j = 0; + int size = smpi_group_size(group); + MPI_Request* reqs = xbt_new0(MPI_Request, size); + + while (j != size) { + int src = smpi_group_index(group, j); + if (src != smpi_process_index() && src != MPI_UNDEFINED) { + reqs[i] = smpi_irecv_init(nullptr, 0, MPI_CHAR, src, SMPI_RMA_TAG + 4, MPI_COMM_WORLD); + i++; + } + j++; } size=i; smpi_mpi_startall(size, reqs); @@ -305,7 +304,8 @@ int smpi_mpi_win_start(MPI_Group group, int assert, MPI_Win win){ int smpi_mpi_win_post(MPI_Group group, int assert, MPI_Win win){ //let's make a synchronous send here - int i=0,j=0; + int i = 0; + int j = 0; int size = smpi_group_size(group); MPI_Request* reqs = xbt_new0(MPI_Request, size); @@ -336,7 +336,8 @@ int smpi_mpi_win_complete(MPI_Win win){ xbt_die("Complete called on already opened MPI_Win"); XBT_DEBUG("Entering MPI_Win_Complete"); - int i=0,j=0; + int i = 0; + int j = 0; int size = smpi_group_size(win->group); MPI_Request* reqs = xbt_new0(MPI_Request, size); diff --git a/src/surf/cpu_interface.cpp b/src/surf/cpu_interface.cpp index 768c4190f0..4e42b2199e 100644 --- a/src/surf/cpu_interface.cpp +++ b/src/surf/cpu_interface.cpp @@ -46,16 +46,12 @@ void CpuModel::updateActionsStateLazy(double now, double /*delta*/) //without losing the event ascending order (considering all CPU's) double smaller = -1; ActionList *actionSet = getRunningActionSet(); - for(ActionList::iterator it(actionSet->begin()), itend(actionSet->end()) - ; it != itend ; ++it) { + ActionList::iterator it(actionSet->begin()); + ActionList::iterator itend(actionSet->end()); + for (; it != itend; ++it) { CpuAction *action = static_cast(&*it); - if (smaller < 0) { - smaller = action->getLastUpdate(); - continue; - } - if (action->getLastUpdate() < smaller) { - smaller = action->getLastUpdate(); - } + if (smaller < 0 || action->getLastUpdate() < smaller) + smaller = action->getLastUpdate(); } if (smaller > 0) { TRACE_last_timestamp_to_dump = smaller; @@ -67,10 +63,9 @@ void CpuModel::updateActionsStateFull(double now, double delta) { CpuAction *action = nullptr; ActionList *running_actions = getRunningActionSet(); - - for(ActionList::iterator it(running_actions->begin()), itNext=it, itend(running_actions->end()) - ; it != itend ; it=itNext) { - ++itNext; + ActionList::iterator it(running_actions->begin()); + ActionList::iterator itend(running_actions->end()) for (; it != itend; ++it) + { action = static_cast(&*it); if (TRACE_is_enabled()) { Cpu *cpu = static_cast (lmm_constraint_id(lmm_get_cnst_from_var(getMaxminSystem(), action->getVariable(), 0)) );