1 /* -*- Mode: C; c-basic-offset:4 ; indent-tabs-mode:nil -*- */ 2 /* 3 * Copyright (c) 2004-2005 The Trustees of Indiana University and Indiana 4 * University Research and Technology 5 * Corporation. All rights reserved. 6 * Copyright (c) 2004-2005 The University of Tennessee and The University 7 * of Tennessee Research Foundation. All rights 8 * reserved. 9 * Copyright (c) 2004-2005 High Performance Computing Center Stuttgart, 10 * University of Stuttgart. All rights reserved. 11 * Copyright (c) 2004-2005 The Regents of the University of California. 12 * All rights reserved. 13 * Copyright (c) 2015 Los Alamos National Security, LLC. All rights 14 * reserved. 15 * $COPYRIGHT$ 16 * 17 * Additional copyrights may follow 18 * 19 * $HEADER$ 20 */ 21 22 /** 23 * @file 24 * 25 * High resolution timer / cycle counter 26 * 27 * High resolution timer / cycle counter interface. This interface is 28 * intended to hide the system-dependent nature of timers that provide 29 * higher resolution and lower calling cost than gettimeofday(). 30 * Unlike most component interfaces, there should only ever be one 31 * component available to be built on a particular platform. 32 * Therefore, a number of #defines are available to determine how well 33 * the platform supports high resolution timers: 34 * 35 * <UL> 36 * <LI><PRE>OPAL_TIMER_CYCLE_NATIVE</PRE> Whether 37 * opal_timer_base_get_cycle() is implemented directly or computed 38 * from some other data (such as a high res timer)</LI> 39 * <LI><PRE>OPAL_TIMER_CYCLE_SUPPORTED</PRE> Whether 40 * opal_timer_base_get_cycle() is supported on the current 41 * platform.</LI> 42 * <LI><PRE>OPAL_TIMER_USEC_SUPPORTED</PRE> Whether 43 * opal_timer_base_get_usec() is supported on the current 44 * platform or implemented on top of gettimeofday(), which 45 * may be unsuitable for some uses. 46 * </UL> 47 * 48 * The cycle count may not be the cycle count of the CPU itself, if 49 * there is another sufficiently close counter with better behavior 50 * characteristics (like the Time Base counter on many Power/PowerPC 51 * platforms). The function opal_timer_base_get_freq() returns the 52 * frequency of the cycle counter in use, *NOT* the frequency of the 53 * main CPU. 54 * 55 * Unless otherwise noted, no attempt is made to cope with the the 56 * differences in counters on SMP machines. If your process switches 57 * CPUs, your timer results may change. 58 * 59 * Build time priorities are allocated as follows: 60 * 61 * - 0 gettimeofday() wrapper 62 * - 10 Assembly timers with bad frequency search (Linux) 63 * - 20 NIC software stack (QSNet, Myrinet?) 64 * - 30 Operating systems with native interfaces 65 */ 66 67 #ifndef OPAL_MCA_TIMER_TIMER_H 68 #define OPAL_MCA_TIMER_TIMER_H 69 70 #include "opal_config.h" 71 72 #include "opal/mca/mca.h" 73 #include "opal/mca/base/base.h" 74 75 76 /** 77 * Structure for timer components. 78 */ 79 struct opal_timer_base_component_2_0_0_t { 80 /** MCA base component */ 81 mca_base_component_t timerc_version; 82 /** MCA base data */ 83 mca_base_component_data_t timerc_data; 84 }; 85 /** 86 * Convenience typedef 87 */ 88 typedef struct opal_timer_base_component_2_0_0_t opal_timer_base_component_2_0_0_t; 89 90 /* 91 * Macro for use in components that are of type timer 92 */ 93 #define OPAL_TIMER_BASE_VERSION_2_0_0 \ 94 OPAL_MCA_BASE_VERSION_2_1_0("timer", 2, 0, 0) 95 96 #endif /* OPAL_MCA_TIMER_TIMER_H */