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.0.1

Release Notes
No breaking news, many bug fix, a few more features. Check the changelog...
Change Log
   * Unfortunately, I had missed 5 misnamed functions:
       xbt_fifo_item_t xbt_fifo_newitem(void);
       void xbt_fifo_freeitem(xbt_fifo_item_t);
       xbt_fifo_item_t xbt_fifo_getFirstItem(xbt_fifo_t l);
       xbt_fifo_item_t xbt_fifo_getNextItem(xbt_fifo_item_t i);
       xbt_fifo_item_t xbt_fifo_getPrevItem(xbt_fifo_item_t i);
     They're now deprecated. Please use their new versions:
       xbt_fifo_item_t xbt_fifo_new_item(void);
       void xbt_fifo_free_item(xbt_fifo_item_t);
       xbt_fifo_item_t xbt_fifo_get_first_item(xbt_fifo_t l);
       xbt_fifo_item_t xbt_fifo_get_next_item(xbt_fifo_item_t i);
       xbt_fifo_item_t xbt_fifo_get_prev_item(xbt_fifo_item_t i);
   * Bugfix: really disconnect fifo items which are remove_item()ed [AL]
   * Documentation: xbt_log module unmercifully reworked [MQ]
   * Bugfix: there was a problem with the ending of contexts with
     the pthread backend. It caused some weird deadlock or behavior
     depending on the pthread implementation. [AL]
   * Bugfix: get the exceptions raised in the simulator repport where
     and why they come from when they are not catched in time [AL, MQ]
   * Bugfix: Do repport the error when two non-connected hosts try to
     exchange data (Thanks to Flavien for stumbling into this one) [AL]
   * Add additionnal checkings on communications. Assert that two
     communicating hosts are connected by a set of links... [AL]
   * Add additionnal checkings on channel values in communication [AL]
   * New: MSG_task_get_source to see on which host a task was generated [HC]
   * New: int MSG_task_probe_from_host(int channel, m_host_t host): returns
     the number of tasks waiting to be received on channel and sent
     by host. [AL]
   * New: MSG_error_t MSG_task_get_from_host(m_task_t * task, int channel, m_host_t host);
     waits for the first task coming from a given host.. [AL]
   GRAS new functionnalities: [MQ]
   * Enhance the parsing macro to allow the size of multidimentional objects
     to be given thru annotations.
   * New example (and documentation): Matrix Multiplication a la RPC
     (as when I was young!) and fix a bunch of bugs found on the way.
   GRAS performance improvements: [MQ]
   * Reduce the amount of cbps creation/destruction by making it static to
     datadesc_send/recv() and using a (newly created) cbps_reset (based on
     dynar_reset ())
   * Change libdata to a set so that we can search for stuff by ID (and thus
     reduce the insane amount of dict lookups)
   * Actually implement gras_datadesc_copy() so that we don't have to mimick
     RL communication on top of SG since it's so uneffective.
     It may also be used for inter-thread communication in RL, one day.
   * Use gras_datadesc_copy() to exchange messages on top of SG
     Allows to:
     - improve message exchange performance on top of SG
     - deprecate transport_plugin_sg.c:gras_trp_sg_chunk_send() & recv()
   * Don't exchange on the network the size of the used part of buffer,
     instead, specify the possible buffer size to read().
      - reduces the amount of read/write calls (one pair per exchange)
      - reduces the amount of exchanged data (the size)
      - allows to retrieve all arrived data on receiver side, if we don't need
        it right now (subsequent read will peek the buffer)
      - allows the receiver to proceed with the begining of the stream before
        everything is arrived
      - make it possible to build an iov transport (using readv/writev)
     Extra difficulty:
      - take care of the data with non-stable storage (like stacked data),
        and bufferize them.
   * If possible, TCP send uses vector I/O (when writev() is here)
      - Don't use it for receive since we send data sizes and data on the
        same stream, so we wouldn't be able to chain large amount of chunks
        before having to flush the stuff to read the size.
   * Rework the transport plugin mecanism to simplify it and reduce the
     amount of pointer dereferencement when searching for the right function
     to use.
   * I guess that now, we do almost as few system calls as possible while
     doing as few data copy as possible.
     To improve it further, we could try to send all the sizes first and then
     all the data (to use iov on receiving size), but it's only a partial
     solution: when you have 2 dimensional data, the sizes of the second
     dimension is data of the first dimension, so you need 3 streams.
     I'm not sure the potential performance gains justify the coding burden.