Home My Page Projects SimGrid
Summary Activity Forums Tracker Lists Docs News SCM Files

Project Filelist for SimGrid

File Release Notes and Changelog

Release Name: 3.6

Release Notes
The "F*! They Killed Kenny!" version. Major changes:

 * Java and Ruby bindings were removed from the main archive
   - They are now distributed separately
 * GRAS is not considered as stable anymore, but experimental. Sorry.
 * First support for parallel simulation:
   - Can run the user code of any simulation in parallel.
   - Basic support for multi-cores hosts in platform files
 * Improved P2P support:
   - Peer tag in platform files for DSL connected nodes
   - Vivaldi routing scheme for lightweigted yet accurate models
 * Improved SMPI: Faster Fortran, automatic privatization of C globals
 * Tracing: trace contains the full platform hierarchy
   exactly as declared using the ASes of the platform file

Plus numerous other goodies (check the ChangeLog for details)
Change Log
 The Summer Release, also known as the "F*! They Killed Kenny!" version

 Java and Ruby:
 * Bindings now constitute their own package, separated from the main one.
   Rationale: reduce our maintainance nightmare by reducing the module coupling
   They will soon be released on their own on gforge.
 * In the meanwhile:
   svn co svn://scm.gforge.inria.fr/svn/simgrid/contrib/trunk/simgrid-java
   svn co svn://scm.gforge.inria.fr/svn/simgrid/contrib/trunk/simgrid-ruby

 GRAS: It is not considered as stable anymore, but experimental. Sorry.
 * It's not quite deprecated for now because we have no replacement,
   but it may soon become the case.

 * New MPI functions supported: MPI_Comm_disconnect, MPI_Comm_get_name
 * Fortran: New user-level cache variable to store the rank of the running
   process. This improves performance by an order of magnitude.
 * C: New coccinelle script to automatically locate and modifiy global and
   local static variables.
 * Improved SMPI network model with a sender-side gap to account for multiple
   parallel sends.

 * New function MSG_comm_get_status(). MSG_comm_test() and MSG_comm_testany()
   only say if a communication is finished, no matter whether it succeeded or
   failed. You can call MSG_comm_get_status() to know the status of a finished
 * New function MSG_task_dsend() to send a task and detach it. When a
   communication is detached, you are never notified of its success or failure
   and the memory is released automatically once it is finished. This function
   is useful when you don't care about the end nor the success of a
 * Change the prototypes of action replay. Sorry for inconvenience,
   but this is really more efficient this way (and to adapt your code,
   you just have to fix the initialization, that shouldn't be too long)
 * Kill the braindead MSG_task_refcount_dec() function. I guess nobody
   ever managed to do anything useful with it.
 * New function MSG_comm_testany(). Similarly to MSG_comm_waitany(), it
   takes a dynar of communications. It returns immediately and gives the
   index of a finished communication (if any).
 * New example: a basic implementation of the Chord P2P algorithm.

 * New model for multi-core CPUs. You can now use the core attribute to
   precise the number of cores of a host. This is a basic model. Every
   process running on the host receives at most the power provided in
   the DTD (throughput<=power). Total throughput of process cannot exceed
   power * num_cores.
 * New peer tag. This peer tag creates a tiny AS comprising a host and a
   router linked by an up-link and a down-link (possibly asymmetrical).
   This kind of pattern allows to easily build last-mile model style platforms.
   Aggregating such patterns in a rule-based AS is thus the technique of
   choice for modeling large peer-to-peer/volunteer computing/cloud platforms.
 * New model for Vivaldi routing. We transformed the Vivaldi network model
   into a Vivaldi routing model (based on the rule-based model). This allows to
   combine Vivaldi based latencies with last-mile platforms.

 * Introduce a new context factory "raw", highly inspirated from the
   ucontext factory, but using manually crafted functions in assembly to
   do the work in an efficient manner.
 * Allow to change the used context factory at run time, not only at
   compilation time. Use --cfg=contexts/factory:raw for maximal speed.
 * Add an option --cfg=contexts/stacksize:N to set the stack size of the user
   contextes at runtime (only with raw contexts or ucontexts).
 * Completely rewrote this module to allow parallel execution of user
   processes. Use --cfg=contexts/nthreads:N to execute user processes
   with N parallel threads (the default is 1, meaning no parallelism).
 * Allow to decide dynamically between sequential and parallel modes.
   When nthreads > 1, you can use --cfg=contexts/threshold:P to run the user
   processes in parallel only when their number is greater than or equal to P
   (the default is 2).
 * Added a check for NaN of IEEE754 infinite in the double entries of
   the smx_user.c file

 * New command line option: if you pass --cfg=verbose-exit:0, SimGrid
   won't output the state of processes when interrupted with Ctrl-C
 * Add a new function xbt_dynar_to_array that transforms a dynar into a
   NULL-terminated array. This may solve backward compatibility issues
   due to the change to return type of SD_simulate. See also:
 * Add new macros with variable number of arguments.
   - in xbt/log.h: XBT_DEBUG, XBT_VERB, XBT_INFO, etc.
   - in xbt/asserts.h: xbt_assert
   - in xbt/cunit.h: xbt_test_{add,fail,assert,log}
   - in xbt/ex.h: THROWF and RETHROWF.
   Define XBT_USE_DEPRECATED if you want to use the old numbered macros like
   INFO1, INFO2, etc.
 * Change xbt_die() to accept a format string with arguments, just like printf.
 * New data structure: xbt_lib_t, like a dict but more general and with better
   memory handling.

 * New configuration options
   Options triva/categorized and triva/uncategorized can be used to generate
   graph configuration files for Triva visualization tool.
 * Configuration option tracing/platform is renamed to tracing/categorized
 * XBT logging makes tracing error checks easier, new root log hierarchy: instr
 * New TRACE_user_link_variable interface:
   User provides the name of the link and the tracing variable to attach to it
 * the declaration of tracing categories must be done after the environment
 * simpler tracing interface, just one way to declare categories
    TRACE_category or TRACE_category_with_color, it is up to you
 * links in the trace file are again identified by their names
 * trace contains the full platform hierarchy exactly as declared using the ASes
 * Options tracing/msg/[task|process]:1 groups the process by hosts
   for both cases, tasks and processes must have names that are unique during the simulation
   these options generate traces that are suited to gantt-charts, such as the space-time view of Paje
 * The experimental option tracing/msg/volume is deprecated
   its functionality may be reincorporated if needed
 * Buffering
   The tracing generates a trace file with unordered timestamped events,
   because of the way the core simulator (surf) works. A script available
   at the tools directory (fix-paje-trace.sh) can be used to put the events
   in order. We have changed the tracing so it can generate ordered timestamped
   events in the final trace, but depending on the simulator (and how much time
   is simulated) that can lead to a huge memory utilization. It is desactivated
   by default, but it can be activated using the --cfg=tracing/buffer:1 switch.

 Build Infrastructure
 * Define a SIMGRID_VERSION macro in simgrid_config.h.
   - We are trying hard to keep the API stable, but it may happen that
     some things change (we're a research project after all, not a
     nuclear plant operating system). If such things should happen, you
     could rely on that macro to adapt.
   - current value: 30600 for 3.06.00, aka 3.6
 * Define macro MAKE_SIMGRID_VERSION(major, minor, patch) to help building
   a number that can be compared with SIMGRID_VERSION.
 * Add a build option -Denable_debug (set to ON by default): when set to OFF,
   assertions and verbose/debug logging events are disabled at compile time.