Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
refactored smpi into multiple source files.
authormarkls <markls@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 28 Aug 2007 21:07:49 +0000 (21:07 +0000)
committermarkls <markls@48e7efb5-ca39-0410-a469-dd3cf9ba447f>
Tue, 28 Aug 2007 21:07:49 +0000 (21:07 +0000)
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/simgrid/simgrid/trunk@4125 48e7efb5-ca39-0410-a469-dd3cf9ba447f

41 files changed:
Makefile.in
configure
doc/Makefile.in
examples/Makefile.in
examples/amok/Makefile.in
examples/amok/bandwidth/Makefile.in
examples/amok/saturate/Makefile.in
examples/gras/Makefile.in
examples/gras/all2all/Makefile.in
examples/gras/chrono/Makefile.in
examples/gras/mmrpc/Makefile.in
examples/gras/mutual_exclusion/simple_token/Makefile.in
examples/gras/ping/Makefile.in
examples/gras/pmm/Makefile.in
examples/gras/rpc/Makefile.in
examples/gras/spawn/Makefile.in
examples/gras/synchro/Makefile.in
examples/gras/timer/Makefile.in
examples/java/Makefile.in
examples/java/basic/Makefile.in
examples/java/comm_time/Makefile.in
examples/java/ping_pong/Makefile.in
examples/java/suspend/Makefile.in
examples/msg/Makefile.in
examples/simdag/Makefile.in
include/Makefile.in
src/Makefile.am
src/Makefile.in
src/include/simix/simix.h
src/simix/smx_action.c
src/smpi/smpi_base.c [new file with mode: 0644]
src/smpi/smpi_bench.c [new file with mode: 0644]
src/smpi/smpi_global.c [new file with mode: 0644]
src/smpi/smpi_mpi.c [moved from src/smpi/mpi.c with 100% similarity]
src/smpi/smpi_receiver.c [moved from src/smpi/receiver.c with 100% similarity]
src/smpi/smpi_sender.c [moved from src/smpi/sender.c with 100% similarity]
src/smpi/smpi_util.c [new file with mode: 0644]
testsuite/Makefile.in
tools/Makefile.in
tools/gras/Makefile.in
tools/tesh/Makefile.in

index 34bf4bf..e3b2a41 100644 (file)
@@ -158,6 +158,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 5c607f8..8a1ceb6 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,5 +1,5 @@
 #! /bin/sh
-# From configure.ac Revision: 1.181 .
+# From configure.ac Revision: 1.182 .
 # Guess values for system-dependent variables and create Makefiles.
 # Generated by GNU Autoconf 2.61 for simgrid 3.3-cvs.
 #
index 962223a..e62f3dc 100644 (file)
@@ -127,6 +127,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 941aefc..dcc0b54 100644 (file)
@@ -140,6 +140,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 0ec85c2..f18bb6c 100644 (file)
@@ -139,6 +139,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 698875b..da9d1b0 100644 (file)
@@ -161,6 +161,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index c266f8f..6305005 100644 (file)
@@ -161,6 +161,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 318484b..586fdf6 100644 (file)
@@ -139,6 +139,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index e74c302..f5139db 100644 (file)
@@ -174,6 +174,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 47e6f41..2ee1445 100644 (file)
@@ -168,6 +168,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index f667b22..c1ffdb0 100644 (file)
@@ -175,6 +175,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index f0306c8..6447456 100644 (file)
@@ -171,6 +171,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 05b6908..c0e970c 100644 (file)
@@ -175,6 +175,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 6ed1171..566d905 100644 (file)
@@ -171,6 +171,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index d389b9f..0c643bb 100644 (file)
@@ -174,6 +174,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 01dfddd..e76654b 100644 (file)
@@ -175,6 +175,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 222beee..ef9c9ce 100644 (file)
@@ -168,6 +168,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 6afca03..7bac37a 100644 (file)
@@ -166,6 +166,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index e3b81e6..aa9e8a2 100644 (file)
@@ -139,6 +139,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 9c6c569..f718d08 100644 (file)
@@ -132,6 +132,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index b6cc8f8..efd5573 100644 (file)
@@ -132,6 +132,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 6df5cd1..085a49d 100644 (file)
@@ -132,6 +132,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 234bc76..afb6778 100644 (file)
@@ -132,6 +132,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 2218b71..ceb4fb3 100644 (file)
@@ -212,6 +212,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 8449284..98bc1f0 100644 (file)
@@ -153,6 +153,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index ca90ed1..99208a3 100644 (file)
@@ -141,6 +141,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
@@ -239,6 +240,8 @@ nobase_include_HEADERS = \
        simdag/simdag.h \
        simdag/datatypes.h \
        \
+       smpi/smpi.h \
+       \
        surf/surfxml_parse.h \
        surf/surfxml.h \
        \
index 8407f6f..b645cbb 100644 (file)
@@ -186,9 +186,12 @@ SIMIX_SRC= \
 
 SMPI_SRC= \
   smpi/smpi_base.c \
+  smpi/smpi_bench.c \
+  smpi/smpi_global.c \
   smpi/smpi_mpi.c \
-  smpi/sender.c \
-  smpi/receiver.c
+  smpi/smpi_sender.c \
+  smpi/smpi_receiver.c \
+  smpi/smpi_util.c
 
 MSG_SRC=  msg/msg_config.c \
   msg/task.c msg/host.c msg/m_process.c msg/gos.c \
index 4e0f298..4d170b9 100644 (file)
@@ -238,7 +238,8 @@ libsimgrid4java_la_LINK = $(LIBTOOL) --tag=CXX $(AM_LIBTOOLFLAGS) \
        $(CXXFLAGS) $(libsimgrid4java_la_LDFLAGS) $(LDFLAGS) -o $@
 @HAVE_JAVA_TRUE@am_libsimgrid4java_la_rpath = -rpath $(libdir)
 libsmpi_la_DEPENDENCIES = libsimgrid.la
-am__objects_20 = smpi_base.lo smpi_mpi.lo sender.lo receiver.lo
+am__objects_20 = smpi_base.lo smpi_bench.lo smpi_global.lo smpi_mpi.lo \
+       smpi_sender.lo smpi_receiver.lo smpi_util.lo
 am_libsmpi_la_OBJECTS = $(am__objects_20)
 libsmpi_la_OBJECTS = $(am_libsmpi_la_OBJECTS)
 libsmpi_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@@ -559,9 +560,12 @@ SIMIX_SRC = \
 
 SMPI_SRC = \
   smpi/smpi_base.c \
+  smpi/smpi_bench.c \
+  smpi/smpi_global.c \
   smpi/smpi_mpi.c \
-  smpi/sender.c \
-  smpi/receiver.c
+  smpi/smpi_sender.c \
+  smpi/smpi_receiver.c \
+  smpi/smpi_util.c
 
 MSG_SRC = msg/msg_config.c \
   msg/task.c msg/host.c msg/m_process.c msg/gos.c \
@@ -865,7 +869,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/network_gtnets.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/peermanagement.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/process.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/receiver.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rl_dns.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rl_emul.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rl_msg.Plo@am__quote@
@@ -879,7 +882,6 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd_task.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sd_workstation.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sdp.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sender.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/set_unit.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sg_dns.Plo@am__quote@
@@ -889,7 +891,12 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sg_transport.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/simgrid_units_main.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_base.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_bench.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_global.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_mpi.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_receiver.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_sender.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smpi_util.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smx_action.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smx_config.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/smx_deployment.Plo@am__quote@
@@ -1744,6 +1751,20 @@ smpi_base.lo: smpi/smpi_base.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_base.lo `test -f 'smpi/smpi_base.c' || echo '$(srcdir)/'`smpi/smpi_base.c
 
+smpi_bench.lo: smpi/smpi_bench.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smpi_bench.lo -MD -MP -MF $(DEPDIR)/smpi_bench.Tpo -c -o smpi_bench.lo `test -f 'smpi/smpi_bench.c' || echo '$(srcdir)/'`smpi/smpi_bench.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/smpi_bench.Tpo $(DEPDIR)/smpi_bench.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/smpi_bench.c' object='smpi_bench.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_bench.lo `test -f 'smpi/smpi_bench.c' || echo '$(srcdir)/'`smpi/smpi_bench.c
+
+smpi_global.lo: smpi/smpi_global.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smpi_global.lo -MD -MP -MF $(DEPDIR)/smpi_global.Tpo -c -o smpi_global.lo `test -f 'smpi/smpi_global.c' || echo '$(srcdir)/'`smpi/smpi_global.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/smpi_global.Tpo $(DEPDIR)/smpi_global.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/smpi_global.c' object='smpi_global.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_global.lo `test -f 'smpi/smpi_global.c' || echo '$(srcdir)/'`smpi/smpi_global.c
+
 smpi_mpi.lo: smpi/smpi_mpi.c
 @am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smpi_mpi.lo -MD -MP -MF $(DEPDIR)/smpi_mpi.Tpo -c -o smpi_mpi.lo `test -f 'smpi/smpi_mpi.c' || echo '$(srcdir)/'`smpi/smpi_mpi.c
 @am__fastdepCC_TRUE@   mv -f $(DEPDIR)/smpi_mpi.Tpo $(DEPDIR)/smpi_mpi.Plo
@@ -1751,19 +1772,26 @@ smpi_mpi.lo: smpi/smpi_mpi.c
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
 @am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_mpi.lo `test -f 'smpi/smpi_mpi.c' || echo '$(srcdir)/'`smpi/smpi_mpi.c
 
-sender.lo: smpi/sender.c
-@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sender.lo -MD -MP -MF $(DEPDIR)/sender.Tpo -c -o sender.lo `test -f 'smpi/sender.c' || echo '$(srcdir)/'`smpi/sender.c
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/sender.Tpo $(DEPDIR)/sender.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/sender.c' object='sender.lo' libtool=yes @AMDEPBACKSLASH@
+smpi_sender.lo: smpi/smpi_sender.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smpi_sender.lo -MD -MP -MF $(DEPDIR)/smpi_sender.Tpo -c -o smpi_sender.lo `test -f 'smpi/smpi_sender.c' || echo '$(srcdir)/'`smpi/smpi_sender.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/smpi_sender.Tpo $(DEPDIR)/smpi_sender.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/smpi_sender.c' object='smpi_sender.lo' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_sender.lo `test -f 'smpi/smpi_sender.c' || echo '$(srcdir)/'`smpi/smpi_sender.c
+
+smpi_receiver.lo: smpi/smpi_receiver.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smpi_receiver.lo -MD -MP -MF $(DEPDIR)/smpi_receiver.Tpo -c -o smpi_receiver.lo `test -f 'smpi/smpi_receiver.c' || echo '$(srcdir)/'`smpi/smpi_receiver.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/smpi_receiver.Tpo $(DEPDIR)/smpi_receiver.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/smpi_receiver.c' object='smpi_receiver.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sender.lo `test -f 'smpi/sender.c' || echo '$(srcdir)/'`smpi/sender.c
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_receiver.lo `test -f 'smpi/smpi_receiver.c' || echo '$(srcdir)/'`smpi/smpi_receiver.c
 
-receiver.lo: smpi/receiver.c
-@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT receiver.lo -MD -MP -MF $(DEPDIR)/receiver.Tpo -c -o receiver.lo `test -f 'smpi/receiver.c' || echo '$(srcdir)/'`smpi/receiver.c
-@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/receiver.Tpo $(DEPDIR)/receiver.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/receiver.c' object='receiver.lo' libtool=yes @AMDEPBACKSLASH@
+smpi_util.lo: smpi/smpi_util.c
+@am__fastdepCC_TRUE@   $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT smpi_util.lo -MD -MP -MF $(DEPDIR)/smpi_util.Tpo -c -o smpi_util.lo `test -f 'smpi/smpi_util.c' || echo '$(srcdir)/'`smpi/smpi_util.c
+@am__fastdepCC_TRUE@   mv -f $(DEPDIR)/smpi_util.Tpo $(DEPDIR)/smpi_util.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      source='smpi/smpi_util.c' object='smpi_util.lo' libtool=yes @AMDEPBACKSLASH@
 @AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o receiver.lo `test -f 'smpi/receiver.c' || echo '$(srcdir)/'`smpi/receiver.c
+@am__fastdepCC_FALSE@  $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o smpi_util.lo `test -f 'smpi/smpi_util.c' || echo '$(srcdir)/'`smpi/smpi_util.c
 
 cunit_unit.o: @builddir@/cunit_unit.c
 @am__fastdepCC_TRUE@   $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT cunit_unit.o -MD -MP -MF $(DEPDIR)/cunit_unit.Tpo -c -o cunit_unit.o `test -f '@builddir@/cunit_unit.c' || echo '$(srcdir)/'`@builddir@/cunit_unit.c
index 8c58a85..3fa031e 100644 (file)
@@ -122,7 +122,7 @@ XBT_PUBLIC(xbt_fifo_t) SIMIX_cond_get_actions(smx_cond_t cond);
 
 
 /************************** Action handling ************************************/
-XBT_PUBLIC(smx_action_t) SIMIX_action_communicate(smx_host_t sender,smx_host_t receiver, char *name,
+XBT_PUBLIC(smx_action_t) SIMIX_action_communicate(smx_host_t sender,smx_host_t receiver, const char *name,
                                                                                                                                                                                                        double size, double rate);
 XBT_PUBLIC(smx_action_t) SIMIX_action_execute(smx_host_t host,char *name, double amount);
 XBT_PUBLIC(smx_action_t) SIMIX_action_sleep(smx_host_t host, double amount);
index 027acb9..681da73 100644 (file)
@@ -25,7 +25,7 @@ XBT_LOG_NEW_DEFAULT_SUBCATEGORY(simix_action, simix,
  *     \return A new SIMIX action
  * */
 smx_action_t SIMIX_action_communicate(smx_host_t sender,
-                                     smx_host_t receiver, char *name,
+                                     smx_host_t receiver, const char *name,
                                      double size, double rate)
 {
   /* check if the host is active */
diff --git a/src/smpi/smpi_base.c b/src/smpi/smpi_base.c
new file mode 100644 (file)
index 0000000..af55a6c
--- /dev/null
@@ -0,0 +1,259 @@
+#include "private.h"
+
+SMPI_MPI_Global_t smpi_mpi_global = NULL;
+
+void smpi_mpi_land_func(void *x, void *y, void *z)
+{
+       *(int *)z = *(int *)x && *(int *)y;
+}
+
+void smpi_mpi_sum_func(void *x, void *y, void *z)
+{
+       *(int *)z = *(int *)x + *(int *)y;
+}
+
+int inline smpi_mpi_comm_size(smpi_mpi_communicator_t *comm)
+{
+       return comm->size;
+}
+
+// FIXME: smarter algorithm?
+int smpi_mpi_comm_rank(smpi_mpi_communicator_t *comm, smx_host_t host)
+{
+       int i;
+
+       for(i = comm->size - 1; i > 0 && host != comm->simdata->hosts[i]; i--);
+
+       return i;
+}
+
+int inline smpi_mpi_comm_rank_self(smpi_mpi_communicator_t *comm)
+{
+       return smpi_mpi_comm_rank(comm, SIMIX_host_self());
+}
+
+void smpi_mpi_init()
+{
+       smx_process_t process;
+       smx_host_t host;
+       smx_host_t *hosts;
+       int size;
+
+       SIMIX_mutex_lock(smpi_global->running_hosts_count_mutex);
+       smpi_global->running_hosts_count++;
+       SIMIX_mutex_unlock(smpi_global->running_hosts_count_mutex);
+
+       // initialize some local variables
+       process = SIMIX_process_self();
+       host    = SIMIX_host_self();
+       hosts   = SIMIX_host_get_table();
+       size    = SIMIX_host_get_number();
+
+       // node 0 sets the globals
+       if (host == hosts[0]) {
+
+               smpi_mpi_global                                = xbt_new(s_SMPI_MPI_Global_t, 1);
+
+               // global communicator
+               smpi_mpi_global->mpi_comm_world                         = xbt_new(smpi_mpi_communicator_t, 1);
+               smpi_mpi_global->mpi_comm_world->size                   = size;
+               smpi_mpi_global->mpi_comm_world->simdata                = xbt_new(s_smpi_mpi_communicator_simdata_t, 1);
+               smpi_mpi_global->mpi_comm_world->simdata->barrier_count = 0;
+               smpi_mpi_global->mpi_comm_world->simdata->barrier_mutex = SIMIX_mutex_init();
+               smpi_mpi_global->mpi_comm_world->simdata->barrier_cond  = SIMIX_cond_init();
+               smpi_mpi_global->mpi_comm_world->simdata->hosts         = hosts;
+               smpi_mpi_global->mpi_comm_world->simdata->processes     = xbt_new(smx_process_t, size);
+               smpi_mpi_global->mpi_comm_world->simdata->processes[0]  = process;
+
+               // mpi datatypes
+               smpi_mpi_global->mpi_byte                      = xbt_new(smpi_mpi_datatype_t, 1);
+               smpi_mpi_global->mpi_byte->size                = (size_t)1;
+               smpi_mpi_global->mpi_int                       = xbt_new(smpi_mpi_datatype_t, 1);
+               smpi_mpi_global->mpi_int->size                 = sizeof(int);
+               smpi_mpi_global->mpi_double                    = xbt_new(smpi_mpi_datatype_t, 1);
+               smpi_mpi_global->mpi_double->size              = sizeof(double);
+
+               // mpi operations
+               smpi_mpi_global->mpi_land                      = xbt_new(smpi_mpi_op_t, 1);
+               smpi_mpi_global->mpi_land->func                = smpi_mpi_land_func;
+               smpi_mpi_global->mpi_sum                       = xbt_new(smpi_mpi_op_t, 1);
+               smpi_mpi_global->mpi_sum->func                 = smpi_mpi_sum_func;
+
+               // signal all nodes to perform initialization
+               SIMIX_mutex_lock(smpi_global->start_stop_mutex);
+               smpi_global->root_ready = 1;
+               SIMIX_cond_broadcast(smpi_global->start_stop_cond);
+               SIMIX_mutex_unlock(smpi_global->start_stop_mutex);
+
+       } else {
+
+               // make sure root is done before own initialization
+               SIMIX_mutex_lock(smpi_global->start_stop_mutex);
+               if (!smpi_global->root_ready) {
+                       SIMIX_cond_wait(smpi_global->start_stop_cond, smpi_global->start_stop_mutex);
+               }
+               SIMIX_mutex_unlock(smpi_global->start_stop_mutex);
+
+               smpi_mpi_global->mpi_comm_world->simdata->processes[smpi_mpi_comm_rank_self(smpi_mpi_global->mpi_comm_world)] = process;
+       }
+
+       // wait for all nodes to signal initializatin complete
+       SIMIX_mutex_lock(smpi_global->start_stop_mutex);
+       smpi_global->ready_process_count++;
+       if (smpi_global->ready_process_count < 3 * size) {
+               SIMIX_cond_wait(smpi_global->start_stop_cond, smpi_global->start_stop_mutex);
+       } else {
+               SIMIX_cond_broadcast(smpi_global->start_stop_cond);
+       }
+       SIMIX_mutex_unlock(smpi_global->start_stop_mutex);
+
+       return;
+}
+
+void smpi_mpi_finalize()
+{
+       int i;
+
+       SIMIX_mutex_lock(smpi_global->running_hosts_count_mutex);
+       i = --smpi_global->running_hosts_count;
+       SIMIX_mutex_unlock(smpi_global->running_hosts_count_mutex);
+
+       SIMIX_mutex_lock(smpi_global->start_stop_mutex);
+       smpi_global->ready_process_count--;
+       SIMIX_mutex_unlock(smpi_global->start_stop_mutex);
+
+       if (0 >= i) {
+
+               // wake up senders/receivers
+               for (i = 0; i < smpi_mpi_global->mpi_comm_world->size; i++) {
+                       if (SIMIX_process_is_suspended(smpi_global->sender_processes[i])) {
+                               SIMIX_process_resume(smpi_global->sender_processes[i]);
+                       }
+                       if (SIMIX_process_is_suspended(smpi_global->receiver_processes[i])) {
+                               SIMIX_process_resume(smpi_global->receiver_processes[i]);
+                       }
+               }
+
+               // wait for senders/receivers to exit...
+               SIMIX_mutex_lock(smpi_global->start_stop_mutex);
+               if (smpi_global->ready_process_count > 0) {
+                       SIMIX_cond_wait(smpi_global->start_stop_cond, smpi_global->start_stop_mutex);
+               }
+               SIMIX_mutex_unlock(smpi_global->start_stop_mutex);
+
+               SIMIX_mutex_destroy(smpi_mpi_global->mpi_comm_world->simdata->barrier_mutex);
+               SIMIX_cond_destroy(smpi_mpi_global->mpi_comm_world->simdata->barrier_cond);
+               xbt_free(smpi_mpi_global->mpi_comm_world->simdata->processes);
+               xbt_free(smpi_mpi_global->mpi_comm_world->simdata);
+               xbt_free(smpi_mpi_global->mpi_comm_world);
+
+               xbt_free(smpi_mpi_global->mpi_byte);
+               xbt_free(smpi_mpi_global->mpi_int);
+               xbt_free(smpi_mpi_global->mpi_double);
+
+               xbt_free(smpi_mpi_global->mpi_land);
+               xbt_free(smpi_mpi_global->mpi_sum);
+
+               xbt_free(smpi_mpi_global);
+       }
+
+}
+
+void smpi_barrier(smpi_mpi_communicator_t *comm)
+{
+
+       SIMIX_mutex_lock(comm->simdata->barrier_mutex);
+       if(++comm->simdata->barrier_count < comm->size) {
+               SIMIX_cond_wait(comm->simdata->barrier_cond, comm->simdata->barrier_mutex);
+       } else {
+               comm->simdata->barrier_count = 0;
+               SIMIX_cond_broadcast(comm->simdata->barrier_cond);
+       }
+       SIMIX_mutex_unlock(comm->simdata->barrier_mutex);
+
+       return;
+}
+
+int smpi_create_request(void *buf, int count, smpi_mpi_datatype_t *datatype,
+       int src, int dst, int tag, smpi_mpi_communicator_t *comm, smpi_mpi_request_t **request)
+{
+       int retval = MPI_SUCCESS;
+
+       *request = NULL;
+
+       if (0 > count) {
+               retval = MPI_ERR_COUNT;
+       } else if (NULL == buf) {
+               retval = MPI_ERR_INTERN;
+       } else if (NULL == datatype) {
+               retval = MPI_ERR_TYPE;
+       } else if (NULL == comm) {
+               retval = MPI_ERR_COMM;
+       } else if (MPI_ANY_SOURCE != src && (0 > src || comm->size <= src)) {
+               retval = MPI_ERR_RANK;
+       } else if (0 > dst || comm->size <= dst) {
+               retval = MPI_ERR_RANK;
+       } else if (0 > tag) {
+               retval = MPI_ERR_TAG;
+       } else {
+               *request = xbt_mallocator_get(smpi_global->request_mallocator);
+               (*request)->comm       = comm;
+               (*request)->src        = src;
+               (*request)->dst        = dst;
+               (*request)->tag        = tag;
+               (*request)->buf        = buf;
+               (*request)->count      = count;
+               (*request)->datatype   = datatype;
+       }
+       return retval;
+}
+
+int smpi_isend(smpi_mpi_request_t *request)
+{
+       int retval = MPI_SUCCESS;
+       int rank   = smpi_mpi_comm_rank_self(smpi_mpi_global->mpi_comm_world);
+
+       if (NULL != request) {
+               SIMIX_mutex_lock(smpi_global->pending_send_request_queues_mutexes[rank]);
+               xbt_fifo_push(smpi_global->pending_send_request_queues[rank], request);
+               SIMIX_mutex_unlock(smpi_global->pending_send_request_queues_mutexes[rank]);
+       }
+
+       if (SIMIX_process_is_suspended(smpi_global->sender_processes[rank])) {
+               SIMIX_process_resume(smpi_global->sender_processes[rank]);
+       }
+
+       return retval;
+}
+
+int smpi_irecv(smpi_mpi_request_t *request)
+{
+       int retval = MPI_SUCCESS;
+       int rank = smpi_mpi_comm_rank_self(smpi_mpi_global->mpi_comm_world);
+
+       if (NULL != request) {
+               SIMIX_mutex_lock(smpi_global->pending_recv_request_queues_mutexes[rank]);
+               xbt_fifo_push(smpi_global->pending_recv_request_queues[rank], request);
+               SIMIX_mutex_unlock(smpi_global->pending_recv_request_queues_mutexes[rank]);
+       }
+
+       if (SIMIX_process_is_suspended(smpi_global->receiver_processes[rank])) {
+               SIMIX_process_resume(smpi_global->receiver_processes[rank]);
+       }
+
+       return retval;
+}
+
+void smpi_wait(smpi_mpi_request_t *request, smpi_mpi_status_t *status)
+{
+       if (NULL != request) {
+               SIMIX_mutex_lock(request->simdata->mutex);
+               if (!request->completed) {
+                       SIMIX_cond_wait(request->simdata->cond, request->simdata->mutex);
+               }
+               if (NULL != status) {
+                       status->MPI_SOURCE = request->src;
+               }
+               SIMIX_mutex_unlock(request->simdata->mutex);
+       }
+}
diff --git a/src/smpi/smpi_bench.c b/src/smpi/smpi_bench.c
new file mode 100644 (file)
index 0000000..b3e5f9c
--- /dev/null
@@ -0,0 +1,43 @@
+#include "private.h"
+
+// FIXME: could cause trouble with multithreaded procs on same host...
+void smpi_bench_begin()
+{
+       int rank = smpi_mpi_comm_rank_self(smpi_mpi_global->mpi_comm_world);
+       SIMIX_mutex_lock(smpi_global->timers_mutexes[rank]);
+       xbt_os_timer_start(smpi_global->timers[rank]);
+       return;
+}
+
+void smpi_bench_end()
+{
+       int rank = smpi_mpi_comm_rank_self(smpi_mpi_global->mpi_comm_world);
+       double duration;
+       smx_host_t host;
+       smx_action_t compute_action;
+       smx_mutex_t mutex;
+       smx_cond_t cond;
+
+       xbt_os_timer_stop(smpi_global->timers[rank]);
+
+       duration       = xbt_os_timer_elapsed(smpi_global->timers[rank]);
+       SIMIX_mutex_unlock(smpi_global->timers_mutexes[rank]);
+
+       host           = smpi_mpi_global->mpi_comm_world->simdata->hosts[rank];
+       compute_action = SIMIX_action_execute(host, NULL, duration * SMPI_DEFAULT_SPEED);
+       mutex          = SIMIX_mutex_init();
+       cond           = SIMIX_cond_init();
+
+       SIMIX_mutex_lock(mutex);
+       SIMIX_register_action_to_condition(compute_action, cond);
+       SIMIX_cond_wait(cond, mutex);
+       SIMIX_unregister_action_to_condition(compute_action, cond);
+       SIMIX_mutex_unlock(mutex);
+
+       SIMIX_mutex_destroy(mutex);
+       SIMIX_cond_destroy(cond);
+
+       // FIXME: check for success/failure?
+
+       return;
+}
diff --git a/src/smpi/smpi_global.c b/src/smpi/smpi_global.c
new file mode 100644 (file)
index 0000000..4aef5a2
--- /dev/null
@@ -0,0 +1,221 @@
+#include <stdio.h>
+#include "private.h"
+
+XBT_LOG_NEW_DEFAULT_SUBCATEGORY(smpi,XBT_LOG_ROOT_CAT, "All SMPI categories (see \ref SMPI_API)");
+
+SMPI_Global_t     smpi_global     = NULL;
+
+void *smpi_request_new()
+{
+       smpi_mpi_request_t *request = xbt_new(smpi_mpi_request_t, 1);
+
+       request->completed = 0;
+       request->simdata            = xbt_new(s_smpi_mpi_request_simdata_t, 1);
+       request->simdata->mutex     = SIMIX_mutex_init();
+       request->simdata->cond      = SIMIX_cond_init();
+
+       return request;
+}
+
+void smpi_request_free(void *pointer)
+{
+
+       smpi_mpi_request_t *request = pointer;
+
+       if (NULL != request) {
+               SIMIX_cond_destroy(request->simdata->cond);
+               SIMIX_mutex_destroy(request->simdata->mutex);
+               xbt_free(request->simdata);
+               xbt_free(request);
+       }
+
+       return;
+}
+
+void smpi_request_reset(void *pointer)
+{
+       return;
+}
+
+
+void *smpi_message_new()
+{
+       return xbt_new(smpi_received_message_t, 1);
+}
+
+void smpi_message_free(void *pointer)
+{
+       if (NULL != pointer) {
+               xbt_free(pointer);
+       }
+
+       return;
+}
+
+void smpi_message_reset(void *pointer)
+{
+       return;
+}
+
+void smpi_global_init()
+{
+       int i;
+
+       int size = SIMIX_host_get_number();
+
+       smpi_global = xbt_new(s_SMPI_Global_t, 1);
+
+       // config variable
+       smpi_global->reference_speed                     = SMPI_DEFAULT_SPEED;
+
+       smpi_global->root_ready                          = 0;
+       smpi_global->ready_process_count                 = 0;
+
+       // start/stop
+       smpi_global->start_stop_mutex                    = SIMIX_mutex_init();
+       smpi_global->start_stop_cond                     = SIMIX_cond_init();
+
+       // processes
+       smpi_global->sender_processes                    = xbt_new(smx_process_t, size);
+       smpi_global->receiver_processes                  = xbt_new(smx_process_t, size);
+
+       // running hosts
+       smpi_global->running_hosts_count_mutex           = SIMIX_mutex_init();
+        smpi_global->running_hosts_count                 = 0;
+
+       // mallocators
+       smpi_global->request_mallocator                  = xbt_mallocator_new(SMPI_REQUEST_MALLOCATOR_SIZE,
+                                                            smpi_request_new, smpi_request_free, smpi_request_reset);
+       smpi_global->message_mallocator                  = xbt_mallocator_new(SMPI_MESSAGE_MALLOCATOR_SIZE,
+                                                            smpi_message_new, smpi_message_free, smpi_message_reset);
+
+       // queues
+       smpi_global->pending_send_request_queues         = xbt_new(xbt_fifo_t,  size);
+       smpi_global->pending_send_request_queues_mutexes = xbt_new(smx_mutex_t, size);
+       smpi_global->pending_recv_request_queues         = xbt_new(xbt_fifo_t,  size);
+       smpi_global->pending_recv_request_queues_mutexes = xbt_new(smx_mutex_t, size);
+       smpi_global->received_message_queues             = xbt_new(xbt_fifo_t,  size);
+       smpi_global->received_message_queues_mutexes     = xbt_new(smx_mutex_t, size);
+
+       // timers
+       smpi_global->timers                              = xbt_new(xbt_os_timer_t, size);
+       smpi_global->timers_mutexes                      = xbt_new(smx_mutex_t, size);
+
+       for(i = 0; i < size; i++) {
+               smpi_global->pending_send_request_queues[i]         = xbt_fifo_new();
+               smpi_global->pending_send_request_queues_mutexes[i] = SIMIX_mutex_init();
+               smpi_global->pending_recv_request_queues[i]         = xbt_fifo_new();
+               smpi_global->pending_recv_request_queues_mutexes[i] = SIMIX_mutex_init();
+               smpi_global->received_message_queues[i]             = xbt_fifo_new();
+               smpi_global->received_message_queues_mutexes[i]     = SIMIX_mutex_init();
+               smpi_global->timers[i]                              = xbt_os_timer_new();
+               smpi_global->timers_mutexes[i]                      = SIMIX_mutex_init();
+       }
+
+}
+
+void smpi_global_destroy()
+{
+       int i;
+
+       int size = SIMIX_host_get_number();
+
+       // start/stop
+       SIMIX_mutex_destroy(smpi_global->start_stop_mutex);
+       SIMIX_cond_destroy(smpi_global->start_stop_cond);
+
+       // processes
+       xbt_free(smpi_global->sender_processes);
+       xbt_free(smpi_global->receiver_processes);
+
+       // running hosts
+       SIMIX_mutex_destroy(smpi_global->running_hosts_count_mutex);
+
+       // mallocators
+       xbt_mallocator_free(smpi_global->request_mallocator);
+       xbt_mallocator_free(smpi_global->message_mallocator);
+
+       for(i = 0; i < size; i++) {
+               xbt_fifo_free(smpi_global->pending_send_request_queues[i]);
+               SIMIX_mutex_destroy(smpi_global->pending_send_request_queues_mutexes[i]);
+               xbt_fifo_free(smpi_global->pending_recv_request_queues[i]);
+               SIMIX_mutex_destroy(smpi_global->pending_recv_request_queues_mutexes[i]);
+               xbt_fifo_free(smpi_global->received_message_queues[i]);
+               SIMIX_mutex_destroy(smpi_global->received_message_queues_mutexes[i]);
+               xbt_os_timer_free(smpi_global->timers[i]);
+               SIMIX_mutex_destroy(smpi_global->timers_mutexes[i]);
+       }
+
+       xbt_free(smpi_global->pending_send_request_queues);
+       xbt_free(smpi_global->pending_send_request_queues_mutexes);
+       xbt_free(smpi_global->pending_recv_request_queues);
+       xbt_free(smpi_global->pending_recv_request_queues_mutexes);
+       xbt_free(smpi_global->received_message_queues);
+       xbt_free(smpi_global->received_message_queues_mutexes);
+       xbt_free(smpi_global->timers);
+       xbt_free(smpi_global->timers_mutexes);
+
+       xbt_free(smpi_global);
+}
+
+int smpi_run_simulation(int argc, char **argv)
+{
+       xbt_fifo_item_t cond_item   = NULL;
+       smx_cond_t   cond           = NULL;
+       xbt_fifo_item_t action_item = NULL;
+       smx_action_t action         = NULL;
+
+       xbt_fifo_t   actions_failed = xbt_fifo_new();
+       xbt_fifo_t   actions_done   = xbt_fifo_new();
+
+       srand(SMPI_RAND_SEED);
+
+       SIMIX_global_init(&argc, argv);
+
+       SIMIX_function_register("smpi_simulated_main", smpi_simulated_main);
+       SIMIX_function_register("smpi_sender",         smpi_sender);
+       SIMIX_function_register("smpi_receiver",       smpi_receiver);
+
+       // FIXME: ought to verify these files...
+       SIMIX_create_environment(argv[1]);
+
+       // must initialize globals between creating environment and launching app....
+       smpi_global_init();
+
+       SIMIX_launch_application(argv[2]);
+
+       /* Prepare to display some more info when dying on Ctrl-C pressing */
+       // FIXME: doesn't work
+       //signal(SIGINT, inthandler);
+
+       /* Clean IO before the run */
+       fflush(stdout);
+       fflush(stderr);
+
+       while (SIMIX_solve(actions_done, actions_failed) != -1.0) {
+               xbt_fifo_foreach(actions_failed, action_item, action, smx_action_t) {
+                       DEBUG1("** %s failed **", action->name);
+                       xbt_fifo_foreach(action->cond_list, cond_item, cond, smx_cond_t) {
+                               SIMIX_cond_broadcast(cond);
+                       }
+               }
+               xbt_fifo_foreach(actions_done, action_item, action, smx_action_t) {
+                       DEBUG1("** %s done **",action->name);
+                       xbt_fifo_foreach(action->cond_list, cond_item, cond, smx_cond_t) {
+                               SIMIX_cond_broadcast(cond);
+                       }
+               }
+       }
+
+       // FIXME: cleanup incomplete
+       xbt_fifo_free(actions_failed);
+       xbt_fifo_free(actions_done);
+
+       INFO1("simulation time %g", SIMIX_get_clock());
+
+       smpi_global_destroy();
+
+       SIMIX_clean();
+
+       return 0;
+}
similarity index 100%
rename from src/smpi/mpi.c
rename to src/smpi/smpi_mpi.c
similarity index 100%
rename from src/smpi/receiver.c
rename to src/smpi/smpi_receiver.c
similarity index 100%
rename from src/smpi/sender.c
rename to src/smpi/smpi_sender.c
diff --git a/src/smpi/smpi_util.c b/src/smpi/smpi_util.c
new file mode 100644 (file)
index 0000000..b7df6a8
--- /dev/null
@@ -0,0 +1,55 @@
+#include "private.h"
+
+int smpi_gettimeofday(struct timeval *tv, struct timezone *tz)
+{
+       double now;
+       int retval = 0;
+       smpi_bench_end();
+       if (NULL == tv) {
+               retval = -1;
+       } else {
+               now = SIMIX_get_clock();
+               tv->tv_sec  = now;
+               tv->tv_usec = ((now - (double)tv->tv_sec) * 1000000.0);
+       }
+       smpi_bench_begin();
+       return retval;
+}
+
+unsigned int smpi_sleep(unsigned int seconds)
+{
+       smx_mutex_t mutex;
+       smx_cond_t cond;
+       smx_host_t host;
+       smx_action_t sleep_action;
+
+       smpi_bench_end();
+       host         = SIMIX_host_self();
+       sleep_action = SIMIX_action_sleep(host, seconds);
+       mutex        = SIMIX_mutex_init();
+       cond         = SIMIX_cond_init();
+
+       SIMIX_mutex_lock(mutex);
+       SIMIX_register_action_to_condition(sleep_action, cond);
+       SIMIX_cond_wait(cond, mutex);
+       SIMIX_unregister_action_to_condition(sleep_action, cond);
+       SIMIX_mutex_unlock(mutex);
+
+       SIMIX_mutex_destroy(mutex);
+       SIMIX_cond_destroy(cond);
+
+       // FIXME: check for success/failure?
+
+       smpi_bench_begin();
+       return 0;
+}
+
+void smpi_exit(int status)
+{
+       smpi_bench_end();
+       SIMIX_mutex_lock(smpi_global->running_hosts_count_mutex);
+       smpi_global->running_hosts_count--;
+       SIMIX_mutex_unlock(smpi_global->running_hosts_count_mutex);
+       SIMIX_process_kill(SIMIX_process_self());
+       return;
+}
index 9ad67a7..7925396 100644 (file)
@@ -209,6 +209,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index c4bbeb7..5ba6289 100644 (file)
@@ -139,6 +139,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index bb4ac3c..e3bad74 100644 (file)
@@ -150,6 +150,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@
index 40815b1..30f52e4 100644 (file)
@@ -150,6 +150,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
 PATH_SEPARATOR = @PATH_SEPARATOR@
 PTH_STACK_GROWTH = @PTH_STACK_GROWTH@
 RANLIB = @RANLIB@
+SED = @SED@
 SET_MAKE = @SET_MAKE@
 SHELL = @SHELL@
 SIMGRID_DEP = @SIMGRID_DEP@