\li ccmake for graphical used of CMake
\li cmake <a href="http://www.cmake.org/cmake/resources/software.html">(download page)</a>
-For windows only :
- \li Visual C++ 2010 Express <a href="http://www.microsoft.com/express/Downloads/#2010-Visual-CPP">(download page)</a>
- \li cmake <a href="http://www.cmake.org/cmake/resources/software.html">(download page)</a>
- \li Set CC, CXX, INCLUDE, LIB and RC to environment variables.
-\verbatim
-SET --> CC TO --> C:\MicrosoftVisualStudio10\VC\bin\cl
- --> CXX --> C:\MicrosoftVisualStudio10\VC\bin\cl
- --> INCLUDE --> C:\MicrosoftVisualStudio10\VC\include;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Include
- --> LIB --> C:\MicrosoftVisualStudio10\VC\lib;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Lib
- --> RC --> C:\Program Files\Microsoft SDKs\Windows\v7.OA\bin\RC
-\endverbatim
- \li Add to environment variable "Path" the path where to find nmake executable and some needed files.
-\verbatim
-......
-;C\MicrosoftVisualStudio10\VC\bin
-;C\MicrosoftVisualStudio10\Common7\IDE
-;C:\Program Files\Microsoft SDKs\Windows\v7.OA\bin
-;C:\Program Files\Microsoft SDKs\Windows\v7.OA\Lib
-;C:\Program Files\Microsoft SDKs\Windows\v7.OA\bInclude
-\endverbatim
-\subsection faq_cmakeoption Cmake options
-
\subsubsection faq_cmakeoption1 Liste of options
\verbatim
\subsubsection faq_cmakeinstall2 From a distrib
\verbatim
-cmake -Dprefix=/home/navarrop/Bureau/install_simgrid ./
-make
-make install
+For version 3.4.1 and 3.4
+ cmake -Dprefix=/home/navarrop/Bureau/install_simgrid ./
+ make
+ make install-simgrid
+Since version 3.5
+ cmake -Dprefix=/home/navarrop/Bureau/install_simgrid ./
+ make
+ make install
\endverbatim
\subsection faq_cmakehowto How to modified sources files for developers
\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
<tt>tools/platform_generation/</tt> directory of the SVN. Dinda et Al.
released a very comparable tool, and called it GridG.
-\subsubsection faq_SURF_dynamic Expressing dynamic resource availability in platform files
+\subsubsection faq_SURF_multicore Modeling multi-core resources
+
+There is currently no native support for multi-core or SMP machines in
+SimGrid. We are currently working on it, but coming up with the right
+model is very hard: Cores share caches and bus to access memory and
+thus interfere with each others. Memory contention is a crucial
+component of multi-core modeling.
+
+In the meanwhile, some user-level tricks can reveal sufficient for
+you. For example, you may model each core by a CPU and add some very
+high speed links between them. This complicates a bit the user code
+since you have to remember that when you assign something to a (real)
+host, it can be any of the (fake) hosts representing the cores of a
+given machine. For that, you can use the prop tag of the XML files as
+follows. Your code should then look at the ‘machine’ property
+associated with each workstation, and run parallel tasks over all
+cores of the machine.
+
+\verbatim
+ <host id="machine0/core0" power="91500E6">
+ <prop id="machine" value="machine0"/>
+ <prop id="core" value="0"/>
+ </host>
+ <host id="machine0/core1" power="91500E6">
+ <prop id="machine" value="machine0"/>
+ <prop id="core" value="1"/>
+</host>
+
+
+\endverbatim
+
+\subsubsection faq_SURF_dynamic Modeling dynamic resource availability
A nice feature of SimGrid is that it enables you to seamlessly have
resources whose availability change over time. When you build a
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 gtnets is install (path to <gtnets_path>/lib and <gtnets_path>/include)
+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)
\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;
\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
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.
+