X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f9436b840852218b39dce22d6057b6f223168daa..bcb5cde966bef9e174da1c93cdb2158c0880a613:/src/smpi/smpi_pmpi.cpp diff --git a/src/smpi/smpi_pmpi.cpp b/src/smpi/smpi_pmpi.cpp index 523d8e6391..c48bdcf59e 100644 --- a/src/smpi/smpi_pmpi.cpp +++ b/src/smpi/smpi_pmpi.cpp @@ -3,6 +3,8 @@ /* 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 "simgrid/s4u/Engine.hpp" #include "simgrid/s4u/Host.hpp" #include "src/smpi/private.h" @@ -1015,10 +1017,10 @@ int PMPI_Ssend(void* buf, int count, MPI_Datatype datatype, int dst, int tag, MP extra->send_size = count*dt_size_send; TRACE_smpi_ptp_in(rank, rank, dst_traced, __FUNCTION__, extra); TRACE_smpi_send(rank, rank, dst_traced, tag,count*datatype->size()); - + simgrid::smpi::Request::ssend(buf, count, datatype, dst, tag, comm); retval = MPI_SUCCESS; - + TRACE_smpi_ptp_out(rank, rank, dst_traced, __FUNCTION__); } @@ -1044,7 +1046,7 @@ int PMPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype, int dst, }else if (dst >= comm->group()->size() || dst <0 || (src!=MPI_ANY_SOURCE && (src >= comm->group()->size() || src <0))){ retval = MPI_ERR_RANK; - } else if ((sendcount < 0 || recvcount<0) || + } else if ((sendcount < 0 || recvcount<0) || (sendbuf==nullptr && sendcount > 0) || (recvbuf==nullptr && recvcount>0)) { retval = MPI_ERR_COUNT; } else if((sendtag<0 && sendtag != MPI_ANY_TAG)||(recvtag<0 && recvtag != MPI_ANY_TAG)){ @@ -2099,9 +2101,8 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype extra->recvcounts = xbt_new(int, size); extra->sendcounts = xbt_new(int, size); int known = 0; - int dt_size_recv = 1; extra->datatype2 = encode_datatype(recvtype, &known); - dt_size_recv = recvtype->size(); + int dt_size_recv = recvtype->size(); void* sendtmpbuf = static_cast(sendbuf); int* sendtmpcounts = sendcounts; @@ -2126,8 +2127,7 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype } extra->datatype1 = encode_datatype(sendtmptype, &known); - int dt_size_send = 1; - dt_size_send = sendtmptype->size(); + int dt_size_send = sendtmptype->size(); for (i = 0; i < size; i++) { // copy data to avoid bad free extra->send_size += sendtmpcounts[i] * dt_size_send; @@ -2153,8 +2153,8 @@ int PMPI_Alltoallv(void* sendbuf, int* sendcounts, int* senddisps, MPI_Datatype int PMPI_Get_processor_name(char *name, int *resultlen) { - strncpy(name, SIMIX_host_self()->cname(), strlen(SIMIX_host_self()->cname()) < MPI_MAX_PROCESSOR_NAME - 1 - ? strlen(SIMIX_host_self()->cname()) + 1 + strncpy(name, sg_host_self()->getCname(), strlen(sg_host_self()->getCname()) < MPI_MAX_PROCESSOR_NAME - 1 + ? strlen(sg_host_self()->getCname()) + 1 : MPI_MAX_PROCESSOR_NAME - 1); *resultlen = strlen(name) > MPI_MAX_PROCESSOR_NAME ? MPI_MAX_PROCESSOR_NAME : strlen(name); @@ -2621,7 +2621,7 @@ int PMPI_Get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0) || @@ -2656,7 +2656,7 @@ int PMPI_Rget( void *origin_addr, int origin_count, MPI_Datatype origin_datatype retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0) || @@ -2692,7 +2692,7 @@ int PMPI_Put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0) || @@ -2728,7 +2728,7 @@ int PMPI_Rput( void *origin_addr, int origin_count, MPI_Datatype origin_datatype retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0) || @@ -2765,7 +2765,7 @@ int PMPI_Accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_da retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0) || @@ -2802,7 +2802,7 @@ int PMPI_Raccumulate( void *origin_addr, int origin_count, MPI_Datatype origin_d retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0) || @@ -2830,8 +2830,8 @@ int PMPI_Raccumulate( void *origin_addr, int origin_count, MPI_Datatype origin_d return retval; } -int PMPI_Get_accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, -int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, +int PMPI_Get_accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, +int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){ int retval = 0; smpi_bench_end(); @@ -2841,7 +2841,7 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){ retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0 || result_count <0) || @@ -2860,8 +2860,8 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){ int src_traced = group->index(target_rank); TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, nullptr); - retval = win->get_accumulate( origin_addr, origin_count, origin_datatype, result_addr, - result_count, result_datatype, target_rank, target_disp, + retval = win->get_accumulate( origin_addr, origin_count, origin_datatype, result_addr, + result_count, result_datatype, target_rank, target_disp, target_count, target_datatype, op); TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); @@ -2871,8 +2871,8 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win){ } -int PMPI_Rget_accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, -int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, +int PMPI_Rget_accumulate(void *origin_addr, int origin_count, MPI_Datatype origin_datatype, void *result_addr, +int result_count, MPI_Datatype result_datatype, int target_rank, MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request){ int retval = 0; smpi_bench_end(); @@ -2883,7 +2883,7 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request){ retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if ((origin_count < 0 || target_count < 0 || result_count <0) || @@ -2904,8 +2904,8 @@ MPI_Datatype target_datatype, MPI_Op op, MPI_Win win, MPI_Request* request){ int src_traced = group->index(target_rank); TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, nullptr); - retval = win->get_accumulate( origin_addr, origin_count, origin_datatype, result_addr, - result_count, result_datatype, target_rank, target_disp, + retval = win->get_accumulate( origin_addr, origin_count, origin_datatype, result_addr, + result_count, result_datatype, target_rank, target_disp, target_count, target_datatype, op, request); TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); @@ -2929,7 +2929,7 @@ int PMPI_Compare_and_swap(void *origin_addr, void *compare_addr, retval = MPI_SUCCESS; } else if (target_rank <0){ retval = MPI_ERR_RANK; - } else if (win->dynamic()==0 && target_disp <0){ + } else if (win->dynamic()==0 && target_disp <0){ //in case of dynamic window, target_disp can be mistakenly seen as negative, as it is an address retval = MPI_ERR_ARG; } else if (origin_addr==nullptr || result_addr==nullptr || compare_addr==nullptr){ @@ -2943,7 +2943,7 @@ int PMPI_Compare_and_swap(void *origin_addr, void *compare_addr, int src_traced = group->index(target_rank); TRACE_smpi_ptp_in(rank, src_traced, rank, __FUNCTION__, nullptr); - retval = win->compare_and_swap( origin_addr, compare_addr, result_addr, datatype, + retval = win->compare_and_swap( origin_addr, compare_addr, result_addr, datatype, target_rank, target_disp); TRACE_smpi_ptp_out(rank, src_traced, rank, __FUNCTION__); @@ -3025,10 +3025,10 @@ int PMPI_Win_lock(int lock_type, int rank, int assert, MPI_Win win){ smpi_bench_end(); if (win == MPI_WIN_NULL) { retval = MPI_ERR_WIN; - } else if (lock_type != MPI_LOCK_EXCLUSIVE && + } else if (lock_type != MPI_LOCK_EXCLUSIVE && lock_type != MPI_LOCK_SHARED) { retval = MPI_ERR_LOCKTYPE; - } else if (rank == MPI_PROC_NULL){ + } else if (rank == MPI_PROC_NULL){ retval = MPI_SUCCESS; } else { int myrank = smpi_process()->index(); @@ -3045,7 +3045,7 @@ int PMPI_Win_unlock(int rank, MPI_Win win){ smpi_bench_end(); if (win == MPI_WIN_NULL) { retval = MPI_ERR_WIN; - } else if (rank == MPI_PROC_NULL){ + } else if (rank == MPI_PROC_NULL){ retval = MPI_SUCCESS; } else { int myrank = smpi_process()->index(); @@ -3092,7 +3092,7 @@ int PMPI_Win_flush(int rank, MPI_Win win){ smpi_bench_end(); if (win == MPI_WIN_NULL) { retval = MPI_ERR_WIN; - } else if (rank == MPI_PROC_NULL){ + } else if (rank == MPI_PROC_NULL){ retval = MPI_SUCCESS; } else { int myrank = smpi_process()->index(); @@ -3109,7 +3109,7 @@ int PMPI_Win_flush_local(int rank, MPI_Win win){ smpi_bench_end(); if (win == MPI_WIN_NULL) { retval = MPI_ERR_WIN; - } else if (rank == MPI_PROC_NULL){ + } else if (rank == MPI_PROC_NULL){ retval = MPI_SUCCESS; } else { int myrank = smpi_process()->index();