From: genaud Date: Tue, 23 Mar 2010 13:00:45 +0000 (+0000) Subject: MPI_MAXLOC & MPI_MINLOC + all associated datatype MPI_DOUBLE_INT, MPI_FLOAT_INT,... X-Git-Tag: SVN~423 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/ac4b1f28abf1cd9b7448e8277fdc7cb57c89e982 MPI_MAXLOC & MPI_MINLOC + all associated datatype MPI_DOUBLE_INT, MPI_FLOAT_INT, etc. git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@7316 48e7efb5-ca39-0410-a469-dd3cf9ba447f --- diff --git a/ChangeLog b/ChangeLog index 77072d858c..ba12009afb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -31,6 +31,9 @@ SimGrid (3.3.5-svn) unstable; urgency=low anywere in source. SIMIX: * add a SIMIX_sem_get_capacity() function + SMPI: + * Implement MPI_Get_count, MPI_MAXLOC, MPI_MINLOC + -- Da SimGrid team diff --git a/examples/smpi/get_processor_name.c b/examples/smpi/get_processor_name.c new file mode 100644 index 0000000000..47f9dbd0e6 --- /dev/null +++ b/examples/smpi/get_processor_name.c @@ -0,0 +1,18 @@ +#include +#include + +int main (int argc, char **argv) { + int size, rank; + + char name[MPI_MAX_PROCESSOR_NAME]; + int len; + + MPI_Init(&argc, &argv); + MPI_Comm_size(MPI_COMM_WORLD, &size); + MPI_Comm_rank(MPI_COMM_WORLD, &rank); + + MPI_Get_processor_name(name,&len); + printf("rank %d is running on host %s\n", rank, name); + MPI_Finalize(); + return 0; +} diff --git a/include/smpi/smpi.h b/include/smpi/smpi.h index 842aeba393..7ce19779e8 100644 --- a/include/smpi/smpi.h +++ b/include/smpi/smpi.h @@ -55,6 +55,8 @@ typedef struct { int MPI_SOURCE; int MPI_TAG; int MPI_ERROR; + int _count; + int _cancelled; } MPI_Status; #define MPI_STATUS_IGNORE NULL @@ -93,6 +95,15 @@ extern MPI_Datatype MPI_C_LONG_DOUBLE_COMPLEX; extern MPI_Datatype MPI_AINT; extern MPI_Datatype MPI_OFFSET; +//The following are datatypes for the MPI functions MPI_MAXLOC and MPI_MINLOC. +extern MPI_Datatype MPI_FLOAT_INT; +extern MPI_Datatype MPI_LONG_INT; +extern MPI_Datatype MPI_DOUBLE_INT; +extern MPI_Datatype MPI_SHORT_INT; +extern MPI_Datatype MPI_2INT; +extern MPI_Datatype MPI_LONG_DOUBLE_INT; + + typedef void MPI_User_function(void* invec, void* inoutvec, int* len, MPI_Datatype* datatype); struct s_smpi_mpi_op; typedef struct s_smpi_mpi_op* MPI_Op; @@ -100,6 +111,8 @@ typedef struct s_smpi_mpi_op* MPI_Op; #define MPI_OP_NULL NULL extern MPI_Op MPI_MAX; extern MPI_Op MPI_MIN; +extern MPI_Op MPI_MAXLOC; +extern MPI_Op MPI_MINLOC; extern MPI_Op MPI_SUM; extern MPI_Op MPI_PROD; extern MPI_Op MPI_LAND; @@ -113,6 +126,7 @@ struct s_smpi_mpi_group; typedef struct s_smpi_mpi_group* MPI_Group; #define MPI_GROUP_NULL NULL + extern MPI_Group MPI_GROUP_EMPTY; struct s_smpi_mpi_communicator; @@ -172,6 +186,8 @@ XBT_PUBLIC(int) MPI_Send(void* buf, int count, MPI_Datatype datatype, int dst, i XBT_PUBLIC(int) MPI_Sendrecv(void* sendbuf, int sendcount, MPI_Datatype sendtype, int dst, int sendtag, void* recvbuf, int recvcount, MPI_Datatype recvtype, int src, int recvtag, MPI_Comm comm, MPI_Status* status); XBT_PUBLIC(int) MPI_Sendrecv_replace(void* buf, int count, MPI_Datatype datatype, int dst, int sendtag, int src, int recvtag, MPI_Comm comm, MPI_Status* status); + +XBT_PUBLIC(int) MPI_Get_count(MPI_Status *status, MPI_Datatype datatype, int *count); XBT_PUBLIC(int) MPI_Test(MPI_Request* request, int* flag, MPI_Status* status); XBT_PUBLIC(int) MPI_Testany(int count, MPI_Request requests[], int* index, int* flag, MPI_Status* status); XBT_PUBLIC(int) MPI_Wait(MPI_Request* request, MPI_Status* status);