fast forward [2006/05/13]. More languages are evaluated, but for now,
we do not feel a real demand for any other language. Please speak up!
-\section faq_installation Installing the SimGrid library
-
-Many people have been asking me questions on how to use SimGrid. Quite
-often, the questions were not really about SimGrid but on the
-installation process. This section is intended to help people that are
-not familiar with compiling C files under UNIX. If you follow these
-instructions and still have some troubles, drop an e-mail to
-<simgrid-user@lists.gforge.inria.fr>.
-
-\subsection faq_compiling Compiling SimGrid from a stable archive
-
-First of all, you need to download the latest version of SimGrid from
-<a href="http://gforge.inria.fr/frs/?group_id=12">here</a>.
-Suppose you have uncompressed SimGrid in some temporary location of
-your home directory (say <tt>/home/joe/tmp/simgrid-3.0.1 </tt>). The
-simplest way to use SimGrid is to install it in your home
-directory. Change your directory to
-<tt>/home/joe/tmp/simgrid-3.0.1</tt> and type
-
-\verbatim
-./configure --prefix=$HOME
-make
-make install
-\endverbatim
-
-If at some point, something fails, check the section \ref faq_trouble_compil .
-If it does not help, you can report this problem to the
-list but, please, avoid sending a laconic mail like "There is a problem. Is it
-okay?". Send the config.log file which is automatically generated by
-configure. Try to capture both the standard output and the error output of the
-<tt>make</tt> command with <tt>script</tt>. There is no way for us to help you
-without the relevant bits of information.
-
-Now, the following directory should have been created :
-
- \li <tt>/home/joe/doc/simgrid/html/</tt>
- \li <tt>/home/joe/lib/</tt>
- \li <tt>/home/joe/include/</tt>
-
-SimGrid is not a binary, it is a library. Both a static and a dynamic
-version are available. Here is what you can find if you try a <tt>ls
-/home/joe/lib</tt>:
-
-\verbatim libsimgrid.a libsimgrid.la libsimgrid.so libsimgrid.so.0 libsimgrid.so.0.0.1
-\endverbatim
-
-Thus, there is two ways to link your program with SimGrid:
- \li Either you use the static version, e.g
-\verbatim gcc libsimgrid.a -o MainProgram MainProgram.c
-\endverbatim
- In this case, all the SimGrid functions are directly
- included in <tt>MainProgram</tt> (hence a bigger binary).
- \li Either you use the dynamic version (the preferred method)
-\verbatim gcc -lsimgrid -o MainProgram MainProgram.c
-\endverbatim
- In this case, the SimGrid functions are not included in
- <tt>MainProgram</tt> and you need to set your environment
- variable in such a way that <tt>libsimgrid.so</tt> will be
- found at runtime. This can be done by adding the following
- line in your .bashrc (if you use bash and if you have
- installed the SimGrid libraries in your home directory):
-\verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH
-\endverbatim
-
-\subsection faq_compiling_java Java bindings don't get compiled
-
-The configure script detects automatically whether you have the
-softwares needed to use the Java bindings or not. At the end of the
-configure, you can see the configuration picked by the script, which
-should look similar to
-\verbatim Configuration of package simgrid' (version 3.3.4-svn) on
-little64 (=4):
-
- Compiler: gcc (version: )
-
- CFlags: -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3
- CPPFlags:
- LDFlags:
-
- Context backend: ucontext
- Compile Java: no
-
- Maintainer mode: no
- Supernovae mode: yes
-\endverbatim
-
-In this example, Java backends won't be compiled.
-
-On Debian-like systems (which includes ubuntu), you need the following
-packages: sun-java6-jdk libgcj10-dev. If you cannot find the
-libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before
-9.10) or libgcj11-dev (not released yet, but certainly one day).
-Please note that you need to activate the contrib and non-free
-repositories in Debian, and the universe ones in Ubuntu. Java comes at
-this price...
-
-\subsection faq_compiling_snapshoot SimGrid development snapshots
-
-We have very high standards on software quality, and we are reluctant releasing
-a stable release as long as there is still some known bug in the code base. In
-addition, we added quite an extensive test base, making sure that we correctly
-test the most important parts of the tool.
-
-As an unfortunate conclusion, there may be some time between the stable
-releases. If you want to benefit from the most recent features we introduced,
-but don't want to take the risk of an untested version from the SVN, then
-development snapshots are done for you.
-
-These are pre-releases of SimGrid that still fail some tests about features
-that almost nobody use, or on platforms not being in our core target (which is
-Linux, Mac, other Unixes and Windows, from the most important to the less
-one). That means that using this development releases should be safe for most
-users.
-
-These archives can be found on
-<a href="http://www.loria.fr/~quinson/simgrid.html">this web page</a>. Once you
-got the lastest archive, you can compile it just like any archive (see above).
-
-\subsection faq_compiling_svn Compiling SimGrid from the SVN
-
-The project development takes place in the SVN, where all changes are
-committed when they happen. Then every once in a while, we make sure that the
-code quality meets our standard and release an archive from the code in the
-SVN. We afterward go back to the development in the SVN. So, if you need a
-recently added feature and can afford some little problem with the stability
-of the lastest features, you may want to use the SVN version instead of a
-released one.
-
-For that, you first need to get the "simgrid" module from
-<a href="http://gforge.inria.fr/scm/?group_id=12">here</a>.
-
-You won't find any <tt>configure</tt> and a few other things
-(<tt>Makefile.in</tt>'s, documentation, ...) will be missing as well. The
-reason for that is that all these files have to be regenerated using the
-latest versions of <tt>autoconf</tt>, <tt>libtool</tt>, <tt>automake</tt>
-(>1.9) and <tt>doxygen</tt> (>1.4). To generate the <tt>configure</tt> and
-the <tt>Makefile.in</tt>'s, you just have to launch the <tt>bootstrap</tt>
-command that resides in the top of the source tree. Then just follow the
-instructions of Section \ref faq_compiling.
-
-We insist on the fact that you really need the latest versions of
-autoconf, automake and libtool. Doing this step on exotic architectures/systems
-(i.e. anything different from a recent linux distribution) may be
-... uncertain. If you need to compile the SVN version on a machine where all these
-dependencies are not met, the easiest is to do <tt>make dist</tt> in the SVN
-directory of another machine where all dependencies are met. It will create an
-archive you may deploy on other sites just as a regular stable release.
-
-In summary, the following commands will checkout the SVN, regenerate the
-configure script and friends, configure SimGrid and build it.
-
-\verbatim svn checkout svn://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk simgrid
-cd simgrid
-./bootstrap
-./configure --enable-maintainer-mode --prefix=<where to install SimGrid>
-make \endverbatim
-
-Then, if you want to install SimGrid on the current box, just do:
-\verbatim make install \endverbatim
-
-If you want to build an snapshot of the SVN to deploy it on another box (for
-example because the other machine don't have the autotools), do:
-\verbatim make dist \endverbatim
-
-Moreover, you should never call the autotools manually since you must run
-them in a specific order with specific arguments. Most of the times, the
-makefiles will automatically call the tools for you. When it's not possible
-(such as the first time you checkout the SVN), use the ./bootstrap command
-to call them explicitly.
-
-
-\subsection faq_setting_MSG Setting up your own MSG code
-
-Do not build your simulator by modifying the SimGrid examples. Go
-outside the SimGrid source tree and create your own working directory
-(say <tt>/home/joe/SimGrid/MyFirstScheduler/</tt>).
-
-Suppose your simulation has the following structure (remember it is
-just an example to illustrate a possible way to compile everything;
-feel free to organize it as you want).
-
- \li <tt>sched.h</tt>: a description of the core of the
- scheduler (i.e. which functions are can be used by the
- agents). For example we could find the following functions
- (master, forwarder, slave).
-
- \li <tt>sched.c</tt>: a C file including <tt>sched.h</tt> and
- implementing the core of the scheduler. Most of these
- functions use the MSG functions defined in section \ref
- msg_gos_functions.
-
- \li <tt>masterslave.c</tt>: a C file with the main function, i.e.
- the MSG initialization (MSG_global_init()), the platform
- creation (e.g. with MSG_create_environment()), the
- deployment phase (e.g. with MSG_function_register() and
- MSG_launch_application()) and the call to
- MSG_main()).
-
-To compile such a program, we suggest to use the following
-Makefile. It is a generic Makefile that we have used many times with
-our students when we teach the C language.
-
-\verbatim
-all: masterslave
-masterslave: masterslave.o sched.o
-
-INSTALL_PATH = $$HOME
-CC = gcc
-PEDANTIC_PARANOID_FREAK = -O0 -Wshadow -Wcast-align \
- -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \
- -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
- -Wmissing-noreturn -Wredundant-decls -Wnested-externs \
- -Wpointer-arith -Wwrite-strings -finline-functions
-REASONABLY_CAREFUL_DUDE = -Wall
-NO_PRAYER_FOR_THE_WICKED = -w -O2
-WARNINGS = $(REASONABLY_CAREFUL_DUDE)
-CFLAGS = -g $(WARNINGS)
-
-INCLUDES = -I$(INSTALL_PATH)/include
-DEFS = -L$(INSTALL_PATH)/lib/
-LDADD = -lm -lsimgrid
-LIBS =
-
-%: %.o
- $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@
-
-%.o: %.c
- $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $<
-
-clean:
- rm -f $(BIN_FILES) *.o *~
-.SUFFIXES:
-.PHONY : clean
-
-\endverbatim
-
-The first two lines indicates what should be build when typing make
-(<tt>masterslave</tt>) and of which files it is to be made of
-(<tt>masterslave.o</tt> and <tt>sched.o</tt>). This makefile assumes
-that you have set up correctly your <tt>LD_LIBRARY_PATH</tt> variable
-(look, there is a <tt>LDADD = -lm -lsimgrid</tt>). If you prefer using
-the static version, remove the <tt>-lsimgrid</tt> and add a
-<tt>$(INSTALL_PATH)/lib/libsimgrid.a</tt> on the next line, right
-after the <tt>LIBS = </tt>.
-
-More generally, if you have never written a Makefile by yourself, type
-in a terminal : <tt>info make</tt> and read the introduction. The
-previous example should be enough for a first try but you may want to
-perform some more complex compilations...
-
-\subsection faq_setting_GRAS Setting up your own GRAS code
-
-If you use the GRAS interface instead of the MSG one, then previous section
-is not the better source of information. Instead, you should check the GRAS
-tutorial in general, and the \ref GRAS_tut_tour_setup in particular.
-
-\section faq_cmake CMAKE
+\section faq_cmake Installing the SimGrid library with Cmake (since V3.4)
\subsection faq_intro Some generalitty
\subsubsection faq_intro2 Why cmake?
-CMake permits to developers to compil projects on different plateform. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports.
+CMake permits to developers to compil projects on different plateforms. Then many tools are embedded like ctest for making test, a link to cdash for vizualise results but also test coverage and bug reports.
\subsubsection faq_intro3 What cmake need?
\verbatim
"cmake -D[name]=[value] ... ./"
-[name] enable_gtnets [value] ON/OFF or TRUE/FALSE or 1/0
- enable_java ON/OFF or TRUE/FALSE or 1/0
- enable_lua ON/OFF or TRUE/FALSE or 1/0
- enable_ruby ON/OFF or TRUE/FALSE or 1/0
- enable_compile_optimizations ON/OFF or TRUE/FALSE or 1/0
- enable_compile_warnings ON/OFF or TRUE/FALSE or 1/0
- enable_smpi ON/OFF or TRUE/FALSE or 1/0
- enable_maintainer_mode ON/OFF or TRUE/FALSE or 1/0
- enable_supernovae ON/OFF or TRUE/FALSE or 1/0
- enable_tracing ON/OFF or TRUE/FALSE or 1/0
- enable_coverage ON/OFF or TRUE/FALSE or 1/0
- enable_memcheck ON/OFF or TRUE/FALSE or 1/0
- enable_model-checking ON/OFF or TRUE/FALSE or 1/0
-
- gtnets_path <path_to_gtnets_directory>
- prefix <path_to_install_directory>
- BIBTEX2HTML <path_to_bibtex2html>
- with_context auto/ucontext/pthread/window
+[name] enable_gtnets [value] ON/OFF or TRUE/FALSE or 1/0
+ enable_java ON/OFF or TRUE/FALSE or 1/0
+ enable_lua ON/OFF or TRUE/FALSE or 1/0
+ enable_ruby ON/OFF or TRUE/FALSE or 1/0
+ enable_compile_optimizations ON/OFF or TRUE/FALSE or 1/0
+ enable_compile_warnings ON/OFF or TRUE/FALSE or 1/0
+ enable_smpi ON/OFF or TRUE/FALSE or 1/0
+ enable_maintainer_mode ON/OFF or TRUE/FALSE or 1/0
+ enable_supernovae ON/OFF or TRUE/FALSE or 1/0
+ enable_tracing ON/OFF or TRUE/FALSE or 1/0
+ enable_coverage ON/OFF or TRUE/FALSE or 1/0
+ enable_memcheck ON/OFF or TRUE/FALSE or 1/0
+ enable_model-checking ON/OFF or TRUE/FALSE or 1/0
+ enable_doc ON/OFF or TRUE/FALSE or 1/0
+ gtnets_path <path_to_gtnets_directory>
+ prefix <path_to_install_directory>
+ BIBTEX2HTML <path_to_bibtex2html>
+ with_context auto/ucontext/pthread/window
+ pipol_user <pipol_username>
\endverbatim
\subsubsection faq_cmakeoption2 Options explaination
\li enable_smpi : Set to true if you want to use smpi lib. Actually on simgrid v3.4.1 Mac doesn't support lib smpi.
\li enable_maintainer_mode : set to true it remakes some files.
-\verbatim
-include/surf/simgrid_dtd.h
-include/xbt/graphxml.h
-src/cunit_unit.c
-src/ex_unit.c
-src/dynar_unit.c
-src/dict_unit.c
-src/set_unit.c
-src/swag_unit.c
-src/xbt_str_unit.c
-src/xbt_strbuff_unit.c
-src/xbt_sha_unit.c
-src/config_unit.c
-src/xbt_synchro_unit.c
-src/simgrid_units_main.c
-
-src/simdag/dax_dtd.c
-src/simdag/dax_dtd.h
-src/simdag/dax_dtd.l
-
-src/surf/simgrid_dtd.c
-src/surf/simgrid_dtd.l
-
-src/xbt/graphxml.c
-src/xbt/graphxml.l
-
-src/gras/DataDesc/ddt_parse.yy.c
-\endverbatim
\li enable_supernovae : set to true make one file for each lib and compile with those generated files.
-\verbatim
-/src/supernovae_sg.c
-/src/supernovae_gras.c
-/src/supernovae_smpi.c
-\endverbatim
\li enable_tracing : To enable the generation of simulation traces for visualization
\li enable_memcheck : When set to true this option enable tests for memcheck.
\li enable_model-checking : Enable the model checking when set to true.
+
+ \li enable_doc : Generate the documentation for simgrid with make command. (You can also make the doc manually with command : make html)
\li gtnets_path : Path to gtnets install directory (ex /usr)
\li BIBTEX2HTML : Path where is installed bibtex2html.
\li with context : specify which context the user wants to use.
+
+ \li pipol_user : specify your pipol username if you want to use the pipol-remote command.
\subsubsection faq_cmakeoption3 Initialisation
enable_coverage off
enable_memcheck off
enable_model-checking off
+enable_doc off
gtnets_path null
prefix null
BIBTEX2HTML null
with_context auto
+pipol_user null
\endverbatim
\subsubsection faq_cmakeoption4 Option's cache and how to reset?
If you want to test before make a commit you can simply make "ctest -D Experimental" and then you can visualize results submitted into Cdash. <a href="http://cdash.inria.fr/CDash/index.php?project=Simgrid">(Go to Cdash site)</a>.
-\subsubsection faq_cmakecompilation4 Examples for different mode.
+\subsubsection faq_cmakecompilation5 Examples for different mode.
\li Mode maintainer
target_link_libraries(get_sender simgrid m pthread -fprofile-arcs) #target_link_libraries(<name_of_targe> <dependencies>)
\endverbatim
-Then you have to modified <project/directory>/buildtools/Cmake/CMakeMakeExeLib.txt and add
+Then you have to modified <project/directory>/buildtools/Cmake/MakeExeLib.cmake and add
this line :
\verbatim
add_subdirectory(${PROJECT_DIRECTORY}/<path_where_is_CMakeList.txt>)
\subsubsection faq_cmakehowto2 Delete/add sources to lib.
-If you want modified, add or delete source files from a library you have to edit <project/directory>/buildtools/Cmake/CMakeDefinePackages.txt
+If you want modified, add or delete source files from a library you have to edit <project/directory>/buildtools/Cmake/DefinePackages.cmake
\verbatim
set(JMSG_JAVA_SRC
\subsubsection faq_cmakehowto3 Add test
-If you want modified, add or delete tests you have to edit <project/directory>/buildtools/Cmake/CMakeTest.txt
+If you want modified, add or delete tests you have to edit <project/directory>/buildtools/Cmake/AddTests.cmake
with this function : ADD_TEST(<name> <bin> <ARGS>)
\verbatim
add_test(test-simdag-1 ${PROJECT_DIRECTORY}/testsuite/simdag/sd_test --cfg=path:${PROJECT_DIRECTORY}/testsuite/simdag small_platform_variable.xml)
\endverbatim
-\subsection faq_cmakeExplain Explaination of sources files for cmake
+\subsection faq_PIPOL Pipol-remote
+
+Now we offer the possibility to test your local sources on pipol platforms before a commit. Of course you have to be user of pipol <a href="https://pipol.inria.fr/users/">(Account request)</a> cause you need to give your pipol_username to cmake. Here is a list of available systems :
+\verbatim
+ amd64_kvm-linux-debian-lenny
+ amd64_kvm-linux-debian-testing
+ amd64_kvm-windows-7
+ amd64-linux-centos-5.dd.gz
+ amd64-linux-debian-etch.dd.gz
+ amd64-linux-debian-lenny.dd.gz
+ amd64-linux-debian-testing.dd.gz
+ amd64-linux-fedora-core10.dd.gz
+ amd64-linux-fedora-core11.dd.gz
+ amd64-linux-fedora-core12.dd.gz
+ amd64-linux-fedora-core13.dd.gz
+ amd64-linux-fedora-core7.dd.gz
+ amd64-linux-fedora-core8.dd.gz
+ amd64-linux-fedora-core9.dd.gz
+ amd64-linux-mandriva-2007_springs_powerpack.dd.gz
+ amd64-linux-mandriva-2009_powerpack.dd.gz
+ amd64-linux-opensuse-11.dd.gz
+ amd64-linux-redhatEL-5.0.dd.gz
+ amd64-linux-suse-LES10.dd.gz
+ amd64-linux-ubuntu-feisty.dd.gz
+ amd64-linux-ubuntu-hardy.dd.gz
+ amd64-linux-ubuntu-intrepid.dd.gz
+ amd64-linux-ubuntu-jaunty.dd.gz
+ amd64-linux-ubuntu-karmic.dd.gz
+ amd64-linux-ubuntu-lucid.dd.gz
+ amd64-unix-freebsd-7.dd.gz
+ amd64-windows-server-2003-64bits.dd.gz
+ amd64-windows-server-2008-64bits.dd.gz
+ i386_kvm-linux-debian-lenny
+ i386_kvm-linux-debian-testing
+ i386_kvm-linux-fedora-core13
+ i386_kvm-windows-xp-pro-sp3
+ i386-linux-centos-5.dd.gz
+ i386-linux-debian-etch.dd.gz
+ i386-linux-debian-lenny.dd.gz
+ i386-linux-debian-testing.dd.gz
+ i386-linux-fedora-core10.dd.gz
+ i386-linux-fedora-core11.dd.gz
+ i386-linux-fedora-core12.dd.gz
+ i386-linux-fedora-core13.dd.gz
+ i386-linux-fedora-core7.dd.gz
+ i386-linux-fedora-core8.dd.gz
+ i386-linux-fedora-core9.dd.gz
+ i386-linux-mandriva-2007_springs_powerpack.dd.gz
+ i386-linux-mandriva-2009_powerpack.dd.gz
+ i386-linux-opensuse-11.dd.gz
+ i386-linux-redhatEL-5.0.dd.gz
+ i386-linux-suse-LES10.dd.gz
+ i386-linux-ubuntu-feisty.dd.gz
+ i386-linux-ubuntu-hardy.dd.gz
+ i386-linux-ubuntu-intrepid.dd.gz
+ i386-linux-ubuntu-jaunty.dd.gz
+ i386-linux-ubuntu-karmic.dd.gz
+ i386-linux-ubuntu-lucid.dd.gz
+ i386_mac-mac-osx-server-leopard.dd.gz
+ i386-unix-freebsd-7.dd.gz
+ i386-unix-opensolaris-10.dd.gz
+ i386-unix-opensolaris-11.dd.gz
+ i386-unix-solaris-10.dd.gz
+ ia64-linux-debian-lenny.dd
+ ia64-linux-fedora-core9.dd
+ ia64-linux-redhatEL-5.0.dd
+ x86_64_mac-mac-osx-server-snow-leopard.dd.gz
+ x86_mac-mac-osx-server-snow-leopard.dd.gz
+\endverbatim
+
+Two kind of uses are possible :
+\verbatim
+This command copy your source and execute a configure then a build and finish with tests.
+ bob@caraja:~/Developments/simgrid/tmp_build$ make <name_of_image>
+
+This command copy your source and execute a \"ctest -D Experimental\" and submit the result to cdash.
+ bob@caraja:~/Developments/simgrid/tmp_build$ make <name_of_image>_experimental
+\endverbatim
+All commands are resumed with :
+\verbatim
+bob@caraja:~/Developments/simgrid/tmp_build$ make pipol_experimental_list_images
+bob@caraja:~/Developments/simgrid/tmp_build$ make pipol_test_list_images
+\endverbatim
+
+\subsection faq_cmakeExplain Explaination of sources files for cmake
+
+\li CMakeLists.txt
+
+Those files are the "main parts". One located at the project directory call all the cmake sources files. The others
+are little projects called by the first for make examples.
+
+\li CompleteInFiles.cmake
+
+Complete all .in files and define Variables for h files
+
+\li GenerateDoc.cmake
+
+This file make the html documentation.
+
+\li MakeExeLib.cmake
+
+Here are callled all "CMakeLists.txt" for make executables and libraries.
+
+\li PrintArgs.cmake
+
+This file is called at the end of the build for summarize environment variables.
+
+\li DefinePackages.cmake
+
+Here is defined sources packages for compiling libs.
+
+\li Flags.cmake
+
+Defined flags which are used for compiling sources.
+
+\li Supernovae.cmake
+
+Here are made files for the supernovae mode.
+
+\li Distrib.cmake
+
+Here is defined packages for install simgrid and make a distribution.
+
+\li MaintainerMode.cmake
+
+Part where are generated source files for maintainer mode.
+
+\li Option.cmake
+
+Here are defined options and initialized values.
+
+\li AddTests.cmake
+
+All tests are listed.
+
+\li CTestConfig.cmake
+
+Properties which link tests with dashboard.
+
+\subsection faq_cmakeList List of files added for cmake
+
+Here is a list of files involved into cmake build (relative to project directory path) :
+\verbatim
+
+Cmake sources:
+ ./doc/CMakeLists.txt
+ ./buildtools/Cmake/AddTests.cmake
+ ./buildtools/Cmake/CompleteInFiles.cmake
+ ./buildtools/Cmake/CTestConfig.cmake
+ ./buildtools/Cmake/DefinePackages.cmake
+ ./buildtools/Cmake/Distrib.cmake
+ ./buildtools/Cmake/Flags.cmake
+ ./buildtools/Cmake/GenerateDocs.cmake
+ ./buildtools/Cmake/MaintainerMode.cmake
+ ./buildtools/Cmake/MakeExeLib.cmake
+ ./buildtools/Cmake/MakeExeLibWin.cmake
+ ./buildtools/Cmake/MakeJava.cmake
+ ./buildtools/Cmake/Option.cmake
+ ./buildtools/Cmake/PrintArgs.cmake
+ ./buildtools/Cmake/Supernovae.cmake
+
+CMakeLists for each binaries or examples:
+ ./CMakeLists.txt
+ ./src/CMakeLists.txt
+ ./teshsuite/gras/empty_main/CMakeLists.txt
+ ./teshsuite/gras/small_sleep/CMakeLists.txt
+ ./teshsuite/gras/datadesc/CMakeLists.txt
+ ./teshsuite/gras/msg_handle/CMakeLists.txt
+ ./teshsuite/simdag/CMakeLists.txt
+ ./teshsuite/simdag/partask/CMakeLists.txt
+ ./teshsuite/simdag/platforms/CMakeLists.txt
+ ./teshsuite/simdag/network/CMakeLists.txt
+ ./teshsuite/simdag/network/mxn/CMakeLists.txt
+ ./teshsuite/simdag/network/p2p/CMakeLists.txt
+ ./teshsuite/xbt/CMakeLists.txt
+ ./teshsuite/msg/CMakeLists.txt
+ ./tools/gras/CMakeLists.txt
+ ./tools/tesh/CMakeLists.txt
+ ./testsuite/simdag/CMakeLists.txt
+ ./testsuite/xbt/CMakeLists.txt
+ ./testsuite/surf/CMakeLists.txt
+ ./examples/gras/properties/CMakeLists.txt
+ ./examples/gras/ping/CMakeLists.txt
+ ./examples/gras/pmm/CMakeLists.txt
+ ./examples/gras/mmrpc/CMakeLists.txt
+ ./examples/gras/synchro/CMakeLists.txt
+ ./examples/gras/timer/CMakeLists.txt
+ ./examples/gras/mutual_exclusion/simple_token/CMakeLists.txt
+ ./examples/gras/spawn/CMakeLists.txt
+ ./examples/gras/chrono/CMakeLists.txt
+ ./examples/gras/rpc/CMakeLists.txt
+ ./examples/gras/all2all/CMakeLists.txt
+ ./examples/simdag/properties/CMakeLists.txt
+ ./examples/simdag/CMakeLists.txt
+ ./examples/simdag/metaxml/CMakeLists.txt
+ ./examples/simdag/dax/CMakeLists.txt
+ ./examples/smpi/CMakeLists.txt
+ ./examples/amok/bandwidth/CMakeLists.txt
+ ./examples/amok/saturate/CMakeLists.txt
+ ./examples/msg/priority/CMakeLists.txt
+ ./examples/msg/properties/CMakeLists.txt
+ ./examples/msg/migration/CMakeLists.txt
+ ./examples/msg/gtnets/CMakeLists.txt
+ ./examples/msg/parallel_task/CMakeLists.txt
+ ./examples/msg/trace/CMakeLists.txt
+ ./examples/msg/suspend/CMakeLists.txt
+ ./examples/msg/masterslave/CMakeLists.txt
+ ./examples/msg/actions/CMakeLists.txt
+ ./examples/msg/sendrecv/CMakeLists.txt
+\endverbatim
+
+\section faq_installation Installing the SimGrid library with Autotools (valid until V3.3.4)
+
+Many people have been asking me questions on how to use SimGrid. Quite
+often, the questions were not really about SimGrid but on the
+installation process. This section is intended to help people that are
+not familiar with compiling C files under UNIX. If you follow these
+instructions and still have some troubles, drop an e-mail to
+<simgrid-user@lists.gforge.inria.fr>.
+
+\subsection faq_compiling Compiling SimGrid from a stable archive
+
+First of all, you need to download the latest version of SimGrid from
+<a href="http://gforge.inria.fr/frs/?group_id=12">here</a>.
+Suppose you have uncompressed SimGrid in some temporary location of
+your home directory (say <tt>/home/joe/tmp/simgrid-3.0.1 </tt>). The
+simplest way to use SimGrid is to install it in your home
+directory. Change your directory to
+<tt>/home/joe/tmp/simgrid-3.0.1</tt> and type
+
+\verbatim
+./configure --prefix=$HOME
+make
+make install
+\endverbatim
+
+If at some point, something fails, check the section \ref faq_trouble_compil .
+If it does not help, you can report this problem to the
+list but, please, avoid sending a laconic mail like "There is a problem. Is it
+okay?". Send the config.log file which is automatically generated by
+configure. Try to capture both the standard output and the error output of the
+<tt>make</tt> command with <tt>script</tt>. There is no way for us to help you
+without the relevant bits of information.
+
+Now, the following directory should have been created :
+
+ \li <tt>/home/joe/doc/simgrid/html/</tt>
+ \li <tt>/home/joe/lib/</tt>
+ \li <tt>/home/joe/include/</tt>
+
+SimGrid is not a binary, it is a library. Both a static and a dynamic
+version are available. Here is what you can find if you try a <tt>ls
+/home/joe/lib</tt>:
+
+\verbatim libsimgrid.a libsimgrid.la libsimgrid.so libsimgrid.so.0 libsimgrid.so.0.0.1
+\endverbatim
+
+Thus, there is two ways to link your program with SimGrid:
+ \li Either you use the static version, e.g
+\verbatim gcc libsimgrid.a -o MainProgram MainProgram.c
+\endverbatim
+ In this case, all the SimGrid functions are directly
+ included in <tt>MainProgram</tt> (hence a bigger binary).
+ \li Either you use the dynamic version (the preferred method)
+\verbatim gcc -lsimgrid -o MainProgram MainProgram.c
+\endverbatim
+ In this case, the SimGrid functions are not included in
+ <tt>MainProgram</tt> and you need to set your environment
+ variable in such a way that <tt>libsimgrid.so</tt> will be
+ found at runtime. This can be done by adding the following
+ line in your .bashrc (if you use bash and if you have
+ installed the SimGrid libraries in your home directory):
+\verbatim export LD_LIBRARY_PATH=$HOME/lib/:$LD_LIBRARY_PATH
+\endverbatim
+
+\subsection faq_compiling_java Java bindings don't get compiled
+
+The configure script detects automatically whether you have the
+softwares needed to use the Java bindings or not. At the end of the
+configure, you can see the configuration picked by the script, which
+should look similar to
+\verbatim Configuration of package simgrid' (version 3.3.4-svn) on
+little64 (=4):
+
+ Compiler: gcc (version: )
+
+ CFlags: -O3 -finline-functions -funroll-loops -fno-strict-aliasing -Wall -Wunused -Wmissing-prototypes -Wmissing-declarations -Wpointer-arith -Wchar-subscripts -Wcomment -Wformat -Wwrite-strings -Wno-unused-function -Wno-unused-parameter -Wno-strict-aliasing -Wno-format-nonliteral -Werror -g3
+ CPPFlags:
+ LDFlags:
+
+ Context backend: ucontext
+ Compile Java: no
+
+ Maintainer mode: no
+ Supernovae mode: yes
+\endverbatim
+
+In this example, Java backends won't be compiled.
+
+On Debian-like systems (which includes ubuntu), you need the following
+packages: sun-java6-jdk libgcj10-dev. If you cannot find the
+libgcj10-dev, try another version, like libgcj9-dev (on Ubuntu before
+9.10) or libgcj11-dev (not released yet, but certainly one day).
+Please note that you need to activate the contrib and non-free
+repositories in Debian, and the universe ones in Ubuntu. Java comes at
+this price...
+
+\subsection faq_compiling_snapshoot SimGrid development snapshots
+
+We have very high standards on software quality, and we are reluctant releasing
+a stable release as long as there is still some known bug in the code base. In
+addition, we added quite an extensive test base, making sure that we correctly
+test the most important parts of the tool.
+
+As an unfortunate conclusion, there may be some time between the stable
+releases. If you want to benefit from the most recent features we introduced,
+but don't want to take the risk of an untested version from the SVN, then
+development snapshots are done for you.
+
+These are pre-releases of SimGrid that still fail some tests about features
+that almost nobody use, or on platforms not being in our core target (which is
+Linux, Mac, other Unixes and Windows, from the most important to the less
+one). That means that using this development releases should be safe for most
+users.
+
+These archives can be found on
+<a href="http://www.loria.fr/~quinson/simgrid.html">this web page</a>. Once you
+got the lastest archive, you can compile it just like any archive (see above).
-\li CMakeLists.txt
+\subsection faq_compiling_svn Compiling SimGrid from the SVN
-Those files are the "main parts". One located at the project directory call all the cmake sources files. The others
-are little projects called by the first for make examples.
+The project development takes place in the SVN, where all changes are
+committed when they happen. Then every once in a while, we make sure that the
+code quality meets our standard and release an archive from the code in the
+SVN. We afterward go back to the development in the SVN. So, if you need a
+recently added feature and can afford some little problem with the stability
+of the lastest features, you may want to use the SVN version instead of a
+released one.
-\li CMakeCompleteInFiles.txt
+For that, you first need to get the "simgrid" module from
+<a href="http://gforge.inria.fr/scm/?group_id=12">here</a>.
-Complete all .in files and define Variables for h files
+You won't find any <tt>configure</tt> and a few other things
+(<tt>Makefile.in</tt>'s, documentation, ...) will be missing as well. The
+reason for that is that all these files have to be regenerated using the
+latest versions of <tt>autoconf</tt>, <tt>libtool</tt>, <tt>automake</tt>
+(>1.9) and <tt>doxygen</tt> (>1.4). To generate the <tt>configure</tt> and
+the <tt>Makefile.in</tt>'s, you just have to launch the <tt>bootstrap</tt>
+command that resides in the top of the source tree. Then just follow the
+instructions of Section \ref faq_compiling.
-\li CMakeDocs.txt
+We insist on the fact that you really need the latest versions of
+autoconf, automake and libtool. Doing this step on exotic architectures/systems
+(i.e. anything different from a recent linux distribution) may be
+... uncertain. If you need to compile the SVN version on a machine where all these
+dependencies are not met, the easiest is to do <tt>make dist</tt> in the SVN
+directory of another machine where all dependencies are met. It will create an
+archive you may deploy on other sites just as a regular stable release.
-This file make the html documentation.
+In summary, the following commands will checkout the SVN, regenerate the
+configure script and friends, configure SimGrid and build it.
-\li CMakeMakeExeLib.txt
+\verbatim svn checkout svn://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk simgrid
+cd simgrid
+./bootstrap
+./configure --enable-maintainer-mode --prefix=<where to install SimGrid>
+make \endverbatim
-Here are callled all "CMakeLists.txt" for make executables and libraries.
+Then, if you want to install SimGrid on the current box, just do:
+\verbatim make install \endverbatim
-\li CMakePrintArgs.txt
+If you want to build an snapshot of the SVN to deploy it on another box (for
+example because the other machine don't have the autotools), do:
+\verbatim make dist \endverbatim
-This file is called at the end of the build for summarize environment variables.
+Moreover, you should never call the autotools manually since you must run
+them in a specific order with specific arguments. Most of the times, the
+makefiles will automatically call the tools for you. When it's not possible
+(such as the first time you checkout the SVN), use the ./bootstrap command
+to call them explicitly.
-\li CMakeDefinePackages.txt
-Here is defined sources packages for compiling libs.
+\subsection faq_setting_MSG Setting up your own MSG code
-\li CMakeFlags.txt
+Do not build your simulator by modifying the SimGrid examples. Go
+outside the SimGrid source tree and create your own working directory
+(say <tt>/home/joe/SimGrid/MyFirstScheduler/</tt>).
-Defined flags which are used for compiling sources.
+Suppose your simulation has the following structure (remember it is
+just an example to illustrate a possible way to compile everything;
+feel free to organize it as you want).
-\li CMakeSupernovae.txt
+ \li <tt>sched.h</tt>: a description of the core of the
+ scheduler (i.e. which functions are can be used by the
+ agents). For example we could find the following functions
+ (master, forwarder, slave).
-Here are made files for the supernovae mode.
+ \li <tt>sched.c</tt>: a C file including <tt>sched.h</tt> and
+ implementing the core of the scheduler. Most of these
+ functions use the MSG functions defined in section \ref
+ msg_gos_functions.
-\li CMakeDistrib.txt
+ \li <tt>masterslave.c</tt>: a C file with the main function, i.e.
+ the MSG initialization (MSG_global_init()), the platform
+ creation (e.g. with MSG_create_environment()), the
+ deployment phase (e.g. with MSG_function_register() and
+ MSG_launch_application()) and the call to
+ MSG_main()).
-Here is defined packages for install simgrid and make a distribution.
+To compile such a program, we suggest to use the following
+Makefile. It is a generic Makefile that we have used many times with
+our students when we teach the C language.
-\li CMakeMaintainerMode.txt
+\verbatim
+all: masterslave
+masterslave: masterslave.o sched.o
-Part where are generated source files for maintainer mode.
+INSTALL_PATH = $$HOME
+CC = gcc
+PEDANTIC_PARANOID_FREAK = -O0 -Wshadow -Wcast-align \
+ -Waggregate-return -Wmissing-prototypes -Wmissing-declarations \
+ -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations \
+ -Wmissing-noreturn -Wredundant-decls -Wnested-externs \
+ -Wpointer-arith -Wwrite-strings -finline-functions
+REASONABLY_CAREFUL_DUDE = -Wall
+NO_PRAYER_FOR_THE_WICKED = -w -O2
+WARNINGS = $(REASONABLY_CAREFUL_DUDE)
+CFLAGS = -g $(WARNINGS)
-\li CMakeOption.txt
+INCLUDES = -I$(INSTALL_PATH)/include
+DEFS = -L$(INSTALL_PATH)/lib/
+LDADD = -lm -lsimgrid
+LIBS =
-Here are defined options and initialized values.
+%: %.o
+ $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) $^ $(LIBS) $(LDADD) -o $@
-\li CMakeTest.txt
+%.o: %.c
+ $(CC) $(INCLUDES) $(DEFS) $(CFLAGS) -c -o $@ $<
-All tests are listed.
+clean:
+ rm -f $(BIN_FILES) *.o *~
+.SUFFIXES:
+.PHONY : clean
-\li CTestConfig.cmake
+\endverbatim
-Properties which link tests with dashboard.
+The first two lines indicates what should be build when typing make
+(<tt>masterslave</tt>) and of which files it is to be made of
+(<tt>masterslave.o</tt> and <tt>sched.o</tt>). This makefile assumes
+that you have set up correctly your <tt>LD_LIBRARY_PATH</tt> variable
+(look, there is a <tt>LDADD = -lm -lsimgrid</tt>). If you prefer using
+the static version, remove the <tt>-lsimgrid</tt> and add a
+<tt>$(INSTALL_PATH)/lib/libsimgrid.a</tt> on the next line, right
+after the <tt>LIBS = </tt>.
-\subsection faq_cmakeList List of files added for cmake
+More generally, if you have never written a Makefile by yourself, type
+in a terminal : <tt>info make</tt> and read the introduction. The
+previous example should be enough for a first try but you may want to
+perform some more complex compilations...
-Here is a list of files involved into cmake build (relative to project directory path) :
-\verbatim
+\subsection faq_setting_GRAS Setting up your own GRAS code
-Cmake sources:
- ./doc/CMakeLists.txt
- ./buildtools/Cmake/AddTests.cmake
- ./buildtools/Cmake/CompleteInFiles.cmake
- ./buildtools/Cmake/CTestConfig.cmake
- ./buildtools/Cmake/DefinePackages.cmake
- ./buildtools/Cmake/Distrib.cmake
- ./buildtools/Cmake/Flags.cmake
- ./buildtools/Cmake/GenerateDocs.cmake
- ./buildtools/Cmake/MaintainerMode.cmake
- ./buildtools/Cmake/MakeExeLib.cmake
- ./buildtools/Cmake/MakeJava.cmake
- ./buildtools/Cmake/Option.cmake
- ./buildtools/Cmake/PrintArgs.cmake
- ./buildtools/Cmake/Supernovae.cmake
-
-CMakeLists for each binaries or examples:
- ./CMakeLists.txt
- ./src/CMakeLists.txt
- ./teshsuite/gras/empty_main/CMakeLists.txt
- ./teshsuite/gras/small_sleep/CMakeLists.txt
- ./teshsuite/gras/datadesc/CMakeLists.txt
- ./teshsuite/gras/msg_handle/CMakeLists.txt
- ./teshsuite/simdag/CMakeLists.txt
- ./teshsuite/simdag/partask/CMakeLists.txt
- ./teshsuite/simdag/platforms/CMakeLists.txt
- ./teshsuite/simdag/network/CMakeLists.txt
- ./teshsuite/simdag/network/mxn/CMakeLists.txt
- ./teshsuite/simdag/network/p2p/CMakeLists.txt
- ./teshsuite/xbt/CMakeLists.txt
- ./teshsuite/msg/CMakeLists.txt
- ./tools/gras/CMakeLists.txt
- ./tools/tesh/CMakeLists.txt
- ./testsuite/simdag/CMakeLists.txt
- ./testsuite/xbt/CMakeLists.txt
- ./testsuite/surf/CMakeLists.txt
- ./examples/gras/properties/CMakeLists.txt
- ./examples/gras/ping/CMakeLists.txt
- ./examples/gras/pmm/CMakeLists.txt
- ./examples/gras/mmrpc/CMakeLists.txt
- ./examples/gras/synchro/CMakeLists.txt
- ./examples/gras/timer/CMakeLists.txt
- ./examples/gras/mutual_exclusion/simple_token/CMakeLists.txt
- ./examples/gras/spawn/CMakeLists.txt
- ./examples/gras/chrono/CMakeLists.txt
- ./examples/gras/rpc/CMakeLists.txt
- ./examples/gras/all2all/CMakeLists.txt
- ./examples/simdag/properties/CMakeLists.txt
- ./examples/simdag/CMakeLists.txt
- ./examples/simdag/metaxml/CMakeLists.txt
- ./examples/simdag/dax/CMakeLists.txt
- ./examples/smpi/CMakeLists.txt
- ./examples/amok/bandwidth/CMakeLists.txt
- ./examples/amok/saturate/CMakeLists.txt
- ./examples/msg/priority/CMakeLists.txt
- ./examples/msg/properties/CMakeLists.txt
- ./examples/msg/migration/CMakeLists.txt
- ./examples/msg/gtnets/CMakeLists.txt
- ./examples/msg/parallel_task/CMakeLists.txt
- ./examples/msg/trace/CMakeLists.txt
- ./examples/msg/suspend/CMakeLists.txt
- ./examples/msg/masterslave/CMakeLists.txt
- ./examples/msg/actions/CMakeLists.txt
- ./examples/msg/sendrecv/CMakeLists.txt
-\endverbatim
+If you use the GRAS interface instead of the MSG one, then previous section
+is not the better source of information. Instead, you should check the GRAS
+tutorial in general, and the \ref GRAS_tut_tour_setup in particular.
\section faq_howto Feature related questions
\subsubsection faq_MIA_asynchronous I want to do asynchronous communications in MSG
-Up until now, there is no asynchronous communications in MSG. However,
-you can create as many process as you want so you should be able to do
-whatever you want... I've written a queue module to help implementing
-some asynchronous communications at low cost (creating thousands of
-process only to handle communications may be problematic in term of
-performance at some point). I'll add it in the distribution asap.
+In the past (version <= 3.4), there was no function to perform asynchronous communications.
+It could easily be implemented by creating new process when needed though. Since version 3.5,
+we have introduced the following functions:
+ - MSG_task_isend()
+ - MSG_task_irecv()
+ - MSG_comm_test()
+ - MSG_comm_wait()
+ - MSG_comm_waitall()
+ - MSG_comm_waitany()
+ - MSG_comm_destroy()
+
+We refer you to the description of these functions for more details on their usage as well
+as to the exemple section on \ref MSG_ex_asynchronous_communications.
\subsubsection faq_MIA_thread_synchronization I need to synchronize my MSG processes
-You obviously cannot use pthread_mutexes of pthread_conds. The best
-thing would be to propose similar structures. Unfortunately, we
-haven't found time to do it yet. However you can try to play with
-MSG_process_suspend() and MSG_process_resume(). You can even do some
-synchronization with fake communications (using MSG_task_get(),
+You obviously cannot use pthread_mutexes of pthread_conds since we handle every
+scheduling related decision within SimGrid.
+
+In the past (version <=3.3.4) you could do it by playing with
+MSG_process_suspend() and MSG_process_resume() or with fake communications (using MSG_task_get(),
MSG_task_put() and MSG_task_Iprobe()).
+Since version 3.4, you can use classical synchronization structures. See page \ref XBT_synchro or simply check in
+include/xbt/synchro_core.h.
+
\subsubsection faq_MIA_host_load Where is the get_host_load function hidden in MSG?
There is no such thing because its semantic wouldn't be really
SimGrid behavior. In particular, you can change the default cpu and
network models...
+\subsubsection faq_simgrid_configuration_fullduplex Using Fullduplex
+
+Experimental fullduplex support is now available on the svn branch. In order to fullduple to work your platform must have two links for each pair
+of interconnected hosts, see an example here:
+\verbatim
+ simgrid_svn_sources/exemples/msg/gtnets/fullduplex-p.xml
+\endverbatim
+
+Using fullduplex support ongoing and incoming communication flows are
+treated independently for most models. The exception is the LV08 model which
+adds 0.05 of usage on the opposite direction for each new created flow. This
+can be useful to simulate some important TCP phenomena such as ack compression.
+
+Running a fullduplex example:
+\verbatim
+ cd simgrid_svn_sources/exemples/msg/gtnets
+ ./gtnets fullduplex-p.xml fullduplex-d.xml --cfg=fullduplex:1
+\endverbatim
+
+
+
+
+
\subsubsection faq_simgrid_configuration_gtnets Using GTNetS
It is possible to use a packet-level network simulator
- <b>Enable GTNetS support in SimGrid</b>
+
+In order to enable gtnets with simgrid you have to give where is gtnets. (path to <gtnets_path>/lib and <gtnets_path>/include)
\verbatim
+ Since v3.4 (with cmake)
+ cmake . -Dgtnets_path=/<userhome>/usr
+
+ Until v3.4 (with autotools)
./configure --with-gtnets=/<userhome>/usr
\endverbatim
runntime with the following options:</b>
\verbatim
+ Since v3.4 (with cmake)
+ cd simgrid
+ make
+ ctest -R gtnets
+
+ Until v3.4 (with autotools)
cd simgrid/example/msg/
make
make check
\subsubsubsection Mandatory Functions
-\li <b>\c TRACE_start (const char *filename)</b>: This is the first function to
-be called. It receives a single argument as parameter that contains the name of
-the file that will hold the trace in the end of the simulation. It returns 0 if
-everything was properly initialized, 1 otherwise. All trace functions called
-before TRACE_start do nothing.
+\li <b>\c TRACE_start ()</b>: This is the first function to
+be called. It returns 0 if everything was properly initialized, 1 otherwise.
+All trace functions called before TRACE_start do nothing.
\li <b>\c TRACE_category (const char *category)</b>: This function should be used
to define a user category. The category can be used to differentiate the tasks
that will be used when these functions are called is the one returned by
the function \c MSG_host_self().
+\subsubsection faq_tracing_options Tracing configuration Options
+
+These are the options accepted by the tracing system of SimGrid:
+
+\li <b>\c tracing/filename</b>: use this to specify the name of the trace file
+that will be created during the simulation. For example, after the binary
+of your simulator, you can pass as parameter this:
+\verbatim
+--cfg=tracing/filename:mytracefile.trace
+\endverbatim
+in order to trace the behavior of the simulation in a file with the name
+mytracefile.trace.
+
+\li <b>\c tracing/platform</b>: use this to activate the tracing of the
+platform. For example, you can pass as parameter to your simulator:
+\verbatim
+--cfg=tracing/platform:1
+\endverbatim
+to trace the platform utilization by the categories you declared in your
+simulator. By default, this options is set to 0.
+
\subsubsection faq_tracing_example Example of Instrumentation
A simplified example using the tracing mandatory functions.
\verbatim
int main (int argc, char **argv)
{
- TRACE_start ("traced_simulation.trace");
+ MSG_global_init (&argc, &argv);
+
+ //note that TRACE_start must be called after MSG_global_init
+ TRACE_start ();
TRACE_category ("request");
TRACE_category ("computation");
TRACE_category ("finalize");
-
- MSG_global_init (&argc, &argv);
//(... after deployment ...)
For <em>LINK</em> we have:
\verbatim
LINK = {
- src = SrcHost;
- dst = DstHost;
+ src = source;
+ dst = destination;
size = bandwidth;
scale = global;
For the types specified in the <em>edge</em> parameter (such as <em>LINK</em>),
the configuration must contain two additional parameters: <em>src</em> and
<em>dst</em> that are used to properly identify which nodes this edge is
-connecting. The values <em>SrcHost</em> and <em>DstHost</em> are always present
+connecting. The values <em>source</em> and <em>destination</em> are always present
in the SimGrid trace file and should not be changed in the configuration. The
parameter <em>size</em> for the LINK, in this case, is configured as the
variable <em>bandwidth</em>, with a <em>global</em> scale. The scale meaning
};
LINK = {
- src = SrcHost;
- dst = DstHost;
+ src = source;
+ dst = destination;
size = bandwidth;
scale = global;
};
};
LINK = {
- src = SrcHost;
- dst = DstHost;
+ src = source;
+ dst = destination;
size = bandwidth;
scale = global;
Most of Simgrid modules require a good level in C programming ,
since simgrid is used to be as standard C library .
Sometime ( for some reason or another ) developers prefer using some kind of « easy scripts »
- (something like … lua ? Ruby ? ...?) or a language easier to code with ( Java ? ) for their works ,
+ (something like … lua ? Ruby ? ...?) or a language easier to code with ( Java ? ) for their works,
which avoid dealing with C errors , and sometime an important gain of time (coding-time?) .
-Besides Java Binding , Lua and Ruby bindings are available now( since version 3.4 of Simgrid )
-for MSG Module , and we are currenlty working on bindings for other modules .
+Besides Java Binding, Lua and Ruby bindings are available now( since version 3.4 of Simgrid )
+for MSG Module, and we are currenlty working on bindings for other modules .
\subsubsection faq_binding_lua_about What is lua ?
Lua (Moon for portuguese !) is a lightweight, reflective, imperative and functional programming language,
designed as a scripting language with extensible semantics as a primary goal.(see official web site <a href="http://www.lua.org">here</a>)
\subsubsection faq_binding_lua_why Why lua ?
-Lua is a fast,portable and powerful script language , quite simple to use for developpers .
+Lua is a fast,portable and powerful script language, quite simple to use for developpers .
it combines procedural features with powerful data description facilities,
by using a simple, yet powerful, mechanism of tables.
Lua has a relatively simple C API compared to other scripting languages,
and accordingly it provides a robust, easy to use it.
\subsubsection faq_binding_lua_simgrid How to use lua in Simgrid ?
-Actually , the use of lua in Simgrid is quite simple , you have just to follow the same steps as coding with C in Simgird ,
- but this time , code with Lua ;) :
+Actually , the use of lua in Simgrid is quite simple, you have just to follow the same steps as coding with C in Simgird,
+ but this time, code with Lua ;) :
- Coding functions coresponding to each process
- loading the platforme/deployment XML file that describe the environment of simulation
- and … Running the Simulation !!!
+\dontinclude lua/master_slave.lua
\subsubsection faq_binding_lua_example_master_slave Master/Slave Example
+
\li Master Code
-\verbatim
-function Master(...)
- nb_task = arg[1];
- comp_size = arg[2];
- comm_size = arg[3];
- slave_count = arg[4]
- -- Dispatch the tasks
- for i=1,nb_task do
- tk = simgrid.Task.new("Task "..i,comp_size,comm_size);
- alias = "slave "..(i%slave_count);
- simgrid.info("Master sending ’" .. simgrid.Task.name(tk) .."’ To ’" .. alias .."’");
- simgrid.Task.send(tk,alias);
- simgrid.info("Master done sending ’".. simgrid.Task.name(tk) .."’ To ’" .. alias .."’");
- end
- -- Sending Finalize Message To Others
- for i=0,slave_count-1 do
- alias = "slave "..i;
- simgrid.info("Master: sending finalize to "..alias);
- finalize = simgrid.Task.new("finalize",comp_size,comm_size);
- simgrid.Task.send(finalize,alias)
- end
-end
-\endverbatim
-we mainly use simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task ,
- then simgrid.Task.send(task,alias) to send it .
+ \until end_of_master
+we mainly use simgrid.Task.new(task_name,computation_size,communication_size) to create our MSG Task,
+ then simgrid.Task.send(task,alias) to send it.
we use also simgrid.Task.name(task), to get the task's name .
\li Slave Code
-\verbatim
-function Slave(...)
- local my_mailbox="slave "..arg[1]
- while true do
- local tk = simgrid.Task.recv(my_mailbox);
- if (simgrid.Task.name(tk) == "finalize") then
- simgrid.info("Slave ’" ..my_mailbox.."’ got finalize msg");
- break
- end
- simgrid.Task.execute(tk)
- end
- simgrid.info("Slave ’" ..my_mailbox.."’: I’m Done . See You !!");
-end
-\endverbatim
-Here , we could see how we use simgrid.Task.recv(alias) to receive a task with a specific alias ,
+\until end_of_slave
+Here, we could see how we use simgrid.Task.recv(alias) to receive a task with a specific alias,
this function return directly the task recevied .
\li Set Environmenet and run application
-\verbatim
-require "simgrid"
-simgrid.platform("my_platform.xml")
-simgrid.application("my_deployment.xml")
-simgrid.run()
-simgrid.info("Simulation’s over.See you.")
-simgrid.clean()
-\endverbatim
+\until simgrid.clean()
\subsubsection faq_binding_lua_example_data Exchanging Data
-You can also exchange data between Process using lua .for that , you have to deal with lua task as a table ,
-since lua is based itself on a mechanism of tables ,
-so you can exchange any kind of data ( tables, matrix , strings … ) between process via tasks.
+You can also exchange data between Process using lua. for that, you have to deal with lua task as a table,
+since lua is based itself on a mechanism of tables,
+so you can exchange any kind of data ( tables, matrix, strings … ) between process via tasks.
\li Sender process
\verbatim
…
simgrid.Task.send(task,alias)
\endverbatim
- After creating task , we associate to it various kind of data with a specific key , ( string in this case)
- to distinguish between data variables . Via this key the receiver could access easily to datas .
+ After creating task, we associate to it various kind of data with a specific key,( string in this case)
+ to distinguish between data variables. Via this key the receiver could access easily to datas.
\li Receiver processe
sender_message = task['message']
...
\endverbatim
- Note that in lua , both sender and receiver share the same lua task !
- So that the receiver could joint data directly on the received task without sending it back .
+ Note that in lua, both sender and receiver share the same lua task!
+ So that the receiver could joint data directly on the received task without sending it back.
You can find a complet example ( matrix multiplication case ) in the file example/lua/mult_matrix.lua
\subsubsection faq_binding_lua_example_bypass Bypass XML
- maybe you wonder if there is a way to bypass the XML files ,
- and describe your platform directly from the code , with lua bindings it's Possible !! how ?
+ maybe you wonder if there is a way to bypass the XML files,
+ and describe your platform directly from the code, with lua bindings it's Possible !! how ?
We provide some additional (tricky?) functions in lua that allows you to set up your own platform without using the XML files
- ( this can be useful for large platforms , so a simple for loop will avoid you to deal with an annoying XML File ;) )
+ ( this can be useful for large platforms, so a simple for loop will avoid you to deal with an annoying XML File ;) )
\li set Hosts
\verbatim
- simgrid.Host.new("Tremblay",98095000);
- simgrid.Host.new("Jupiter",76296000);
- simgrid.Host.new("Fafard",76296000);
- simgrid.Host.new("Ginette",48492000);
- simgrid.Host.new("Bourassa",48492000);
+ simgrid.Host.new{id="Tremblay",power=98095000};
+ simgrid.Host.new{id="Jupiter",power=76296000};
+ simgrid.Host.new{id="Fafard",power=76296000};
+ simgrid.Host.new{id="Ginette",power=48492000};
+ simgrid.Host.new{id="Bourassa",power=48492000};
\endverbatim
- we use simgrid.Host.new(host_id,power) to instanciate our hosts.
+ we use simgrid.Host.new{id=id_host,power=power_host} to instanciate our hosts.
\li set Links
\verbatim
for i=0,11 do
- simgrid.Link.new(i,252750+ i*768,0.000270544+i*0.087); -- some crazy values ;)
+ simgrid.Link.new{id=i,bandwidth=252750+ i*768,latency=0.000270544+i*0.087}; -- some crazy values ;)
end
\endverbatim
- we used simgrid.Link.new(link_id,bandwidth,latency) with a simple for loop to create all links we need ( much easier than XML hein ? )
+ we used simgrid.Link.new{id=link_id,bandwidth=bw,latency=lat} with a simple for loop to create all links we need (much easier than XML hein ?)
\li set Routes
\verbatim
simgrid.Route.new("Jupiter","Bourassa",8,{"0","1","2","3","4","6","7","9"});
...
\endverbatim
- for each host you have to specify which route to choose to access to the rest of hosts connected in the grid .
+ for each host you have to specify which route to choose to access to the rest of hosts connected in the grid.
\li Save platform
\verbatim
simgrid.register_platform();
\endverbatim
-Don't forget to register your platform , that SURF callbacks starts their work ;)
+Don't forget to register your platform, that SURF callbacks starts their work ;)
\li set application
\verbatim
simgrid.Host.setFunction("Fafard","Slave",1,{"2"});
simgrid.Host.setFunction("Ginette","Slave",1,{"3"});
\endverbatim
- you don't need to use a deployment XML file , thanks to simgrid.Host.setFunction(host_id,function,args_number,args_list)
+ you don't need to use a deployment XML file, thanks to simgrid.Host.setFunction(host_id,function,args_number,args_list)
you can associate functions for each host with arguments if needed .
\li
\verbatim
simgrid.register_application();
\endverbatim
-Yes , Here too you have to resgiter your application before running the simulation .
+Yes, Here too you have to resgiter your application before running the simulation.
the full example is distributed in the file examples/lua/master_slave_bypass.lua
\subsection faq_binding_ruby Ruby Binding
-\subsubsection faq_binding_ruby_about What is Ruby ?
-Ruby is a dynamic, reflective, general purpose object-oriented programming language that combines syntax inspired by Perl with Smalltalk-like features.
-Ruby supports multiple programming paradigms, including functional, object oriented, imperative and reflective. It also has a dynamic type system and automatic memory management;
-it is therefore similar in varying respects to Python, Perl, Lisp, Dylan, Pike, and CLU.(see official web site <a href="http://ruby-lang.org">here</a>)
\subsubsection faq_binding_ruby_simgrid Use Ruby in Simgrid
-Since v3.4 , the use of ruby in simgrid is available for the MSG Module .
-you can find almost all MSG functionalities in Ruby code , that allows you to set up your environment , manage tasks between hosts and run the simulation.
+Since v3.4, the use of <a href="http://ruby-lang.org">ruby</a> in simgrid is available for the MSG Module.
+you can find almost all MSG functionalities in Ruby code, that allows you to set up your environment, manage tasks between hosts and run the simulation.
+\dontinclude ruby/MasterSlave.rb
\subsubsection faq_binding_ruby_example Master/Slave Ruby Application
-for each process method(master and slave in this example), you have to associate a ruby class , that should inherit from <i>MSG::Process</i> ruby class,
+for each process method(master and slave in this example), you have to associate a ruby class, that should inherit from <i>MSG::Process</i> ruby class,
with a 'main' function that describe the behaviour of the process during the simulation.
\li required stuff
\verbatim
\endverbatim
\li Master code
-\verbatim
-#################################################
-# Class Master
-#################################################
-class Master < MSG::Process
- # main : that function that will be executed when running simulation
-
- def main(args) # args is an array containing arguments for function master
- size = args.size
- for i in 0..size-1
- MSG::info("args["+String(i)+"]="+args[i])
- end
-
- raise "Master needs 3 arguments" if size < 3
- numberOfTask = Integer(args[0])
- taskComputeSize = Float(args[1])
- taskCommunicationSize = Float(args[2])
- slaveCount = Integer(args[3])
-
- # Creates and sends the tasks
- for i in 0..numberOfTask-1
- task = Task.new("Task_"+ i.to_s, taskComputeSize , taskCommunicationSize);
- mailbox = "slave " + (i%slaveCount).to_s
- MSG::info("Master Sending "+ task.name + " to " + mailbox + " with Comput Size " +
- task.compSize.to_s)
- task.send(mailbox)
- MSG::info("Master Done Sending " + task.name + " to " + mailbox)
- end
-
- # Sending Finalize MSG::Tasks
- MSG::info("Master: All tasks have been dispatched. Let's tell everybody the computation is over.")
- for i in 0..slaveCount-1
- mailbox = "slave " + i.to_s
- finalize_task = Task.new("finalize",0,0)
- finalize_task.send(mailbox)
- end
- MSG::info("Master : Everything's Done")
- end
-end
-\endverbatim
+\until end_of_master
+
the class MSG::Task contains methods that allows the management of the native MSG tasks.
in master ruby code we used :
- <i>MSG::Task.new(task_name,compute_size,communication_size)</i> : to instanciate a new task.
- <i>MSG::Task.name</i> : to get the task's name.
\li Slave code
-\verbatim
-#################################################
-# Class Slave
-#################################################
-class Slave < MSG::Process
-
- def main(args)
- mailbox = "slave " + args[0]
- for i in 0..args.size-1
- MSG::debug("args["+String(i)+"]="+args[i])
- end
-
- while true
- task = Task.receive(mailbox)
- if (task.name == "finalize")
- break
- end
- task.execute
- MSG::debug("Slave '" + mailbox + "' done executing task "+ task.name + ".")
- end
- MSG::info("I'm done, see you")
- end
-end
-\endverbatim
-to receive a task , we use the method <i>MSG::Task.receive(mailbox)</i> that return a MSG:Task object (received task).
+\until end_of_slave
+to receive a task, we use the method <i>MSG::Task.receive(mailbox)</i> that return a MSG:Task object (received task).
\li Main chunk
-\verbatim
-if (ARGV.length == 2)
- MSG.createEnvironment(ARGV[0])
- MSG.deployApplication(ARGV[1])
-else
- MSG.createEnvironment("platform.xml")
- MSG.deployApplication("deploy.xml")
-end
-MSG.run
-puts "Simulation time : " + MSG.getClock .to_s
-MSG.exit
-\endverbatim
+\until MSG.exit
+
- <i>MSG.createEnvironment(platform_file)</i> : set up the environment
- <i>MSG.deployApplication(deployment_file)</i> : load the deployment file description.
- <i>MSG.run</i> : run the simulation
\li inheritence
- another 'object-oriented' way to do it , is to make your own 'task' class that inherit from MSG::Task ,
- and contains data you want to deal with , the only 'tricky' thing is that "the initializer" method has no effect !
+ another 'object-oriented' way to do it, is to make your own 'task' class that inherit from MSG::Task ,
+ and contains data you want to deal with, the only 'tricky' thing is that "the initializer" method has no effect !
- the use of some getter/setter methods would be the simple way to manage your data :)
+ the use of some getter/setter methods would be the simple way to manage your data :)
\verbatim
class PingPongTask < MSG::Task
# The initialize method has no effect
header files with tons of __declspec(dllexport) cruft. We only need to do so
for data, but there is no public data in SimGrid so we are good.
+