double MPI_Wtick(void) { #if OPAL_TIMER_USEC_NATIVE return 0.000001; #else #if defined(__WINDOWS__) if( (opal_timer_t)0 == opal_timer_base_get_freq() ) { opal_output( 0, "No timer frequency\n" ); } return (double)opal_timer_base_get_freq(); #else return 0.000001; #endif /* defined(__WINDOWS__) */ #endif /* OPAL_TIMER_USEC_NATIVE */ }
double MPI_Wtick(void) { OPAL_CR_NOOP_PROGRESS(); #if OPAL_TIMER_CYCLE_NATIVE return opal_timer_base_get_freq(); #elif OPAL_TIMER_USEC_NATIVE return 0.000001; #else /* Otherwise, we already return usec precision. */ return 0.000001; #endif }
double MPI_Wtime(void) { double wtime; #if OPAL_TIMER_CYCLE_NATIVE wtime = ((double) opal_timer_base_get_cycles()) / opal_timer_base_get_freq(); #elif OPAL_TIMER_USEC_NATIVE wtime = ((double) opal_timer_base_get_usec()) / 1000000.0; #else /* Fall back to gettimeofday() if we have nothing else */ struct timeval tv; gettimeofday(&tv, NULL); wtime = tv.tv_sec; wtime += (double)tv.tv_usec / 1000000.0; #endif OPAL_CR_NOOP_PROGRESS(); return wtime; }
void opal_progress_set_event_poll_rate(int polltime) { OPAL_OUTPUT((debug_output, "progress: progress_set_event_poll_rate(%d)", polltime)); #if OPAL_PROGRESS_USE_TIMERS event_progress_delta = 0; # if OPAL_TIMER_USEC_NATIVE event_progress_last_time = opal_timer_base_get_usec(); # else event_progress_last_time = opal_timer_base_get_cycles(); # endif #else event_progress_counter = event_progress_delta = 0; #endif if (polltime == 0) { #if OPAL_PROGRESS_USE_TIMERS /* user specified as never tick - tick once per minute */ event_progress_delta = 60 * 1000000; #else /* user specified as never tick - don't count often */ event_progress_delta = INT_MAX; #endif } else { #if OPAL_PROGRESS_USE_TIMERS event_progress_delta = polltime; #else /* subtract one so that we can do post-fix subtraction in the inner loop and go faster */ event_progress_delta = polltime - 1; #endif } #if OPAL_PROGRESS_USE_TIMERS && !OPAL_TIMER_USEC_NATIVE /* going to use cycles for counter. Adjust specified usec into cycles */ event_progress_delta = event_progress_delta * opal_timer_base_get_freq() / 1000000; #endif }
double MPI_Wtime(void) { double wtime; /* * See https://github.com/open-mpi/ompi/issues/3003 to find out * what's happening here. */ #if 0 #if OPAL_TIMER_CYCLE_NATIVE wtime = ((double) opal_timer_base_get_cycles()) / opal_timer_base_get_freq(); #elif OPAL_TIMER_USEC_NATIVE wtime = ((double) opal_timer_base_get_usec()) / 1000000.0; #endif #else #if defined(__linux__) && OPAL_HAVE_CLOCK_GETTIME struct timespec tp; (void) clock_gettime(CLOCK_MONOTONIC, &tp); if( OPAL_UNLIKELY(0 == ompi_wtime_time_origin.tv_sec) ) { ompi_wtime_time_origin = tp; } wtime = (double)(tp.tv_nsec - ompi_wtime_time_origin.tv_nsec)/1.0e+9; wtime += (tp.tv_sec - ompi_wtime_time_origin.tv_sec); #else /* Fall back to gettimeofday() if we have nothing else */ struct timeval tv; gettimeofday(&tv, NULL); if( OPAL_UNLIKELY(0 == ompi_wtime_time_origin.tv_sec) ) { ompi_wtime_time_origin = tv; } wtime = (double)(tv.tv_usec - ompi_wtime_time_origin.tv_usec) / 1.0e+6; wtime += (tv.tv_sec - ompi_wtime_time_origin.tv_sec); #endif #endif OPAL_CR_NOOP_PROGRESS(); return wtime; }
double MPI_Wtime(void) { double wtime; #if OPAL_TIMER_USEC_NATIVE /* We may or may not have native usec precision on Windows, so put this #if before the #ifdef checking for Windows. */ wtime = ((double) opal_timer_base_get_usec()) / 1000000.0; #elif defined(__WINDOWS__) wtime = ((double) opal_timer_base_get_cycles()) / ((double) opal_timer_base_get_freq()); #else /* Fall back to gettimeofday() if we have nothing else */ struct timeval tv; gettimeofday(&tv, NULL); wtime = tv.tv_sec; wtime += (double)tv.tv_usec / 1000000.0; #endif OPAL_CR_NOOP_PROGRESS(); return wtime; }
/* turn on MPI optimizations */ int opal_progress_mpi_enable(void) { int param, value; /* call sched yield when oversubscribed. */ param = mca_base_param_find("mpi", NULL, "yield_when_idle"); mca_base_param_lookup_int(param, &value); if (value < 0) { /* this should never happen set to 1 if it somehow does */ call_yield = 1; } else { call_yield = value; } /* set the event tick rate */ param = mca_base_param_find("mpi", NULL, "event_tick_rate"); mca_base_param_lookup_int(param, &value); if (value < 0) { /* user didn't specify - default tick rate */ event_progress_delta = opal_progress_default_tick_rate; } else if (value == 0) { #if OPAL_PROGRESS_USE_TIMERS /* user specified as never tick - tick once per minute */ event_progress_delta = 60 * 1000000; #else /* user specified as never tick - don't count often */ event_progress_delta = INT_MAX; #endif } else { #if OPAL_PROGRESS_USE_TIMERS event_progress_delta = value; #else /* subtract one so that we can do post-fix subtraction in the inner loop and go faster */ event_progress_delta = value - 1; #endif } #if OPAL_PROGRESS_USE_TIMERS && !OPAL_TIMER_USEC_NATIVE /* going to use cycles for counter. Adjust specified usec into cycles */ event_progress_delta = event_progress_delta * opal_timer_base_get_freq() / 1000000; #endif #if OPAL_PROGRESS_USE_TIMERS #if OPAL_TIMER_USEC_NATIVE event_progress_last_time = opal_timer_base_get_usec(); #else event_progress_last_time = opal_timer_base_get_cycles(); #endif #else /* it's possible that an init function bumped up our tick rate. * If so, set the event_progress counter to 0. Otherwise, set it to * the reset value */ event_progress_counter = (event_num_mpi_users > 0) ? 0 : event_progress_delta; #endif return OPAL_SUCCESS; }