ELSEIF(CMAKE_SYSTEM_PROCESSOR MATCHES "^sh")
message(STATUS "System processor: sh")
- ELSE() #PROCESSOR NOT fIND
+ ELSE() #PROCESSOR NOT FOUND
message(STATUS "PROCESSOR NOT FOUND: ${CMAKE_SYSTEM_PROCESSOR}")
ENDIF()
CHECK_INCLUDE_FILE("sys/param.h" HAVE_SYS_PARAM_H)
CHECK_INCLUDE_FILE("sys/sysctl.h" HAVE_SYS_SYSCTL_H)
CHECK_INCLUDE_FILE("time.h" HAVE_TIME_H)
- CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
CHECK_INCLUDE_FILE("inttypes.h" HAVE_INTTYPES_H)
CHECK_INCLUDE_FILE("memory.h" HAVE_MEMORY_H)
CHECK_INCLUDE_FILE("stdlib.h" HAVE_STDLIB_H)
endif()
# Our usage of mmap is Linux-specific (flag MAP_ANONYMOUS), but kFreeBSD uses a GNU libc
-IF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU")
+IF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND NOT "${CMAKE_SYSTEM}" MATCHES "Darwin")
SET(HAVE_MMAP 0)
message(STATUS "Warning: MMAP is thought as non functional on this architecture (${CMAKE_SYSTEM})")
-ENDIF()
+ENDIF(NOT "${CMAKE_SYSTEM}" MATCHES "Linux" AND NOT "${CMAKE_SYSTEM}" MATCHES "kFreeBSD" AND NOT "${CMAKE_SYSTEM}" MATCHES "GNU" AND NOT "${CMAKE_SYSTEM}" MATCHES "Darwin")
if(WIN32) #THOSE FILES ARE FUNCTIONS ARE NOT DETECTED BUT THEY SHOULD...
set(HAVE_UCONTEXT_H 1)
CHECK_TYPE_SIZE(int SIZEOF_INT)
CHECK_TYPE_SIZE(void* SIZEOF_VOIDP)
+ #--------------------------------------------------------------------------------------------------
+ ### Check for GNU dynamic linker
+ CHECK_INCLUDE_FILE("dlfcn.h" HAVE_DLFCN_H)
+ if (HAVE_DLFCN_H)
+ execute_process(COMMAND ${CMAKE_C_COMPILER} ${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_gnu_dynlinker.c -ldl -o test_gnu_ld
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ OUTPUT_VARIABLE HAVE_GNU_LD_compil
+ )
+ if(HAVE_GNU_LD_compil)
+ set(HAVE_GNU_LD 0)
+ message(STATUS "Warning: test program toward GNU ld failed to compile:")
+ message(STATUS "${HAVE_GNU_LD_comp_output}")
+ else()
+
+ execute_process(COMMAND ./test_gnu_ld
+ WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
+ RESULT_VARIABLE HAVE_GNU_LD_run
+ OUTPUT_VARIABLE var_exec
+ )
+
+ if(NOT HAVE_GNU_LD_run)
+ set(HAVE_GNU_LD 1)
+ message(STATUS "We are using GNU dynamic linker")
+ else()
+ set(HAVE_GNU_LD 0)
+ message(STATUS "Warning: error while checking for GNU ld:")
+ message(STATUS "Test output: '${var_exec}'")
+ message(STATUS "Exit status: ${HAVE_GNU_LD_run}")
+ endif()
+ file(REMOVE test_gnu_ld)
+ endif()
+ endif()
+
+
#--------------------------------------------------------------------------------------------------
### Initialize of CONTEXT THREADS
#AC_PROG_MAKE_SET
- #AC_PRINTF_NULL
+ #AC_PRINTF_NULL FIXME: this is too ancient to survive!
try_run(RUN_PRINTF_NULL_VAR COMPILE_PRINTF_NULL_VAR
${CMAKE_BINARY_DIR}
${CMAKE_HOME_DIRECTORY}/buildtools/Cmake/test_prog/prog_printf_null.c
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/bin/smpicc @ONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/bin/smpif2c @ONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/bin/smpiff @ONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/bin/smpif90 @ONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/bin/smpirun @ONLY)
### Script used when simgrid is compiling
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpicc.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc @ONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif2c.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c @ONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpiff.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff @ONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpif90.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90 @ONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/src/smpi/smpirun.in ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun @ONLY)
set(top_builddir ${CMAKE_HOME_DIRECTORY})
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpicc)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif2c)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpiff)
+ execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpif90)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/bin/smpirun)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpicc)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif2c)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpiff)
+ execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpif90)
execute_process(COMMAND chmod a=rwx ${CMAKE_BINARY_DIR}/smpi_script/bin/smpirun)
endif()
${CMAKE_BINARY_DIR}/bin/smpicc
${CMAKE_BINARY_DIR}/bin/smpif2c
${CMAKE_BINARY_DIR}/bin/smpiff
+ ${CMAKE_BINARY_DIR}/bin/smpif90
${CMAKE_BINARY_DIR}/bin/smpirun
${CMAKE_BINARY_DIR}/bin/colorize
${CMAKE_BINARY_DIR}/bin/simgrid_update_xml
configure_file(${CMAKE_HOME_DIRECTORY}/examples/msg/tracing/platform.xml ${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions0.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions1.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_allReduce.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_barrier.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_bcast.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt COPYONLY)
+ configure_file(${CMAKE_HOME_DIRECTORY}/examples/smpi/replay/actions_with_isend.txt ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt COPYONLY)
configure_file(${CMAKE_HOME_DIRECTORY}/teshsuite/smpi/hostfile ${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile COPYONLY)
set(generated_files_to_clean
${CMAKE_BINARY_DIR}/examples/msg/tracing/platform.xml
${CMAKE_BINARY_DIR}/examples/smpi/replay/actions0.txt
${CMAKE_BINARY_DIR}/examples/smpi/replay/actions1.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_allReduce.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_barrier.txt
${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_bcast.txt
+ ${CMAKE_BINARY_DIR}/examples/smpi/replay/actions_with_isend.txt
${CMAKE_BINARY_DIR}/teshsuite/smpi/hostfile
)
endif()
### define source packages
set(EXTRA_DIST
+ src/include/smpi/smpi_interface.h
+ src/include/instr/instr_interface.h
src/include/mc/datatypes.h
src/include/mc/mc.h
src/include/simgrid/platf_interface.h
+ src/include/simgrid/sg_config.h
src/include/surf/datatypes.h
src/include/surf/maxmin.h
src/include/surf/random_mgr.h
src/xbt/mmalloc/mmtrace.awk
src/xbt/mmalloc/mrealloc.c
src/xbt/setset_private.h
+ src/win32/config.h
+ src/xbt/win32_ucontext.c
+ include/xbt/win32_ucontext.h
tools/tesh/run_context.h
tools/tesh/tesh.h
)
set(SMPI_SRC
+ src/smpi/instr_smpi.c
src/smpi/smpi_base.c
src/smpi/smpi_bench.c
src/smpi/smpi_c99.c
src/surf/cpu_cas01.c
src/surf/cpu_ti.c
src/surf/fair_bottleneck.c
+ src/surf/instr_routing.c
+ src/surf/instr_surf.c
src/surf/lagrange.c
src/surf/maxmin.c
src/surf/network.c
src/surf/storage.c
src/surf/surf.c
src/surf/surf_action.c
- src/surf/surf_config.c
src/surf/surf_model.c
src/surf/surf_routing.c
src/surf/surf_routing_cluster.c
src/simix/smx_user.c
)
+ set(SIMGRID_SRC
+ src/simgrid/sg_config.c
+ )
+
set(MSG_SRC
+ src/msg/instr_msg_process.c
+ src/msg/instr_msg_task.c
++ src/msg/instr_msg_vm.c
src/msg/msg_actions.c
- src/msg/msg_config.c
src/msg/msg_deployment.c
src/msg/msg_environment.c
src/msg/msg_global.c
set(TRACING_SRC
src/instr/instr_config.c
src/instr/instr_interface.c
- src/instr/instr_msg_process.c
- src/instr/instr_msg_vm.c
- src/instr/instr_msg_task.c
src/instr/instr_paje_containers.c
src/instr/instr_paje_trace.c
src/instr/instr_paje_header.c
src/instr/instr_paje_values.c
src/instr/instr_private.h
src/instr/instr_resource_utilization.c
- src/instr/instr_routing.c
- src/instr/instr_smpi.c
- src/instr/instr_surf.c
)
set(JEDULE_SRC
set(simgrid_sources
${BINDINGS_SRC}
${GTNETS_USED}
- ${JEDULE_SRC}
${MSG_SRC}
${SIMDAG_SRC}
+ ${SIMGRID_SRC}
${SIMIX_SRC}
${SURF_SRC}
${TRACING_SRC}
${XBT_SRC}
)
+ if(${HAVE_JEDULE})
+ set(simgrid_sources
+ ${simgrid_sources}
+ ${JEDULE_SRC}
+ )
+ else()
+ set(EXTRA_DIST
+ ${EXTRA_DIST}
+ ${JEDULE_SRC}
+ )
+ endif()
+
+ if(${HAVE_TRACING})
+ set(simgrid_sources
+ ${simgrid_sources}
+ ${TRACING_SRC}
+ )
+ else()
+ set(EXTRA_DIST
+ ${EXTRA_DIST}
+ ${TRACING_SRC}
+ )
+ endif()
+
if(HAVE_MC)
set(simgrid_sources
${simgrid_sources}
doc/simix.fig
doc/surf_nutshell.fig
doc/Doxyfile.in
- doc/FAQ.doc
- doc/index.doc
- doc/simgrid.css
- doc/SimgridDoxygenLayout.xml
+ doc/Layout.xml
doc/triva-graph_configuration.png
doc/triva-graph_visualization.png
doc/triva-time_interval.png
+
+ doc/doxygen/footer.html
+ doc/doxygen/header.html
+ doc/doxygen/stylesheet.css
+
+ doc/doxygen/index.doc
+ doc/doxygen/getting_started.doc
+ doc/doxygen/introduction.doc
+ doc/doxygen/use.doc
+ doc/doxygen/bindings.doc
+ doc/doxygen/deployment.doc
+ doc/doxygen/install.doc
+ doc/doxygen/options.doc
+ doc/doxygen/platform.doc
+ doc/doxygen/pls.doc
+ doc/doxygen/tracing.doc
+ doc/doxygen/FAQ.doc
+ doc/doxygen/advanced.doc
+ doc/doxygen/inside_autotests.doc
+ doc/doxygen/inside_cmake.doc
+ doc/doxygen/inside_extending.doc
+ doc/doxygen/inside_release.doc
+ doc/doxygen/contributing.doc
+ doc/doxygen/modules.doc
+ doc/doxygen/module-msg.doc
+ doc/doxygen/module-sd.doc
+ doc/doxygen/module-simix.doc
+ doc/doxygen/module-surf.doc
+ doc/doxygen/module-trace.doc
+ doc/doxygen/module-xbt.doc
+
)
set(DOC_FIGS
${CMAKE_HOME_DIRECTORY}/doc/shared/fig/simgrid_modules2.fig
)
- set(DOC_SHARED_TAG
- doc/shared/doxygen/simgriddevguide.tag
- doc/shared/doxygen/simgridrefguide.tag
- doc/shared/doxygen/simgriduserguide.tag
- )
-
set(DOC_TOOLS
tools/doxygen/fig2dev_postprocessor.pl
tools/doxygen/index_create.pl
tools/doxygen/xbt_log_extract_hierarchy.pl
)
-
- set(USER_GUIDE_SOURCES
- doc/user_guide/doxygen/footer.html
- doc/user_guide/doxygen/header.html
- doc/user_guide/doxygen/UserGuideDoxyfile.in
- doc/user_guide/doxygen/UserGuideDoxygenLayout.xml
- doc/user_guide/doxygen/bindings.doc
- doc/user_guide/doxygen/deployment.doc
- doc/user_guide/doxygen/examples.doc
- doc/user_guide/doxygen/index.doc
- doc/user_guide/doxygen/install.doc
- doc/user_guide/doxygen/options.doc
- doc/user_guide/doxygen/platform.doc
- doc/user_guide/doxygen/pls.doc
- doc/user_guide/doxygen/tracing.doc
- doc/user_guide/doxygen/use.doc
- doc/user_guide/doxygen/stylesheet.css
- )
-
- set(REF_GUIDE_SOURCES
- doc/ref_guide/doxygen/footer.html
- doc/ref_guide/doxygen/header.html
- doc/ref_guide/doxygen/main.doc
- doc/ref_guide/doxygen/module-msg.doc
- doc/ref_guide/doxygen/module-sd.doc
- doc/ref_guide/doxygen/module-simix.doc
- doc/ref_guide/doxygen/module-surf.doc
- doc/ref_guide/doxygen/module-trace.doc
- doc/ref_guide/doxygen/module-xbt.doc
- doc/ref_guide/doxygen/modules.doc
- doc/ref_guide/doxygen/RefGuideDoxyfile.in
- doc/ref_guide/doxygen/RefGuideDoxygenLayout.xml
- doc/ref_guide/doxygen/stylesheet.css
- )
-
- set(DEV_GUIDE_SOURCES
- doc/dev_guide/doxygen/footer.html
- doc/dev_guide/doxygen/header.html
- doc/dev_guide/doxygen/index.doc
- doc/dev_guide/doxygen/cmake.doc
- doc/dev_guide/doxygen/simgrid.doc
- doc/dev_guide/doxygen/xps.doc
- doc/dev_guide/doxygen/DevGuideDoxyfile.in
- doc/dev_guide/doxygen/DevGuideDoxygenLayout.xml
- doc/dev_guide/doxygen/stylesheet.css
- )
-
+ # these files get copied automatically to the html documentation
set(DOC_IMG
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/README
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.gif
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_001.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_002.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_003.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_004.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_005.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_006.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_007.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_008.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_009.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_010.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_011.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_012.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_013.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_014.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_015.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_016.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_017.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_018.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_019.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_020.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_021.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_022.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_023.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_024.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_025.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_026.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_027.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_028.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_029.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101_030.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid-101.pdf
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.gif
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win_2011.bmp
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win.bmp
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png
- ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png
- )
+ ${CMAKE_HOME_DIRECTORY}/doc/simgrid.css
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot.jpg
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/Paje_MSG_screenshot_thn.jpg
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.gif
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.icns
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/SGicon.ico
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/awstats_logo3.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/output.goal.pdf
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/poster_thumbnail.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.gif
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_2011_small.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win.bmp
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/simgrid_logo_win_2011.bmp
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_01.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_02.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_03.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_04.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_05.png
+ ${CMAKE_HOME_DIRECTORY}/doc/webcruft/win_install_06.png
+ )
set(bin_files
${bin_files}
src/smpi/smpicc.in
src/smpi/smpif2c.in
src/smpi/smpiff.in
+ src/smpi/smpif90.in
src/smpi/smpirun.in
)
${txt_files}
AUTHORS
COPYING
+ README
ChangeLog
INSTALL
LICENSE-LGPL-2.1
examples/msg/priority/CMakeLists.txt
examples/msg/properties/CMakeLists.txt
examples/msg/sendrecv/CMakeLists.txt
+ examples/msg/chainsend/CMakeLists.txt
examples/msg/start_kill_time/CMakeLists.txt
examples/msg/suspend/CMakeLists.txt
examples/msg/token_ring/CMakeLists.txt
buildtools/Cmake/Flags.cmake
buildtools/Cmake/GenerateDoc.cmake
buildtools/Cmake/GenerateDocWin.cmake
- buildtools/Cmake/GenerateRefGuide.cmake
- buildtools/Cmake/GenerateUserGuide.cmake
- buildtools/Cmake/GenerateDevGuide.cmake
buildtools/Cmake/MaintainerMode.cmake
buildtools/Cmake/MakeExe.cmake
buildtools/Cmake/MakeLib.cmake
buildtools/Cmake/test_prog/prog_thread_storage.c
buildtools/Cmake/test_prog/prog_va_copy.c
buildtools/Cmake/test_prog/prog_vsnprintf.c
+ buildtools/Cmake/test_prog/prog_gnu_dynlinker.c
)
set(PLATFORMS_EXAMPLES
/** @} */
/************************** Global ******************************************/
- XBT_PUBLIC(void) MSG_config(const char *name, ...);
+ XBT_PUBLIC(void) MSG_config(const char *key, const char *value);
/** \ingroup msg_simulation
* \brief Initialize the MSG internal data.
* \hideinitializer
XBT_PUBLIC(int) MSG_get_channel_number(void);
#endif
-#include "instr/instr.h"
-
/** @brief Opaque type describing a Virtual Machine.
* @ingroup msg_VMs
*
* Usual lack of guaranty of any kind applies here, and is even increased.
*
*/
-typedef struct msg_vm *msg_vm_t;
/* This function should not be called directly, but rather from MSG_vm_start_from_template that does not exist yet*/
-XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, int coreAmount);
+XBT_PUBLIC(msg_vm_t) MSG_vm_start(msg_host_t location, const char *name, int coreAmount);
XBT_PUBLIC(int) MSG_vm_is_suspended(msg_vm_t);
XBT_PUBLIC(int) MSG_vm_is_running(msg_vm_t);
xbt_dynar_t<msg_vm_t> MSG_vm_get_list_from_hosts(msg_dynar_t<msg_host_t>)
+ des fonctions de filtrage sur les dynar
*/
+#include "instr/instr.h"
+
/* ****************************************************************************************** */
/* This program is free software; you can redistribute it and/or modify it
* under the terms of the license (GNU LGPL) which comes with this package. */
-
#include "instr/instr_private.h"
+ #include "simgrid/sg_config.h"
+ #include "surf/surf.h"
#ifdef HAVE_TRACING
#define OPT_TRACING_CATEGORIZED "tracing/categorized"
#define OPT_TRACING_UNCATEGORIZED "tracing/uncategorized"
#define OPT_TRACING_MSG_PROCESS "tracing/msg/process"
+#define OPT_TRACING_MSG_VM "tracing/msg/vm"
#define OPT_TRACING_FILENAME "tracing/filename"
#define OPT_TRACING_BUFFER "tracing/buffer"
#define OPT_TRACING_ONELINK_ONLY "tracing/onelink_only"
static int trace_categorized;
static int trace_uncategorized;
static int trace_msg_process_enabled;
+static int trace_msg_vm_enabled;
static int trace_buffer;
static int trace_onelink_only;
static int trace_disable_destroy;
static int trace_configured = 0;
static int trace_active = 0;
+
+
static void TRACE_getopts(void)
{
- trace_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING);
- trace_platform = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_PLATFORM);
- trace_platform_topology = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_TOPOLOGY);
- trace_smpi_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI);
- trace_smpi_grouped = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_GROUP);
- trace_smpi_computing = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING);
- trace_categorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_CATEGORIZED);
- trace_uncategorized = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_UNCATEGORIZED);
- trace_msg_process_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_PROCESS);
- trace_msg_vm_enabled = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_MSG_VM);
- trace_buffer = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BUFFER);
- trace_onelink_only = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_ONELINK_ONLY);
- trace_disable_destroy = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY);
- trace_basic = xbt_cfg_get_int(_surf_cfg_set, OPT_TRACING_BASIC);
+ trace_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING);
+ trace_platform = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_PLATFORM);
+ trace_platform_topology = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_TOPOLOGY);
+ trace_smpi_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI);
+ trace_smpi_grouped = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_GROUP);
+ trace_smpi_computing = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING);
+ trace_categorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_CATEGORIZED);
+ trace_uncategorized = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_UNCATEGORIZED);
+ trace_msg_process_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_PROCESS);
++ trace_msg_vm_enabled = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_MSG_VM);
+ trace_buffer = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BUFFER);
+ trace_onelink_only = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_ONELINK_ONLY);
+ trace_disable_destroy = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY);
+ trace_basic = xbt_cfg_get_int(_sg_cfg_set, OPT_TRACING_BASIC);
+ }
+
+ xbt_dynar_t TRACE_start_functions = NULL;
+ void TRACE_add_start_function(void (*func) ())
+ {
+ if (TRACE_start_functions == NULL)
+ TRACE_start_functions = xbt_dynar_new(sizeof(void (*)()), NULL);
+ xbt_dynar_push(TRACE_start_functions, &func);
}
int TRACE_start()
// tracing system must be:
// - enabled (with --cfg=tracing:1)
// - already configured (TRACE_global_init already called)
- if (!(TRACE_is_enabled() && TRACE_is_configured())){
- return 0;
+ if (TRACE_is_enabled() && TRACE_is_configured()) {
+ XBT_DEBUG("Tracing starts");
+
+ /* open the trace file */
+ TRACE_paje_start();
+
+ /* activate trace */
+ if (trace_active == 1) {
+ THROWF(tracing_error, 0, "Tracing is already active");
+ }
+ trace_active = 1;
+ XBT_DEBUG("Tracing is on");
+
+ /* other trace initialization */
+ created_categories = xbt_dict_new_homogeneous(xbt_free);
+ declared_marks = xbt_dict_new_homogeneous(xbt_free);
+ user_host_variables = xbt_dict_new_homogeneous(xbt_free);
++ user_vm_variables = xbt_dict_new_homogeneous (xbt_free);
+ user_link_variables = xbt_dict_new_homogeneous(xbt_free);
+
+ if (TRACE_start_functions != NULL) {
+ void (*func) ();
+ unsigned int iter = xbt_dynar_length(TRACE_start_functions);
+ xbt_dynar_foreach(TRACE_start_functions, iter, func) {
+ func();
+ }
+ }
}
-
- XBT_DEBUG("Tracing starts");
-
- /* open the trace file */
- TRACE_paje_start();
-
- /* activate trace */
- if (trace_active == 1){
- THROWF (tracing_error, 0, "Tracing is already active");
- }
- trace_active = 1;
- XBT_DEBUG ("Tracing is on");
-
- /* other trace initialization */
- created_categories = xbt_dict_new_homogeneous(xbt_free);
- declared_marks = xbt_dict_new_homogeneous (xbt_free);
- user_host_variables = xbt_dict_new_homogeneous (xbt_free);
- user_vm_variables = xbt_dict_new_homogeneous (xbt_free);
- user_link_variables = xbt_dict_new_homogeneous (xbt_free);
- TRACE_surf_alloc();
- TRACE_smpi_alloc();
+ xbt_dynar_free(&TRACE_start_functions);
return 0;
}
+ xbt_dynar_t TRACE_end_functions = NULL;
+ void TRACE_add_end_function(void (*func) (void))
+ {
+ if (TRACE_end_functions == NULL)
+ TRACE_end_functions = xbt_dynar_new(sizeof(void (*)(void)), NULL);
+ xbt_dynar_push(TRACE_end_functions, &func);
+ }
+
int TRACE_end()
{
- if (!trace_active)
- return 1;
-
- TRACE_generate_viva_uncat_conf();
- TRACE_generate_viva_cat_conf();
-
- /* dump trace buffer */
- TRACE_last_timestamp_to_dump = surf_get_clock();
- TRACE_paje_dump_buffer(1);
-
- /* destroy all data structures of tracing (and free) */
- PJ_container_free_all();
- PJ_type_free_all();
- PJ_container_release();
- PJ_type_release();
- TRACE_smpi_release();
- TRACE_surf_release();
- xbt_dict_free(&user_link_variables);
- xbt_dict_free(&user_host_variables);
- xbt_dict_free(&user_vm_variables);
-
- xbt_dict_free(&declared_marks);
- xbt_dict_free(&created_categories);
-
- /* close the trace file */
- TRACE_paje_end();
-
- /* de-activate trace */
- trace_active = 0;
- XBT_DEBUG ("Tracing is off");
- XBT_DEBUG("Tracing system is shutdown");
- return 0;
+ int retval;
+ if (!trace_active) {
+ retval = 1;
+ } else {
+ retval = 0;
+
+ TRACE_generate_viva_uncat_conf();
+ TRACE_generate_viva_cat_conf();
+
+ /* dump trace buffer */
+ TRACE_last_timestamp_to_dump = surf_get_clock();
+ TRACE_paje_dump_buffer(1);
+
+ /* destroy all data structures of tracing (and free) */
+ PJ_container_free_all();
+ PJ_type_free_all();
+ PJ_container_release();
+ PJ_type_release();
+
+ if (TRACE_end_functions != NULL) {
+ void (*func) (void);
+ unsigned int iter;
+ xbt_dynar_foreach(TRACE_end_functions, iter, func) {
+ func();
+ }
+ }
+
+ xbt_dict_free(&user_link_variables);
+ xbt_dict_free(&user_host_variables);
++ xbt_dict_free(&user_vm_variables);
+ xbt_dict_free(&declared_marks);
+ xbt_dict_free(&created_categories);
+
+ /* close the trace file */
+ TRACE_paje_end();
+
+ /* de-activate trace */
+ trace_active = 0;
+ XBT_DEBUG("Tracing is off");
+ XBT_DEBUG("Tracing system is shutdown");
+ }
+ xbt_dynar_free(&TRACE_end_functions);
+ return retval;
}
int TRACE_needs_platform (void)
{
return TRACE_msg_process_is_enabled() ||
+ TRACE_msg_vm_is_enabled() ||
TRACE_categorized() ||
TRACE_uncategorized() ||
TRACE_platform () ||
return trace_msg_process_enabled && TRACE_is_enabled();
}
+int TRACE_msg_vm_is_enabled(void)
+{
+ return trace_msg_vm_enabled && TRACE_is_enabled();
+}
+
+
int TRACE_buffer (void)
{
return trace_buffer && TRACE_is_enabled();
char *TRACE_get_comment (void)
{
- return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT);
+ return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT);
}
char *TRACE_get_comment_file (void)
{
- return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_COMMENT_FILE);
+ return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_COMMENT_FILE);
}
char *TRACE_get_filename(void)
{
- return xbt_cfg_get_string(_surf_cfg_set, OPT_TRACING_FILENAME);
+ return xbt_cfg_get_string(_sg_cfg_set, OPT_TRACING_FILENAME);
}
char *TRACE_get_viva_uncat_conf (void)
{
- return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_UNCAT_CONF);
+ return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_UNCAT_CONF);
}
char *TRACE_get_viva_cat_conf (void)
{
- return xbt_cfg_get_string(_surf_cfg_set, OPT_VIVA_CAT_CONF);
+ return xbt_cfg_get_string(_sg_cfg_set, OPT_VIVA_CAT_CONF);
}
void TRACE_global_init(int *argc, char **argv)
{
/* name of the tracefile */
char *default_tracing_filename = xbt_strdup("simgrid.trace");
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_FILENAME,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_FILENAME,
"Trace file created by the instrumented SimGrid.",
xbt_cfgelm_string, &default_tracing_filename, 1, 1,
NULL, NULL);
/* tracing */
int default_tracing = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING,
"Enable Tracing.",
xbt_cfgelm_int, &default_tracing, 0, 1,
NULL, NULL);
/* register platform in the trace */
int default_tracing_platform = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_PLATFORM,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_PLATFORM,
"Register the platform in the trace as a hierarchy.",
xbt_cfgelm_int, &default_tracing_platform, 0, 1,
NULL, NULL);
/* register platform in the trace */
int default_tracing_platform_topology = 1;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_TOPOLOGY,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_TOPOLOGY,
"Register the platform topology in the trace as a graph.",
xbt_cfgelm_int, &default_tracing_platform_topology, 0, 1,
NULL, NULL);
/* smpi */
int default_tracing_smpi = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI,
"Tracing of the SMPI interface.",
xbt_cfgelm_int, &default_tracing_smpi, 0, 1,
NULL, NULL);
/* smpi grouped */
int default_tracing_smpi_grouped = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_GROUP,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_GROUP,
"Group MPI processes by host.",
xbt_cfgelm_int, &default_tracing_smpi_grouped, 0, 1,
NULL, NULL);
/* smpi computing */
int default_tracing_smpi_computing = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_SMPI_COMPUTING,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_SMPI_COMPUTING,
"Generate states for timing out of SMPI parts of the application",
xbt_cfgelm_int, &default_tracing_smpi_computing, 0, 1,
NULL, NULL);
/* tracing categorized resource utilization traces */
int default_tracing_categorized = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_CATEGORIZED,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_CATEGORIZED,
"Tracing categorized resource utilization of hosts and links.",
xbt_cfgelm_int, &default_tracing_categorized, 0, 1,
NULL, NULL);
/* tracing uncategorized resource utilization */
int default_tracing_uncategorized = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_UNCATEGORIZED,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_UNCATEGORIZED,
"Tracing uncategorized resource utilization of hosts and links.",
xbt_cfgelm_int, &default_tracing_uncategorized, 0, 1,
NULL, NULL);
/* msg process */
int default_tracing_msg_process = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_PROCESS,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_PROCESS,
"Tracing of MSG process behavior.",
xbt_cfgelm_int, &default_tracing_msg_process, 0, 1,
NULL, NULL);
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_MSG_VM,
+ /* msg process */
+ int default_tracing_msg_vm = 0;
++ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_MSG_VM,
+ "Tracing of MSG process behavior.",
+ xbt_cfgelm_int, &default_tracing_msg_vm, 0, 1,
+ NULL, NULL);
+
/* tracing buffer */
int default_buffer = 1;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BUFFER,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BUFFER,
"Buffer trace events to put them in temporal order.",
xbt_cfgelm_int, &default_buffer, 0, 1,
NULL, NULL);
/* tracing one link only */
int default_onelink_only = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_ONELINK_ONLY,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_ONELINK_ONLY,
"Use only routes with one link to trace platform.",
xbt_cfgelm_int, &default_onelink_only, 0, 1,
NULL, NULL);
/* disable destroy */
int default_disable_destroy = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_DISABLE_DESTROY,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_DISABLE_DESTROY,
"Disable platform containers destruction.",
xbt_cfgelm_int, &default_disable_destroy, 0, 1,
NULL, NULL);
/* basic -- Avoid extended events (impoverished trace file) */
int default_basic = 0;
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_BASIC,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_BASIC,
"Avoid extended events (impoverished trace file).",
xbt_cfgelm_int, &default_basic, 0, 1,
NULL, NULL);
/* comment */
char *default_tracing_comment = xbt_strdup ("");
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT,
"Comment to be added on the top of the trace file.",
xbt_cfgelm_string, &default_tracing_comment, 1, 1,
NULL, NULL);
/* comment_file */
char *default_tracing_comment_file = xbt_strdup ("");
- xbt_cfg_register(&_surf_cfg_set, OPT_TRACING_COMMENT_FILE,
+ xbt_cfg_register(&_sg_cfg_set, OPT_TRACING_COMMENT_FILE,
"The contents of the file are added to the top of the trace file as comment.",
xbt_cfgelm_string, &default_tracing_comment_file, 1, 1,
NULL, NULL);
/* Viva graph configuration for uncategorized tracing */
char *default_viva_uncat_conf_file = xbt_strdup ("");
- xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_UNCAT_CONF,
+ xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_UNCAT_CONF,
"Viva Graph configuration file for uncategorized resource utilization traces.",
xbt_cfgelm_string, &default_viva_uncat_conf_file, 1, 1,
NULL, NULL);
/* Viva graph configuration for uncategorized tracing */
char *default_viva_cat_conf_file = xbt_strdup ("");
- xbt_cfg_register(&_surf_cfg_set, OPT_VIVA_CAT_CONF,
+ xbt_cfg_register(&_sg_cfg_set, OPT_VIVA_CAT_CONF,
"Viva Graph configuration file for categorized resource utilization traces.",
xbt_cfgelm_string, &default_viva_cat_conf_file, 1, 1,
NULL, NULL);
* under the terms of the license (GNU LGPL) which comes with this package. */
#include "instr/instr_private.h"
+ #include "xbt/lib.h"
+ #include "surf/surf.h"
+ #include "surf/surf_routing.h"
#ifdef HAVE_TRACING
case INSTR_ROUTER: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "ROUTER"); break;
case INSTR_SMPI: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MPI"); break;
case INSTR_MSG_PROCESS: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_PROCESS"); break;
+ case INSTR_MSG_VM: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_VM"); break;
case INSTR_MSG_TASK: snprintf (typename, INSTR_DEFAULT_STR_SIZE, "MSG_TASK"); break;
default: THROWF (tracing_error, 0, "new container kind is unknown."); break;
}
#ifndef INSTR_PRIVATE_H_
#define INSTR_PRIVATE_H_
+ #include "instr/instr.h"
+ #include "instr/instr_interface.h"
#include "simgrid_config.h"
#ifdef HAVE_TRACING
#define INSTR_DEFAULT_STR_SIZE 500
- #include "instr/instr.h"
- #include "msg/msg.h"
- #include "simdag/private.h"
- #include "simix/smx_private.h"
- #include "xbt/graph_private.h"
+ #include "xbt/graph.h"
+ #include "xbt/dict.h"
+ #include "simgrid/platf.h"
typedef enum {
PAJE_DefineContainerType,
INSTR_ROUTER,
INSTR_AS,
INSTR_SMPI,
+ INSTR_MSG_VM,
INSTR_MSG_PROCESS,
INSTR_MSG_TASK
} e_container_types;
extern xbt_dict_t created_categories;
extern xbt_dict_t declared_marks;
extern xbt_dict_t user_host_variables;
+extern xbt_dict_t user_vm_variables;
extern xbt_dict_t user_link_variables;
extern double TRACE_last_timestamp_to_dump;
void new_pajeEndLink (double timestamp, container_t container, type_t type, container_t destContainer, const char *value, const char *key);
void new_pajeNewEvent (double timestamp, container_t container, type_t type, val_t value);
- /* declaration of instrumentation functions from msg_task_instr.c */
- void TRACE_msg_set_task_category(msg_task_t task, const char *category);
- void TRACE_msg_task_create(msg_task_t task);
- void TRACE_msg_task_execute_start(msg_task_t task);
- void TRACE_msg_task_execute_end(msg_task_t task);
- void TRACE_msg_task_destroy(msg_task_t task);
- void TRACE_msg_task_get_start(void);
- void TRACE_msg_task_get_end(double start_time, msg_task_t task);
- int TRACE_msg_task_put_start(msg_task_t task); //returns TRUE if the task_put_end must be called
- void TRACE_msg_task_put_end(void);
-
- /* declaration of instrumentation functions from msg_process_instr.c */
- char *instr_process_id (msg_process_t proc, char *str, int len);
- char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len);
- void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host,
- msg_host_t new_host);
- void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host);
- void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_host_t host);
- void TRACE_msg_process_kill(msg_process_t process);
- void TRACE_msg_process_suspend(msg_process_t process);
- void TRACE_msg_process_resume(msg_process_t process);
- void TRACE_msg_process_sleep_in(msg_process_t process); //called from msg/gos.c
- void TRACE_msg_process_sleep_out(msg_process_t process);
- void TRACE_msg_process_end(msg_process_t process);
-
- /* declaration of instrumentation functions from instr_msg_vm.c */
- char *instr_vm_id (msg_vm_t vm, char *str, int len);
- char *instr_vm_id_2 (const char *vm_name, char *str, int len);
- void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host,
- msg_host_t new_host);
- void TRACE_msg_vm_create (const char *vm_name, msg_host_t host);
- void TRACE_msg_vm_kill(msg_vm_t process);
- void TRACE_msg_vm_suspend(msg_vm_t vm);
- void TRACE_msg_vm_resume(msg_vm_t vm);
- void TRACE_msg_vm_sleep_in(msg_vm_t vm);
- void TRACE_msg_vm_sleep_out(msg_vm_t vm);
- void TRACE_msg_vm_end(msg_vm_t vm);
-
- /* from surf_instr.c */
- void TRACE_surf_alloc(void);
- void TRACE_surf_release(void);
- void TRACE_surf_host_set_power(double date, const char *resource, double power);
- void TRACE_surf_link_set_bandwidth(double date, const char *resource, double bandwidth);
- void TRACE_surf_link_set_latency(double date, const char *resource, double latency);
- void TRACE_surf_action(surf_action_t surf_action, const char *category);
-
//for tracing gtnets
void TRACE_surf_gtnets_communicate(void *action, void *src, void *dst);
- /* from smpi_instr.c */
- void TRACE_internal_smpi_set_category (const char *category);
- const char *TRACE_internal_smpi_get_category (void);
- void TRACE_smpi_alloc(void);
- void TRACE_smpi_release(void);
- void TRACE_smpi_init(int rank);
- void TRACE_smpi_finalize(int rank);
- void TRACE_smpi_collective_in(int rank, int root, const char *operation);
- void TRACE_smpi_collective_out(int rank, int root, const char *operation);
- void TRACE_smpi_computing_init(int rank);
- void TRACE_smpi_computing_out(int rank);
- void TRACE_smpi_computing_in(int rank);
- void TRACE_smpi_ptp_in(int rank, int src, int dst, const char *operation);
- void TRACE_smpi_ptp_out(int rank, int src, int dst, const char *operation);
- void TRACE_smpi_send(int rank, int src, int dst);
- void TRACE_smpi_recv(int rank, int src, int dst);
-
/* from instr_config.c */
- int TRACE_start (void);
- int TRACE_end (void);
int TRACE_needs_platform (void);
int TRACE_is_enabled(void);
int TRACE_platform(void);
int TRACE_categorized (void);
int TRACE_uncategorized (void);
int TRACE_msg_process_is_enabled(void);
+int TRACE_msg_vm_is_enabled(void);
int TRACE_buffer (void);
int TRACE_onelink_only (void);
int TRACE_disable_destroy (void);
char *TRACE_get_filename(void);
char *TRACE_get_viva_uncat_conf (void);
char *TRACE_get_viva_cat_conf (void);
- void TRACE_global_init(int *argc, char **argv);
- void TRACE_help(int detailed);
void TRACE_generate_viva_uncat_conf (void);
void TRACE_generate_viva_cat_conf (void);
void instr_pause_tracing (void);
double now,
double delta);
void TRACE_surf_resource_utilization_alloc(void);
- void TRACE_surf_resource_utilization_release(void);
/* instr_paje.c */
extern xbt_dict_t trivaNodeTypes;
val_t PJ_value_get (const char *name, const type_t father);
void PJ_value_free (val_t value);
- /* instr_routing.c */
- void instr_routing_define_callbacks (void);
- void instr_new_variable_type (const char *new_typename, const char *color);
- void instr_new_user_variable_type (const char *father_type, const char *new_typename, const char *color);
- void instr_new_user_state_type (const char *father_type, const char *new_typename);
- void instr_new_value_for_user_state_type (const char *typename, const char *value, const char *color);
- int instr_platform_traced (void);
- xbt_graph_t instr_routing_platform_graph (void);
- void instr_routing_platform_graph_export_graphviz (xbt_graph_t g, const char *filename);
-
#endif /* HAVE_TRACING */
#ifdef HAVE_JEDULE
--- /dev/null
- #include "instr/instr_private.h"
+/* Copyright (c) 2012. The SimGrid Team.
+ * All rights reserved. */
+
+/* This program is free software; you can redistribute it and/or modify it
+ * under the terms of the license (GNU LGPL) which comes with this package. */
+
++#include "msg_private.h"
+
+#ifdef HAVE_TRACING
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_msg_vm, instr, "MSG VM");
+
+
+char *instr_vm_id (msg_vm_t vm, char *str, int len)
+{
+ return instr_vm_id_2 (vm->name, str, len);
+}
+
+char *instr_vm_id_2 (const char *vm_name, char *str, int len)
+{
+ snprintf (str, len, "%s", vm_name);
+ return str;
+}
+
+/*
+ * Instrumentation functions to trace MSG VMs (msg_vm_t)
+ */
+void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host, msg_host_t new_host)
+{
+ if (TRACE_msg_vm_is_enabled()){
+ static long long int counter = 0;
+ char key[INSTR_DEFAULT_STR_SIZE];
+ snprintf (key, INSTR_DEFAULT_STR_SIZE, "%lld", counter++);
+
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ //start link
+ container_t msg = PJ_container_get (instr_vm_id(vm, str, len));
+ type_t type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root());
+ new_pajeStartLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
+
+ //destroy existing container of this vm
+ container_t existing_container = PJ_container_get(instr_vm_id(vm, str, len));
+ PJ_container_remove_from_parent (existing_container);
+ PJ_container_free(existing_container);
+
+ //create new container on the new_host location
+ msg = PJ_container_new(instr_vm_id(vm, str, len), INSTR_MSG_VM, PJ_container_get(SIMIX_host_get_name(new_host->smx_host)));
+
+ //end link
+ msg = PJ_container_get(instr_vm_id(vm, str, len));
+ type = PJ_type_get ("MSG_VM_LINK", PJ_type_get_root());
+ new_pajeEndLink (MSG_get_clock(), PJ_container_get_root(), type, msg, "M", key);
+ }
+}
+
+void TRACE_msg_vm_create (const char *vm_name, msg_host_t host)
+{
+ if (TRACE_msg_vm_is_enabled()){
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ container_t host_container = PJ_container_get (SIMIX_host_get_name(host->smx_host));
+ PJ_container_new(instr_vm_id_2(vm_name, str, len), INSTR_MSG_VM, host_container);
+ }
+}
+
+void TRACE_msg_vm_kill(msg_vm_t vm) {
+ if (TRACE_msg_vm_is_enabled()) {
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ //kill means that this vm no longer exists, let's destroy it
+ container_t process = PJ_container_get (instr_vm_id(vm, str, len));
+ PJ_container_remove_from_parent (process);
+ PJ_container_free (process);
+ }
+}
+
+void TRACE_msg_vm_suspend(msg_vm_t vm)
+{
+ if (TRACE_msg_vm_is_enabled()){
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
+ type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
+ val_t value = PJ_value_get ("suspend", type);
+ new_pajePushState (MSG_get_clock(), vm_container, type, value);
+ }
+}
+
+void TRACE_msg_vm_resume(msg_vm_t vm)
+{
+ if (TRACE_msg_vm_is_enabled()){
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
+ type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
+ new_pajePopState (MSG_get_clock(), vm_container, type);
+ }
+}
+
+void TRACE_msg_vm_sleep_in(msg_vm_t vm)
+{
+ if (TRACE_msg_vm_is_enabled()){
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
+ type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
+ val_t value = PJ_value_get ("sleep", type);
+ new_pajePushState (MSG_get_clock(), vm_container, type, value);
+ }
+}
+
+void TRACE_msg_vm_sleep_out(msg_vm_t vm)
+{
+ if (TRACE_msg_vm_is_enabled()){
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ container_t vm_container = PJ_container_get (instr_vm_id(vm, str, len));
+ type_t type = PJ_type_get ("MSG_VM_STATE", vm_container->type);
+ new_pajePopState (MSG_get_clock(), vm_container, type);
+ }
+}
+
+void TRACE_msg_vm_end(msg_vm_t vm)
+{
+ if (TRACE_msg_vm_is_enabled()) {
+ int len = INSTR_DEFAULT_STR_SIZE;
+ char str[INSTR_DEFAULT_STR_SIZE];
+
+ //that's the end, let's destroy it
+ container_t container = PJ_container_get (instr_vm_id(vm, str, len));
+ PJ_container_remove_from_parent (container);
+ PJ_container_free (container);
+ }
+}
+
+#endif /* HAVE_TRACING */
msg_task_t *task_received; /* where the task will be received (NULL for the sender) */
msg_error_t status; /* status of the communication once finished */
} s_msg_comm_t;
-
+/*
typedef enum {
msg_vm_state_suspended, msg_vm_state_running, msg_vm_state_migrating
} e_msg_vm_state_t;
typedef struct msg_vm {
+ const char *name;
s_xbt_swag_hookup_t all_vms_hookup;
s_xbt_swag_hookup_t host_vms_hookup;
xbt_dynar_t processes;
msg_host_t location;
int coreAmount;
} s_msg_vm_t;
-
+*/
/************************** Global variables ********************************/
typedef struct MSG_Global {
xbt_fifo_t host;
void MSG_post_create_environment(void);
+ /********** Tracing **********/
+ /* declaration of instrumentation functions from msg_task_instr.c */
+ void TRACE_msg_set_task_category(msg_task_t task, const char *category);
+ void TRACE_msg_task_create(msg_task_t task);
+ void TRACE_msg_task_execute_start(msg_task_t task);
+ void TRACE_msg_task_execute_end(msg_task_t task);
+ void TRACE_msg_task_destroy(msg_task_t task);
+ void TRACE_msg_task_get_start(void);
+ void TRACE_msg_task_get_end(double start_time, msg_task_t task);
+ int TRACE_msg_task_put_start(msg_task_t task); //returns TRUE if the task_put_end must be called
+ void TRACE_msg_task_put_end(void);
+
+ /* declaration of instrumentation functions from msg_process_instr.c */
+ char *instr_process_id (msg_process_t proc, char *str, int len);
+ char *instr_process_id_2 (const char *process_name, int process_pid, char *str, int len);
+ void TRACE_msg_process_change_host(msg_process_t process, msg_host_t old_host,
+ msg_host_t new_host);
+ void TRACE_msg_process_create (const char *process_name, int process_pid, msg_host_t host);
+ void TRACE_msg_process_destroy (const char *process_name, int process_pid, msg_host_t host);
+ void TRACE_msg_process_kill(msg_process_t process);
+ void TRACE_msg_process_suspend(msg_process_t process);
+ void TRACE_msg_process_resume(msg_process_t process);
+ void TRACE_msg_process_sleep_in(msg_process_t process); //called from msg/gos.c
+ void TRACE_msg_process_sleep_out(msg_process_t process);
+ void TRACE_msg_process_end(msg_process_t process);
+
++/* declaration of instrumentation functions from instr_msg_vm.c */
++char *instr_vm_id (msg_vm_t vm, char *str, int len);
++char *instr_vm_id_2 (const char *vm_name, char *str, int len);
++void TRACE_msg_vm_change_host(msg_vm_t vm, msg_host_t old_host,
++ msg_host_t new_host);
++void TRACE_msg_vm_create (const char *vm_name, msg_host_t host);
++void TRACE_msg_vm_kill(msg_vm_t process);
++void TRACE_msg_vm_suspend(msg_vm_t vm);
++void TRACE_msg_vm_resume(msg_vm_t vm);
++void TRACE_msg_vm_sleep_in(msg_vm_t vm);
++void TRACE_msg_vm_sleep_out(msg_vm_t vm);
++void TRACE_msg_vm_end(msg_vm_t vm);
++
SG_END_DECL()
#endif
container_t child1, child2;
const char *child1_name, *child2_name;
xbt_dict_foreach(container->children, cursor1, child1_name, child1) {
- if (graph_extraction_filter_out (child1, NULL)) continue;
+ //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task
+ if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue;
+
xbt_dict_foreach(container->children, cursor2, child2_name, child2) {
- if (graph_extraction_filter_out (child2, child1)) continue;
- XBT_DEBUG ("get_route from %s to %s", child1_name, child2_name);
+ //if child2 is not a link, a smpi node, a msg process, a msg vm or a msg task
+ if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue;
+
+ //if child1 is not child2
+ if (strcmp (child1_name, child2_name) == 0) continue;
//get the route
sg_platf_route_cbarg_t route = xbt_new0(s_sg_platf_route_cbarg_t,1);
PJ_type_link_new ("MSG_PROCESS_TASK_LINK", PJ_type_get_root(), msg_process, msg_process);
}
}
+
+ if (TRACE_msg_vm_is_enabled()) {
+ type_t msg_vm = PJ_type_get_or_null ("MSG_VM", new->type);
+ if (msg_vm == NULL){
+ msg_vm = PJ_type_container_new("MSG_VM", new->type);
+ type_t state = PJ_type_state_new ("MSG_VM_STATE", msg_vm);
+ PJ_value_new ("suspend", "1 0 1", state);
+ PJ_value_new ("sleep", "1 1 0", state);
+ PJ_value_new ("receive", "1 0 0", state);
+ PJ_value_new ("send", "0 0 1", state);
+ PJ_value_new ("task_execute", "0 1 1", state);
+ PJ_type_link_new ("MSG_VM_LINK", PJ_type_get_root(), msg_vm, msg_vm);
+ PJ_type_link_new ("MSG_VM_PROCESS_LINK", PJ_type_get_root(), msg_vm, msg_vm);
+ }
+ }
+
}
static void instr_routing_parse_start_router (sg_platf_router_cbarg_t router)
snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename);
PJ_type_variable_new (tnstr, color, root);
}
- if (!strcmp (root->name, "LINK")){
+ if (!strcmp (root->name, "MSG_VM")){
+ char tnstr[INSTR_DEFAULT_STR_SIZE];
+ snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "p%s", new_typename);
+ PJ_type_variable_new (tnstr, color, root);
+ }
+ if (!strcmp (root->name, "LINK")){
char tnstr[INSTR_DEFAULT_STR_SIZE];
snprintf (tnstr, INSTR_DEFAULT_STR_SIZE, "b%s", new_typename);
PJ_type_variable_new (tnstr, color, root);
const char *sn = instr_node_name (s);
const char *dn = instr_node_name (d);
int len = strlen(sn)+strlen(dn)+1;
- char *name = (char*)malloc(len * sizeof(char));
+ char *name = (char*)xbt_malloc(len * sizeof(char));
snprintf (name, len, "%s%s", sn, dn);
container_t child1, child2;
const char *child1_name, *child2_name;
xbt_dict_foreach(container->children, cursor1, child1_name, child1) {
- //if child1 is not a link, a smpi node, a msg process or a msg task
- if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_TASK) continue;
+ //if child1 is not a link, a smpi node, a msg process, a msg vm or a msg task
+ if (child1->kind == INSTR_LINK || child1->kind == INSTR_SMPI || child1->kind == INSTR_MSG_PROCESS || child1->kind == INSTR_MSG_VM || child1->kind == INSTR_MSG_TASK) continue;
xbt_dict_foreach(container->children, cursor2, child2_name, child2) {
//if child2 is not a link, a smpi node, a msg process or a msg task
- if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_TASK) continue;
+ if (child2->kind == INSTR_LINK || child2->kind == INSTR_SMPI || child2->kind == INSTR_MSG_PROCESS || child2->kind == INSTR_MSG_VM || child2->kind == INSTR_MSG_TASK) continue;
//if child1 is not child2
if (strcmp (child1_name, child2_name) == 0) continue;
#include "heap_private.h"
#include <stdio.h>
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(xbt_heap, xbt, "Heap");
static void xbt_heap_max_heapify(xbt_heap_t H);
static void xbt_heap_increase_key(xbt_heap_t H, int i);
if (count > size) {
H->size = (size << 1) + 1;
H->items =
- (void *) realloc(H->items,
+ (void *) xbt_realloc(H->items,
(H->size) * sizeof(struct xbt_heap_item));
}
item->key = key;
item->content = content;
xbt_heap_increase_key(H, count - 1);
+ XBT_DEBUG("Heap has now %d elements and max elem is %g",xbt_heap_size(H),xbt_heap_maxkey(H));
return;
}
int size = H->size;
void *max;
+ XBT_DEBUG("Heap has %d elements before extraction and max elem was %g",xbt_heap_size(H),xbt_heap_maxkey(H));
+
if (H->count == 0)
return NULL;
if (H->count < size >> 2 && size > 16) {
size = (size >> 1) + 1;
H->items =
- (void *) realloc(items,
+ (void *) xbt_realloc(items,
size * sizeof(struct xbt_heap_item));
H->size = size;
}
*/
void *xbt_heap_remove(xbt_heap_t H, int i)
{
+ XBT_DEBUG("Heap has %d elements: extracting element %d",xbt_heap_size(H),i);
+
if ((i < 0) || (i > H->count - 1))
return NULL;
/* put element i at head */