Home | History | Annotate | Line # | Download | only in posix
time.c revision 1.5
      1 /* Copyright (C) 2005-2015 Free Software Foundation, Inc.
      2    Contributed by Richard Henderson <rth (at) redhat.com>.
      3 
      4    This file is part of the GNU Offloading and Multi Processing Library
      5    (libgomp).
      6 
      7    Libgomp is free software; you can redistribute it and/or modify it
      8    under the terms of the GNU General Public License as published by
      9    the Free Software Foundation; either version 3, or (at your option)
     10    any later version.
     11 
     12    Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
     13    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
     14    FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
     15    more details.
     16 
     17    Under Section 7 of GPL version 3, you are granted additional
     18    permissions described in the GCC Runtime Library Exception, version
     19    3.1, as published by the Free Software Foundation.
     20 
     21    You should have received a copy of the GNU General Public License and
     22    a copy of the GCC Runtime Library Exception along with this program;
     23    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
     24    <http://www.gnu.org/licenses/>.  */
     25 
     26 /* This file contains system specific timer routines.  It is expected that
     27    a system may well want to write special versions of each of these.
     28 
     29    The following implementation uses the most simple POSIX routines.
     30    If present, POSIX 4 clocks should be used instead.  */
     31 
     32 #include "libgomp.h"
     33 #include <unistd.h>
     34 #if TIME_WITH_SYS_TIME
     35 # include <sys/time.h>
     36 # include <time.h>
     37 #else
     38 # if HAVE_SYS_TIME_H
     39 #  include <sys/time.h>
     40 # else
     41 #  include <time.h>
     42 # endif
     43 #endif
     44 
     45 
     46 double
     47 omp_get_wtime (void)
     48 {
     49 #ifdef HAVE_CLOCK_GETTIME
     50   struct timespec ts;
     51 # ifdef CLOCK_MONOTONIC
     52   if (clock_gettime (CLOCK_MONOTONIC, &ts) < 0)
     53 # endif
     54     clock_gettime (CLOCK_REALTIME, &ts);
     55   return ts.tv_sec + ts.tv_nsec / 1e9;
     56 #else
     57   struct timeval tv;
     58   gettimeofday (&tv, NULL);
     59   return tv.tv_sec + tv.tv_usec / 1e6;
     60 #endif
     61 }
     62 
     63 double
     64 omp_get_wtick (void)
     65 {
     66 #ifdef HAVE_CLOCK_GETTIME
     67   struct timespec ts;
     68 # ifdef CLOCK_MONOTONIC
     69   if (clock_getres (CLOCK_MONOTONIC, &ts) < 0)
     70 # endif
     71     clock_getres (CLOCK_REALTIME, &ts);
     72   return ts.tv_sec + ts.tv_nsec / 1e9;
     73 #else
     74   return 1.0 / sysconf(_SC_CLK_TCK);
     75 #endif
     76 }
     77 
     78 ialias (omp_get_wtime)
     79 ialias (omp_get_wtick)
     80