/// "Universal" wallclock time (works at least for Mac, MTA, and most Linux) inline double walltime(void) { #if defined(__MTA__) return((double)mta_get_clock(0) / mta_clock_freq()); #elif defined(__MACH__) static mach_timebase_info_data_t info; mach_timebase_info(&info); uint64_t now = mach_absolute_time(); now *= info.numer; now /= info.denom; return 1.0e-9 * (double)now; #else struct timespec tp; #if defined(CLOCK_PROCESS_CPUTIME_ID) #define CLKID CLOCK_PROCESS_CPUTIME_ID #elif defined(CLOCK_REALTIME_ID) #define CLKID CLOCK_REALTIME_ID #endif clock_gettime(CLOCK_MONOTONIC, &tp); return (double)tp.tv_sec + (double)tp.tv_nsec / BILLION; #endif }
double timer_getres (void) { /* A guess. */ return 1.0 / mta_clock_freq (); }
_real64 chpl_now_time(void) { #pragma mta fence return ((_real64)mta_get_clock(0)/mta_clock_freq())*1.0e+6; }
double timer (void) { return ((double) mta_get_clock (0) / mta_clock_freq ()); }
mt_timer() : ticks(0), freq(mta_clock_freq()) {}