Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
use a nice va_copy if none was provided by the system
[simgrid.git] / ChangeLog
index 1a3a27e..e619ad7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,553 @@
+SimGrid (2.96) unstable; urgency=low
+
+  MSG
+  * Bugfix: MSG_process_resume now works with the current running process.
+
+ --
+
+SimGrid (2.95) unstable; urgency=low
+
+  XBT
+  * Steal some nice code to GNU pth to fix context detection and usage [AL]
+  * Cleanup in the xbt_config API; add configuration callbacks. [MQ]
+  * Cleanup in the initialization API: the unused "defaultlog" is dead. [MQ]
+
+  SURF
+  * Bugfix: Allow absolute paths for platform description files [MQ]
+  * Bugfix: do free the variables after use. Leads to drastic performance 
+    improvement [AL] 
+  * Implement max_duration (ie, timeouts) on resources [AL]
+
+  MSG
+  * Implement MSG_config to configure MSG at runtime. xbt_cfg test on a real
+    case ;) [MQ]
+  * Implement MSG_channel_select_from() to help GRAS now that SURF provide
+    the needed support (timeouts) [AL]
+
+  GRAS (new features)
+  * Implement measurement sockets. You can now get the bandwidth between two
+    hosts thanks to AMOK (see below). [MQ]
+  * gras_datadesc_dynar() builds a dynar type descriptor, allowing to send
+    dynar over the network (yeah) [MQ]
+  * Real (even if simplistic) implementation of gras_os_myname() on RL [MQ]
+  * simple/static token-ring example. [Alexandre Colucci and MQ]
+  * Use MSG_channel_select_from() and remove the *slow* hack we had to put
+    in place before [MQ]
+  
+  GRAS (bug fixes)
+  * Differentiate the types "char[22]" and "unsigned char[22]" in automatic
+    type parsing. "short" and "long" modifiers were also ignored; other
+    modifier (such as reference level) are still ignored. [MQ] 
+  * Embeed the buffer size within the buffer itself on SG. [MQ]
+    That way, send() are atomic and cannot get intermixed anymore (at least
+    the ones which are less than 100k; bigger messages still have the issue)
+  * Array size pushed by the field, not by the field type (or each
+    and every long int will push stuff to the cbps) [MQ]
+  * use select() to sleep since it allows to portably sleep less than one
+    second. [MQ]
+
+  GRAS (minor cleanups)
+  * <project>.Makefile.local (generated from gras_stub_generator) |MQ]:
+    - Do clean .o files
+    - Compile with -g
+  * Type Callbacks now receive the gras_datadesc_type_t they work on as argument.
+  * type category 'ignored' killed as it was never used and were difficult
+    to transmit.
+  * whether a type can cycle or not is now a flag, leaving room for more
+    flags (as "ignored", if we feel the need one day ;)
+  * Rename raw sockets to measurement sockets since "raw" has another
+    meaning in networking community. 
+  
+  AMOK 
+  * Advanced Metacomputing Overlay Kit introduction. It is based over GRAS
+    and offers features not belonging to GRAS but that most applications
+    need. One day, it may be a set of plugins loadable at runtime.
+  * New module: bandwidth 
+    bandwidth measurement between arbitrary nodes running this module. [MQ]
+
+ -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>  Thu, 30 Jun 2005 16:29:20 -0700
+
+SimGrid (2.94) unstable; urgency=low
+
+  The first beta release of SimGrid 3 !
+
+  >>>Arnaud<<<
+  (documentation)
+  * Update the main page and the FAQ. Adding references to gforge.
+
+  (gras)
+  * Add a gras_os_getpid function.
+
+  (msg)
+  * Add MSG_task_get_compute_duration() and MSG_task_get_data_size()
+  * Extend the logs so that they also print PID, hostname, date, ... if
+    available.
+  * Convert the MSG example to the use of xbt_logs instead of PRINT_MESSAGE,
+    and kill the old version which were in testsuite/
+  * Rewrite tools/MSG_visualization/colorize.pl for using with logs instead
+    of PRINT_MESSAGE
+
+  (xbt)
+  * Add xbt_os_time(). As the rest of xbt/portability, this is not public
+    for users. Instead, each programming environment (GRAS, MSG,...) use it
+    when needed to provide such a feature to users.
+    Don't shortcut the mecanism or you will also shortcut the virtualization
+    you need on the simulator.
+
+  >>>Martin<<<
+  (infrastructure)
+  * Cleanups in configury with regard to compile optimization/warning flags.
+    Also add -fno-loop-optimize to any powerpc since it's the optimization
+    killing gcc (< 3.4.0).
+  * Doxygen cleanups: move MSG examples, kill the second Doxygen phase
+    needed by MSG examples complications
+  * Borrow configury beautifications from PHP
+
+  (xbt)
+  * Bugfix: XBT_LOG_NEW_DEFAULT_CATEGORY now compiles without compiler
+    warning (thanks loris for stumbling into this one).
+  * Bugfix: stop loading private headers (gras_config.h) from the public
+    ones (xbt/swag.h).
+
+  (gras)
+  * Change SIMGRID_INSTALL_PATH to GRAS_ROOT in Makefiles generated for user.
+  * Rename gras_get_my_fqdn to gras_os_myname and implement it in the simulator
+    RL would imply a DNS resolver, which is *hard* to do in a portable way
+    (and therefore delayed).
+  * Implement a real timer mecanism and use it in timing macros. This allows
+    to avoid rounding errors and get a 0.000005 sec precision in timing
+    macros. While I was at it, various cleanups:
+     - allow to declare more than one timed section per file (fix a stupid bug)
+     - move some private declaration to the right place
+     - merge conditional execution and timing macros into emulation module
+     - document the module
+     - make sure the module cleanups its mess on gras_exit
+  * Documentation improvements:
+     - (new) how to compile applications using GRAS
+     - (new) emulation support (timing macros)
+
+ -- Da SimGrid team <simgrid-devel@lists.gforge.inria.fr>  Fri, 13 May 2005 10:49:31 +0200
+
+SimGrid (2.93) unstable; urgency=low
+
+  Alpha 4 on the path to SimGrid 3 (aka the "neuf-trois" version)
+
+  [Arnaud]
+   - Use Paje properly where used. Still to be sanitized properly.
+   - Portability fix: Add an implementation of the contexts using pthread
+
+  [Martin]
+  (misc)
+   - Add xbt_procname(): returns the name of the current process.
+     Use it to show the current process's name in all logging.
+  (infrastructure)
+   - fix detection of older flex version and the reaction, since we do
+     depend on modern ones (we use lex_destroy)
+   - Better separation of SG and RL in the libs: remove all simulation code
+     from libgras. As a result, this lib is now only 200k when stripped.
+     Some of the xbt modules may also be duplicated (two sets and such) and
+     should be cleaned/killed before SG3.
+   - Insist on using xlC on AIX because of weird problems involving gcc there.
+   - Cleanup the make remote stuff. This is now done by scripts
+     tools/graspe-{master,slave} (GRAS Platform Expender). This is still
+     mainly for our private use, but we're working on changing them to user
+     tools, too.
+  (gras)
+   - Bugfix: flush the socket on close only if there is some *output*.
+   - Bugfix: flush idempotent when there's nothing to send (don't send size=0)
+  (msg)
+   - Add MSG_task_get_name. The task names are mainly for debugging purpose,
+     but anyway.
+
+ -- SimGrid team <simgrid2-users@listes.ens-lyon.fr>  Fri,  4 Mar 2005 14:32:37 -0800
+
+SimGrid (2.92) unstable; urgency=low
+
+  Alpha 3 on the path to SimGrid 3
+  
+  [Arnaud]
+  (gras)
+   - New! First try of benchmarking macros.
+   - New! First try so that gras_stub_generator generate deployment and
+     remote compilation helpers.
+  (msg)
+   - Bugfix: Initialization fix in msg_test.
+
+  [Martin]
+  (surf)
+   - Bugfix: applied patch to lexer so that it doesn't need a huge heap.
+  (xbt)
+   - Bugfix: let dicts work with NULL content (_foreach didn't) and cleanups
+  (gras)
+   - API Change: gras_os_sleep to take the amount of seconds as a double.
+     Accepting an int was error prone since it was the only location where
+     seconds were coded as such. It leaded to damn rounding errors.
+   - Bugfix: Hard to belive that timers ever worked before this.
+
+ -- SimGrid team <simgrid2-users@listes.ens-lyon.fr>  Wed, 23 Feb 2005 22:09:21 +0100
+
+SimGrid (2.91) unstable; urgency=low
+
+  Alpha 2 on the path to SimGrid 3
+  
+  [Arnaud]
+  (surf)
+   - Bug fix in the lmm_solver.
+  (msg)
+   - New! Interface to Paje (see http://www-id.imag.fr/Logiciels/paje/) 
+     through the function MSG_paje_output.
+   - New! Introducing two new functions MSG_process_kill() and MSG_process_killall().
+   - It is possible to bound the rate of a communication in MSG with 
+     MSG_task_put_bounded() (was already in the previous version but I had forgotten 
+     to write it in the changelog).
+   - Bug fix to let GRAS run on top of MSG until we move it directly on top
+     of the SURF.
+    
+  [Martin]
+  (infrastructure)
+   - Various cleanups to the autotools stuff
+   - Begin to move Gras examples to examples/gras/
+   - Let make distcheck work again (yeah!)
+  (documentation)
+   - documentation overhauled using doxygen. 
+     gtk-doc-tools is dead in SimGrid now.
+   - Automatically extract all existing logging categories, and add the list
+     to the documentation (long standing one, to say the less)
+  (gras)
+   - Cleanup the known architecture table. Reorder the entries to group what
+     should be, and use a more consistent naming scheme.
+     (some of the test dataset are still to be regenerated)
+   - New! Allow library to register globals on each process just as userdata
+     does. 
+      This is implemented using a xbt_dict and not a xbt_set, so we loose the
+       lookup time (for now).
+      Use it in msg and trp.
+      This cleans a lot the internals and helps enforcing privacy of the
+       headers between the gras components.
+   - New! Add a timer mechanism, not unlike cron(8) and at(1). 
+   - Bugfix: gras_os_time was delirious in RL.
+   - Bugfix: gras_trp_select/RL don't run into the wall when asked to select
+     onto 0 sockets.
+   - Reenable GRAS now that it works.
+
+ -- Arnaud Legrand <Arnaud.Legrand@imag.fr>  Mon, 14 Feb 2005 14:02:13 -0800
+
+SimGrid (2.90) unstable; urgency=low
+
+  Alpha 1 on the path to SimGrid 3
+
+  * It is a long time since the last release of SimGrid. I'm sorry about
+    that but as I had told you, I was rewriting a lot of things. I apologize 
+    to those who had been reporting bugs to me and that I had not answered. 
+    If your bug is still in the new version, please tell me. Here is a 
+    summary of the main changes.
+
+  * REVOLUTION 1: The SimGrid project has merged with the GRAS project
+    lead by Martin Quinson. As a consequence SimGrid gains a lot in
+    portability, speed, and a lot more but you'll figure it out later. 
+    SimGrid now comprises 3 different projects : MSG, GRAS and SMPI. 
+    I wanted to release the new MSG as soon as possible and I have 
+    broken GRAS, which is the reason why, for now, only MSG is fully 
+    functional. A laconic description of these projects is available 
+    in the documentation.
+  
+  * REVOLUTION 2: I have removed SG and I am now using a new simulation
+    kernel optimized for our needs (called SURF but only the developers
+    should use it). Hence, MSG is now roughly 30 times faster and I think
+    that by rewriting a little bit MSG, I could event speed it up a little
+    bit more. Beside the gain in speed, it is also much easier to encode a
+    new platform model with SURF than it was with SG. More to come...
+  
+  * REVOLUTION 3: I have tried to change a little as possible the API of
+    MSG but a few things really had to disappear. The main differences
+    with the previous version are :
+       1) no more m_links_t and the corresponding functions. Platforms are
+         directly read from a XML description and cannot be hard-coded
+         anymore. The same format is used for application deployment
+         description. The new format is described in the documentation. 
+         Have a look in tools/platform_generation. There is a tiny script 
+         that converts from the old platform format to the new one. Concerning
+         the application deployment format, parsing the old one is tricky.  
+         I think most of you should however be able to convert your files.  If 
+         it is really an issue, I can write a C code that does the conversion. 
+         Let me know.
+       2) the toolbox tbx does not exist anymore. We now have a library
+          with much more data-structures but without the hash-tables (we have 
+          dictionaries that are much faster).
+
+ -- Arnaud Legrand <Arnaud.Legrand@imag.fr>  Mon, 31 Jan 2005 10:45:53 -0800
+
+*****************************************************************************
+* Follows the old GRAS changelog. It does not follow the same syntax, but I *
+* don't feel like converting the oldies. (Mt)                                *
+*****************************************************************************
+
+2005-01-31 Arnaud
+  Version 2.90: "the long awaited one"
+  - Finished rewriting and debugging MSG. Rewrote the documentation.
+  - disable GRAS for now since it needs to be ported to the newest SG
+
+2004-12-16 Martin
+  - Finish the port to windows (using mingw32 for cross-compile)
+
+2004-11-28 Arnaud
+  - Main loop and datastructures of SURF. A cpu resource object is
+    functional. Surf can thus be used to create cpu's with variable
+    performance on which you can execute some actions.
+       
+2004-11-15 Martin Quinson
+  - Port to ARM. Simply added the alignment and size descriptions. Should
+    work, but the ARM machines are so slow that I didn't had the opportunity
+    to 'make check' over there yet.
+
+2004-11-15 Arnaud Legrand
+  - Trace manager now written. It uses a heap structure and is therefore
+    expected to be efficient. It may however be speeded up (particularly
+    when many events occur at the same date) by using red and black
+    trees. One day maybe... 
+  - Max-min linear system solver written. It uses a sparse matrix
+    structure taking advantage of its expected use. Most operations are
+    O(1) and free/calloc are called as few as possible. The computation of
+    the minimum could however be improved by using a red and black tree
+    (again ! ;).
+
+2004-11-03 Arnaud Legrand
+  - Rename every gras_* function that was in xbt/ to its xbt_
+    counterpart.
+  - Add a heap and a doubly-linked list to xbt
+  - Added a dichotomy to the dictionaries. make check works as well before
+    so I assume that the patch is correct. I do not know however if things
+    run effectively faster than before now. :)
+
+  Inclusion of the SimGrid tree in the GRAS one. The archive is renamed to
+  SimGrid, and the version number is bumped to 2.x
+
+2004-10-29 Martin Quinson
+  - Introduction of the remote errors. 
+    They are the result of a RMI/RPC on the remote machine.
+    ErrCodes being scalar values, you can't get the host on which those
+    errors did happen. Extending the error mechanism as in Gnome is possible.
+    No idea yet whether it is a good idea.
+    
+2004-10-28 Martin Quinson
+  - Interface revolution: the Starred Structure Eradication.
+    I used to do typedef struct {} toto_t; and then handle *toto_t.
+    Arnaud (and Oli) didn't like it, and I surrendered. Now, you have:
+      - ???_t is a valid type (builded with typedef)
+      - s_toto_t is a structure (access to fields with .)
+      - s_toto   is a structure needing 'struct' keyword to be used
+      - e_toto_t is an enum
+      -   toto_t is an 'object' (struct*)
+    Exemple:
+      typedef struct s_toto {} s_toto_t, *toto_t;
+      typedef enum {} e_toto_t;
+    Moreover, only toto_t (and e_toto_t) are public. The rest (mainly
+     s_toto_t) is private.
+    
+  - While I was at it, all gras_<obj>_free() functions want a gras_<obj>_t*
+    so that it can set the variable to NULL. It was so for dicts and sets,
+    it changed for dynars.
+    
+  - Fix a bunch of memleaks in dict_remove
+  - Fix a bug in sg/server_socket opening: it failed all the time.
+
+2004-10-07 Martin Quinson
+  - Speed up dynar lookup operation a bit.
+  
+    gras_dynar_get is dead. 
+    
+    Now, you can choose between gras_dynar_get_cpy (the old gras_dynar_get
+    but should be avoided for efficiency reasons) and gras_dynar_get_ptr
+    (which gives you the address of the stored data).
+    
+    gras_dynar_get_as is an helpful macro which allows you to retrieve a
+    copy of the data using an affectation to do the job and not a memcpy.
+    
+    int toto = gras_dynar_get_as(dyn,0,int); rewrites itself to
+    int toto = *(int*)gras_dynar_get_ptr(dyn,0);
+    
+    It does not really speedup the dynar test because they are
+    setting elements all the time (and look them seldom). But the dict does
+    far more lookup than setting.
+
+    So, this brings the dict_crash test from ~33s to ~25s (200000 elms).
+
+2004-10-05 Martin Quinson
+  - Allow to (en/dis)able the cycle detection at run time.
+  
+    Whether we should check for cycle or not is now a property of each
+    datatype. When you think there may be some cycle, use datadesc_cycle_set.
+    datadesc_cycle_unset allow to remove this property when previously set.
+    
+    Note that the cycle detection is off by default since it impacts the 
+    performance. Watch the data you feed GRAS with ;)
+    
+    This property is hereditary. Any element embedded in a structure having it
+    set have it set for the time of this data exchange.
+    
+    You should set it both on sender and receiver side. If you don't set it on
+    sender side, it will enter an endless loop. If you forget on receiver
+    side, the cycles won't be recreated after communication.
+    
+  - Header reorganization.
+    Kill gras_private.h, each submodule must load the headers it needs.
+
+2004-10-04 Martin Quinson
+  - Interface revolution: do not try to survive to malloc failure.
+  
+    Now, gras_malloc and friends call gras_abort() on failure.
+    As a conclusion, malloc_error is not a valid error anymore, and all
+      functions for which it was the only gras_error_t return value are
+      changed. They now return void, or there result directly. 
+    This simplify the API a lot.
+
+2004-09-29 Martin Quinson
+  - Re-enable raw sockets.
+    Created by gras_socket_{client,server}_ext;
+    Used with gras_raw_{send,recv}
+    No select possible.
+    
+    It should allow to kill the last bits of gras first version soon.
+  
+    This is not completely satisfactory yet (duplicate code with
+     chunk_{send,recv}; a bit out of the plugin mechanism), but it should
+     work. 
+
+  - Simplify transport plugin (internal) interface by not passing any
+    argument to _server and _client, but embedding them in the socket
+    struct directly. 
+
+2004-09-28 Martin Quinson
+  - Finish the port to AIX.
+    autoconf was my problem (segfault within the malloc replacement
+    function. No idea why)
+        
+2004-09-16 Martin Quinson
+  - Fix some size_t madness on 64bit architectures.
+  
+2004-09-08 Martin Quinson
+  - Reduce the number of system headers loaded, overload some more system
+    calls (such as malloc to cast the result of the system one, and work
+    properly on AIX)
+  - Fix and reintroduce the config support
+
+2004-09-07 Martin Quinson
+  - Source code reorganization to allow Arnaud to surf all over there.
+  - Allow to document the logging categories.
+  - Remove all uppercase from logging categories and useless cleanup in names.
+
+2004-08-18 Martin Quinson
+  Version 0.6.2 (protocol not changed; API changed)
+  - Interface cleanup: gras_msgtype_by_name returns the type (instead of a
+     gras_error_t), and NULL when not found. Functions expecting a msgtype
+     as argument (msg_wait; msg_send) deal with NULL argument by providing a
+     hopefully usefull message.
+  - Portability to prehistoric sparcs again
+
+2004-08-17 Martin Quinson
+  Version 0.6.1 (protocol not changed; ABI not changed)
+  - prealloc some buffers to speed things up
+
+2004-08-11 Martin Quinson
+  Version 0.6 (protocol not changed; ABI expended)
+  - The parsing macro can deal with the references, provided that you add
+    the relevant annotations (using GRAS_ANNOTE(size,field_name))
+
+2004-08-09 Martin Quinson
+  Version 0.5 (protocol not changed; ABI changed)
+  - Allow to off turn the cycle detection code in data exchange at
+    compilation time. It should be at run time, but I'm short of time (and
+    the config stuff is still broken). That way, we keep dict out of the
+    critical path, which is good because the performance is poor:
+     - search not dichotomial yet
+     - dynar give no way to access their content and memcpy everytime
+  - In composed data description (struct, ref and so on), stop foolness of
+    keeping the subtype's ID, but store the type itself. This keeps sets out
+    of the critical path, which is good since they rely on dynar and
+    dictionnaries. The only loose of that is that we cannot detect the
+    redeclaration of a structure/union with another content (but I'm not sure 
+    the code detected well this error before anyway). We still can detect
+    the redefinition discrepancy for the other types.
+  - Use a whole bunch of optimisation flags (plus -fno-strict-aliasing since
+    it breaks the code because of type-punning used all over the place).
+    This breaks on all non-gcc architectures (for now).
+    
+  All those changes (plus the buffer of last time) allow me to gain 2 order
+  of magnitude on cruel tests consisting of 800000 array of integers on two
+  level of a hierarchical structure (200 secondes -> 4 secondes)
+  
+  API change:
+    - the selector of reference must now return the type it points to, not
+      the ID of this type.
+
+2004-08-06 Martin Quinson
+  Version 0.4 (protocol changed; ABI not changed)
+  - Allow to pass --gras-log argument to processes in simulation mode. Really.
+  - New debugging level: trace (under debug) to see effect of GRAS_IN/OUT
+  - Implement a buffer transport, and use it by default (it relies on tcp in
+     real life and on sg in simulation).
+    That's a bit hackish since I had a new field to the structure to store
+     its data without interfering with the subtype ones. Inheritance
+     is tricky in C. And that's a kind of reverse inheritance with one class
+     derivating two classes. Or maybe a game with java interfaces. Anyway,
+     that's damn hard in C (at least).
+    Moreover, I got tired while trying to ensure plugin separation and
+     genericity in SG mode. MSG wants me to do weird things, so let's go for
+     cruel hacks (temporarily of course ;).
+     See comment in transport_private.h:71
+  - do not include all the _interface headers in private but in the files
+    which really need them (to cut the compilation time when they are
+    modified) 
+
+2004-07-26 Martin Quinson
+  Version 0.3 (protocol not changed; ABI changed)
+  - Major overhault of the datadesc interface to simplify it:
+    - shorted the function names:
+      s/gras_datadesc_declare_struct/gras_datadesc_struct/ and so on
+    - add a trivial way to push/pop integers into the cbps without malloc.
+      This allows to make really generic sub_type description, which simply
+        pop their size of the stack.
+    - add a function gras_datadesc_ref_pop_arr() which does what users want
+      most of the time: Declare a dynamic array (which pops its size of the
+      stack) and declare a reference to it. Poor name, but anyway.
+    - kill the post-send callback, add a post-receive one
+    
+2004-07-23 Martin Quinson
+  Version 0.2 (protocol changed; ABI changed)
+  - add some testing for cpbs in the test cases, and fix some more bugs.
+    This invalidate again the little64 data file, since I cannot regenerate
+    it myself.
+  - remove an awfull optimization in the logging stuff, allowing me to:
+    - understand it again
+    - learn gcc how to check that the argument match the provided format
+    - fix all errors revealed by gcc after that
+  - internal keys of dict are not \0 terminated. Deal with it properly in
+    loggings instead of segfaulting when the user want to see the logs :-/
+
+2004-07-22 Martin Quinson
+  - Fix some stupid bug preventing cbps (callback postit) from working
+
+2004-07-21 Martin Quinson
+  - Some documentation cleanups
+  - remove the useless last argument of msgtype_declare
+  - rename the Virtu functions to fit into the 'os' namespace
+  - move headers src/include -> src/include/gras/ and stop fooling with 
+    gras -> . symbolic link
+  - make distcheck is now successful
+
+2004-07-19 Martin Quinson
+  Version 0.1.1
+  - Build shared library also
+  - Install html doc to the right location
+  - stop removing maintainer files in make clean
+  - build tests only on make check
+  
+2004-07-13 Martin Quinson
+  version 0.1
+  - No major issue in previous version => change versionning schema
+  - Re-enable little64 convertion test now that Abdou kindly regenerated the
+    corresponding dataset.
+  
 2004-07-11 Martin Quinson
   version 0.0.4
   - Get it working with any kind of structure (we can compute the padding
@@ -6,7 +556,7 @@
   - Improvement to the remote testing toysuite
   
 2004-07-10 Martin Quinson
- [autoconf mecanism]
+ [autoconf mechanism]
   - get ride of a bunch of deprecated macros
   - actually run the test for two-compliment, not only compile it :-/
   - test whether the structures get packed (and bail out if yes. Damn.
      
 2004-04-19 Martin Quinson
  [Data description]
-   - register init/exit functions within gras module mecanism   
+   - register init/exit functions within gras module mechanism   
    - send/receive function. 
    Convertion is not implemented, but short-cutted if not needed.
    struct/array elements are sent one by one (instead of block-wise), but