X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b4e20873a7bd405842f3d8d1e6dd1d518db5535..ad0a588bd29ee5715a65929a6ac2ebb8ff05cd54:/src/smpi/private.h diff --git a/src/smpi/private.h b/src/smpi/private.h index 26847a61b4..f8d7e7c77c 100644 --- a/src/smpi/private.h +++ b/src/smpi/private.h @@ -1,8 +1,8 @@ -/* Copyright (c) 2007, 2009-2013. The SimGrid Team. +/* Copyright (c) 2007, 2009-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. */ + * under the terms of the license (GNU LGPL) which comes with this package. */ #ifndef SMPI_PRIVATE_H #define SMPI_PRIVATE_H @@ -10,10 +10,10 @@ #include "internal_config.h" #include "xbt.h" #include "xbt/xbt_os_time.h" +#include "xbt/synchro_core.h" #include "simgrid/simix.h" #include "smpi/smpi_interface.h" #include "smpi/smpi.h" -#include "smpi/smpif.h" #include "smpi/smpi_cocci.h" #include "instr/instr_private.h" @@ -28,6 +28,17 @@ typedef struct s_smpi_process_data *smpi_process_data_t; #define ISEND 0x20 #define SSEND 0x40 #define PREPARED 0x80 +#define FINISHED 0x100 +#define RMA 0x200 +#define ACCUMULATE 0x400 + + +enum smpi_process_state{ + SMPI_UNINITIALIZED, + SMPI_INITIALIZED, + SMPI_FINALIZED +}; + // this struct is here to handle the problem of non-contignous data // for each such structure these function should be implemented (vector // index hvector hindex struct) @@ -63,6 +74,9 @@ typedef struct s_smpi_mpi_datatype{ #define COLL_TAG_GATHERV -2223 #define COLL_TAG_BCAST -3334 #define COLL_TAG_ALLREDUCE -4445 + +#define MPI_COMM_UNINITIALIZED ((MPI_Comm)-1) + //***************************************************************************************** typedef struct s_smpi_mpi_request { @@ -95,18 +109,48 @@ typedef struct s_smpi_mpi_request { #endif } s_smpi_mpi_request_t; + void smpi_process_destroy(void); void smpi_process_finalize(void); int smpi_process_finalized(void); int smpi_process_initialized(void); void smpi_process_mark_as_initialized(void); +struct s_smpi_mpi_cart_topology; +typedef struct s_smpi_mpi_cart_topology *MPIR_Cart_Topology; + +struct s_smpi_mpi_graph_topology; +typedef struct s_smpi_mpi_graph_topology *MPIR_Graph_Topology; + +struct s_smpi_dist_graph_topology; +typedef struct s_smpi_dist_graph_topology *MPIR_Dist_Graph_Topology; + +// MPI_Topology defined in smpi.h, as it is public + +void smpi_topo_destroy(MPI_Topology topo); +MPI_Topology smpi_topo_create(MPIR_Topo_type kind); +void smpi_cart_topo_destroy(MPIR_Cart_Topology cart); +MPI_Topology smpi_cart_topo_create(int ndims); +int smpi_mpi_cart_create(MPI_Comm comm_old, int ndims, int dims[], + int periods[], int reorder, MPI_Comm *comm_cart); +int smpi_mpi_cart_sub(MPI_Comm comm, const int remain_dims[], MPI_Comm *newcomm); +int smpi_mpi_cart_coords(MPI_Comm comm, int rank, int maxdims, + int coords[]); +int smpi_mpi_cart_get(MPI_Comm comm, int maxdims, int* dims, int* periods, + int* coords); +int smpi_mpi_cart_rank(MPI_Comm comm, int* coords, int* rank); +int smpi_mpi_cart_shift(MPI_Comm comm, int direction, int disp, + int *rank_source, int *rank_dest); +int smpi_mpi_cartdim_get(MPI_Comm comm, int *ndims); +int smpi_mpi_dims_create(int nnodes, int ndims, int dims[]); + smpi_process_data_t smpi_process_data(void); smpi_process_data_t smpi_process_remote_data(int index); void smpi_process_set_user_data(void *); void* smpi_process_get_user_data(void); int smpi_process_count(void); +MPI_Comm smpi_process_comm_world(void); smx_rdv_t smpi_process_mailbox(void); smx_rdv_t smpi_process_remote_mailbox(int index); smx_rdv_t smpi_process_mailbox_small(void); @@ -117,14 +161,24 @@ double smpi_process_simulated_elapsed(void); void smpi_process_set_sampling(int s); int smpi_process_get_sampling(void); +void smpi_deployment_register_process(const char* instance_id, int rank, int index, MPI_Comm**, xbt_bar_t*); +void smpi_deployment_cleanup_instances(void); + +void smpi_comm_copy_buffer_callback(smx_action_t comm, + void *buff, size_t buff_size); + void print_request(const char *message, MPI_Request request); +int smpi_enabled(void); void smpi_global_init(void); void smpi_global_destroy(void); +int is_datatype_valid(MPI_Datatype datatype); + size_t smpi_datatype_size(MPI_Datatype datatype); MPI_Aint smpi_datatype_lb(MPI_Datatype datatype); MPI_Aint smpi_datatype_ub(MPI_Datatype datatype); +MPI_Datatype smpi_datatype_dup(MPI_Datatype datatype); int smpi_datatype_extent(MPI_Datatype datatype, MPI_Aint * lb, MPI_Aint * extent); MPI_Aint smpi_datatype_get_extent(MPI_Datatype datatype); @@ -172,7 +226,8 @@ int smpi_group_unuse(MPI_Group group); int smpi_group_size(MPI_Group group); int smpi_group_compare(MPI_Group group1, MPI_Group group2); -MPI_Comm smpi_comm_new(MPI_Group group); +MPI_Topology smpi_comm_topo(MPI_Comm comm); +MPI_Comm smpi_comm_new(MPI_Group group, MPI_Topology topo); void smpi_comm_destroy(MPI_Comm comm); MPI_Group smpi_comm_group(MPI_Comm comm); int smpi_comm_size(MPI_Comm comm); @@ -203,6 +258,10 @@ MPI_Request smpi_irecv_init(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm); MPI_Request smpi_mpi_irecv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm); +MPI_Request smpi_rma_send_init(void *buf, int count, MPI_Datatype datatype, + int src, int dst, int tag, MPI_Comm comm); +MPI_Request smpi_rma_recv_init(void *buf, int count, MPI_Datatype datatype, + int src, int dst, int tag, MPI_Comm comm); void smpi_mpi_recv(void *buf, int count, MPI_Datatype datatype, int src, int tag, MPI_Comm comm, MPI_Status * status); void smpi_mpi_send(void *buf, int count, MPI_Datatype datatype, int dst, @@ -266,6 +325,19 @@ void smpi_mpi_scan(void *sendbuf, void *recvbuf, int count, void smpi_mpi_exscan(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm); +int smpi_mpi_win_free( MPI_Win* win); + +MPI_Win smpi_mpi_win_create( void *base, MPI_Aint size, int disp_unit, MPI_Info info, MPI_Comm comm); + +int smpi_mpi_win_fence( int assert, MPI_Win win); + +int smpi_mpi_get( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, + MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win); +int smpi_mpi_put( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, + MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Win win); +int smpi_mpi_accumulate( void *origin_addr, int origin_count, MPI_Datatype origin_datatype, int target_rank, + MPI_Aint target_disp, int target_count, MPI_Datatype target_datatype, MPI_Op op, MPI_Win win); + void nary_tree_bcast(void *buf, int count, MPI_Datatype datatype, int root, MPI_Comm comm, int arity); void nary_tree_barrier(MPI_Comm comm, int arity); @@ -292,10 +364,20 @@ int smpi_coll_basic_alltoallv(void *sendbuf, int *sendcounts, // utilities extern double smpi_cpu_threshold; extern double smpi_running_power; +extern int smpi_privatize_global_variables; +extern char* start_data_exe; //start of the data+bss segment of the executable +extern int size_data_exe; //size of the data+bss segment of the executable + + +void switch_data_segment(int); +void smpi_get_executable_global_size(void); +void smpi_initialize_global_memory_segments(void); +void smpi_destroy_global_memory_segments(void); void smpi_bench_destroy(void); void smpi_bench_begin(void); void smpi_bench_end(void); + // f77 wrappers void mpi_init_(int*); void mpi_finalize_(int*); @@ -549,6 +631,8 @@ void mpi_comm_spawn_multiple_ ( int* count, char *array_of_commands, char** arra int* comm, int*intercomm, int* array_of_errcodes, int* ierr); void mpi_comm_get_parent_ ( int*parent, int* ierr); + +#ifdef HAVE_TRACING /********** Tracing **********/ /* from smpi_instr.c */ void TRACE_internal_smpi_set_category (const char *category); @@ -558,6 +642,11 @@ void TRACE_smpi_collective_out(int rank, int root, const char *operation); void TRACE_smpi_computing_init(int rank); void TRACE_smpi_computing_out(int rank); void TRACE_smpi_computing_in(int rank, instr_extra_data extra); +void TRACE_smpi_sleeping_init(int rank); +void TRACE_smpi_sleeping_out(int rank); +void TRACE_smpi_sleeping_in(int rank, instr_extra_data extra); +void TRACE_smpi_testing_out(int rank); +void TRACE_smpi_testing_in(int rank, instr_extra_data extra); void TRACE_smpi_alloc(void); void TRACE_smpi_release(void); void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation, instr_extra_data extra); @@ -566,9 +655,12 @@ void TRACE_smpi_send(int rank, int src, int dst, int size); void TRACE_smpi_recv(int rank, int src, int dst); void TRACE_smpi_init(int rank); void TRACE_smpi_finalize(int rank); - +#endif const char* encode_datatype(MPI_Datatype datatype); +// TODO, make this static and expose it more cleanly +extern void** mappings; +extern int loaded_page; #endif