Quick Notes : getting started with the examples
===============================================
+..:: What you need ::..
+
+- a platform file describing the environment. You can go to
+ the Platform Description Archive (http://pda.gforge.inria.fr/) to
+ get an existing one or generate your own platform with the
+ SIMULACRUM tool (see 'Download' section there).
+
+- a hostfile. Like in almost all MPI distributions, the hostfile
+ list the hosts which the processes will be mapped on. At present,
+ the format is one hostname per line. The hostnames must be present
+ in the platform file.
+
+ Note: the mapping of MPI processes (ranks) follows the order of the
+ hostfile. Rank 0 is mapped to first hostname in hostfile, Rank 1
+ on second hostname, etc. If n (where -np n) is greater than the
+ number l of lines in hostfile, the mapping is done round-robin.
+
+
+..:: Try the examples ::..
+
Go to :
-# cd simgrid/src/smpi/sample
+# cd simgrid/examples/smpi
To compile an example :
-# ../smpicc bcast.c -o bcast
+# ../../src/smpi/smpicc bcast.c -o bcast
Use 'smpirun' to use it then:
To run it :
-# ../smpirun -np 3 ./bcast
+# ../../src/smpi/smpirun -np 3 ./bcast
node 0 has value 17
node 2 has value 3
node 1 has value 3
To run it with a specific platform:
-# ../smpirun -np 3 -platform platform.xml -hostfile hostfile ./bcast
+# ../../src/smpi/smpirun -np 3 -platform platform.xml -hostfile hostfile ./bcast
+
+Note that by default, the examples use the installed version of
+simgrid. So please install it before playing with the examples, or set
+a LD_LIBRARY_PATH variable pointing to src/.libs
+
+
+
+
+
+Network Model
+=============
+
+SMPI runs with a cluster-specific network model. This model is piece-wise
+linear: each segment is described by a latency correction factor and a
+bandwidth correction factor (both are multiplicative and apply to the values
+given in the platform file).
+
+To compute the values for a specific cluster, we provide the script
+contrib/network_model/calibrate_piecewise.py. This script takes four mandatory
+command line parameters:
+
+1) a SKaMPI data file for a Pingpong_Send_Recv experiment
+2) the number of links between the nodes involved in the SKaMPI measurments
+3) the latency value of the links, as given in the platform file
+4) the bandwidth value of the links, as given in the platform file
+
+It also takes an arbitrary number of optional parameters, each being a segment
+limit on which to compute the correction factors.
+
+The script then outputs the latency and bandwidth factor for each segment that
+best fit the experimental values. You can then apply these factors in the
+network model by modifying the values in src/surf/network.c (after the "SMPI
+callbacks" comment, lines 44 to 77).
+
+
+What's implemented
+==================
+As a proof of concept, and due to lack of time, the implementation is far from complete
+with respect to a MPI-1.2 specification. Here is what is implemented so far. Please update
+if you can.
+* MPI_Datatypes:
+ MPI_BYTE
+ MPI_CHAR / MPI_SIGNED_CHAR / MPI_UNSIGNED_CHAR
+ MPI_SHORT / MPI_UNSIGNED_SHORT
+ MPI_INT / MPI_UNSIGNED
+ MPI_LONG / MPI_UNSIGNED_LONG
+ MPI_LONG_LONG / MPI_LONG_LONG_INT / MPI_UNSIGNED_LONG_LONG
+ MPI_FLOAT
+ MPI_DOUBLE
+ MPI_LONG_DOUBLE
+ MPI_WCHAR
+ MPI_C_BOOL
+ MPI_INT8_T / MPI_UINT8_T
+ MPI_INT16_T / MPI_UINT16_T
+ MPI_INT32_T / MPI_UINT32_T
+ MPI_INT64_T / MPI_UINT64_T
+ MPI_C_FLOAT_COMPLEX / MPI_C_COMPLEX
+ MPI_C_DOUBLE_COMPLEX
+ MPI_C_LONG_DOUBLE_COMPLEX
+ MPI_AINT
+ MPI_OFFSET
+ MPI_FLOAT_INT
+ MPI_LONG_INT
+ MPI_DOUBLE_INT
+ MPI_SHORT_INT
+ MPI_2INT
+ MPI_LONG_DOUBLE_INT
+
+* Type management:
+ MPI_Type_size
+ MPI_Type_get_extent
+ MPI_Type_extent
+ MPI_Type_lb
+ MPI_Type_ub
+
+* MPI_Op:
+ MPI_LAND
+ MPI_LOR
+ MPI_LXOR
+ MPI_SUM
+ MPI_PROD
+ MPI_MIN
+ MPI_MAX
+ MPI_MAXLOC
+ MPI_MINLOC
+ MPI_BAND
+ MPI_BOR
+ MPI_BXOR
+ User defined operations: MPI_Op_create / MPI_Op_free
+
+* Group management:
+ MPI_Group_free
+ MPI_Group_rank
+ MPI_Group_size
+ MPI_Group_translate_ranks
+ MPI_Group_compare
+ MPI_Group_union
+ MPI_Group_intersection
+ MPI_Group_difference
+ MPI_Group_incl
+ MPI_Group_excl
+ MPI_Group_range_incl
+
+* Communicator management:
+ MPI_Comm_rank
+ MPI_Comm_size
+ MPI_Comm_group
+ MPI_Comm_compare
+ MPI_Comm_dup
+ MPI_Comm_create
+ MPI_Comm_free
+
+* primitives:
+ MPI_Init / MPI_Init_thread
+ MPI_Query_thread / MPI_Is_thread_main
+ MPI_Finalize
+ MPI_Abort
+ MPI_Address
+ MPI_Wtime
+ MPI_Irecv
+ MPI_Recv
+ MPI_Recv_init
+ MPI_Isend
+ MPI_Send
+ MPI_Send_init
+ MPI_Sendrecv
+ MPI_Sendrecv_replace
+ MPI_Start
+ MPI_Startall
+ MPI_Request_free
+ MPI_Test
+ MPI_Testany
+ MPI_Wait
+ MPI_Waitall
+ MPI_Waitany
+ MPI_Waitsome
+ MPI_Barrier
+ MPI_Bcast
+ MPI_Gather
+ MPI_Gatherv
+ MPI_Scatter
+ MPI_Scatterv
+ MPI_Reduce
+ MPI_Scan
+ MPI_Reduce_Scatter
+ MPI_Allgather
+ MPI_Allgatherv
+ MPI_Allreduce
+ MPI_Alltoall
+ MPI_Alltoallv