Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
kill ALL trailing whitespace (and deprecate a function in Link)
[simgrid.git] / src / smpi / internals / smpi_bench.cpp
index 5f8f451..574f7c2 100644 (file)
@@ -11,6 +11,9 @@
 #include "src/internal_config.h"
 #include "src/mc/mc_replay.hpp"
 #include "src/simix/ActorImpl.hpp"
+#include "xbt/config.hpp"
+#include "getopt.h"
+
 #include <unordered_map>
 
 #ifndef WIN32
@@ -79,7 +82,7 @@ void smpi_execute_benched(double duration)
 
 void smpi_bench_begin()
 {
-  if (smpi_privatize_global_variables == SMPI_PRIVATIZE_MMAP) {
+  if (smpi_privatize_global_variables == SmpiPrivStrategies::Mmap) {
     smpi_switch_data_segment(simgrid::s4u::Actor::self());
   }
 
@@ -190,23 +193,32 @@ static unsigned int private_sleep(double secs)
 
 unsigned int smpi_sleep(unsigned int secs)
 {
+  if (not smpi_process())
+    return sleep(secs);
   return private_sleep(static_cast<double>(secs));
 }
 
 int smpi_usleep(useconds_t usecs)
 {
+  if (not smpi_process())
+    return usleep(usecs);
   return static_cast<int>(private_sleep(static_cast<double>(usecs) / 1000000.0));
 }
 
 #if _POSIX_TIMERS > 0
-int smpi_nanosleep(const struct timespec* tp, struct timespec* /*t*/)
+int smpi_nanosleep(const struct timespec* tp, struct timespec* t)
 {
+  if (not smpi_process())
+    return nanosleep(tp,t);
   return static_cast<int>(private_sleep(static_cast<double>(tp->tv_sec + tp->tv_nsec / 1000000000.0)));
 }
 #endif
 
-int smpi_gettimeofday(struct timeval* tv, void* /*tz*/)
+int smpi_gettimeofday(struct timeval* tv, struct timezone* tz)
 {
+  if (not smpi_process())
+    return gettimeofday(tv, tz);
+
   smpi_bench_end();
   double now = SIMIX_get_clock();
   if (tv) {
@@ -222,8 +234,10 @@ int smpi_gettimeofday(struct timeval* tv, void* /*tz*/)
 }
 
 #if _POSIX_TIMERS > 0
-int smpi_clock_gettime(clockid_t /*clk_id*/, struct timespec* tp)
+int smpi_clock_gettime(clockid_t clk_id, struct timespec* tp)
 {
+  if (not smpi_process())
+    return clock_gettime(clk_id, tp);
   //there is only one time in SMPI, so clk_id is ignored.
   smpi_bench_end();
   double now = SIMIX_get_clock();
@@ -428,3 +442,24 @@ void smpi_bench_destroy()
 {
   samples.clear();
 }
+
+int smpi_getopt_long (int argc,  char *const *argv,  const char *options,
+                      const struct option * long_options, int *opt_index)
+{
+  if (smpi_process())
+    optind = smpi_process()->get_optind();
+  int ret = getopt_long (argc,  argv,  options, long_options, opt_index);
+  if (smpi_process())
+    smpi_process()->set_optind(optind);
+  return ret;
+}
+
+int smpi_getopt (int argc,  char *const *argv,  const char *options)
+{
+  if (smpi_process())
+    optind = smpi_process()->get_optind();
+  int ret = getopt (argc,  argv,  options);
+  if (smpi_process())
+    smpi_process()->set_optind(optind);
+  return ret;
+}