|
PAPI
5.0.1.0
|
00001 /* Standard headers for PAPI test applications. 00002 This file is customized to hide Windows / Unix differences. 00003 */ 00004 00005 #include <stdlib.h> 00006 #include <stdio.h> 00007 00008 #include <unistd.h> 00009 #include <sys/wait.h> 00010 #if (!defined(NO_DLFCN) && !defined(_BGL) && !defined(_BGP)) 00011 #include <dlfcn.h> 00012 #endif 00013 00014 #include <errno.h> 00015 #include <memory.h> 00016 #if !defined(__FreeBSD__) && !defined(__APPLE__) 00017 #include <malloc.h> 00018 #endif 00019 #include <assert.h> 00020 #include <string.h> 00021 #include <fcntl.h> 00022 #include <sys/types.h> 00023 #include <sys/time.h> 00024 #include <math.h> 00025 00026 #include "papiStdEventDefs.h" 00027 #include "papi.h" 00028 #include "test_utils.h" 00029 00030 /* Masks to select operations for add_test_events() and remove_test_events() 00031 Mask value tells us what events to select. 00032 */ 00033 #define MASK_FP_OPS 0x80000 00034 #define MASK_L1_DCA 0x40000 /* three new events for POWER4 */ 00035 #define MASK_L1_DCW 0x20000 00036 #define MASK_L1_DCR 0x10000 00037 #define MASK_TOT_IIS 0x04000 /* Try this if TOT_INS won't work */ 00038 #define MASK_BR_PRC 0x02000 00039 #define MASK_BR_MSP 0x01000 00040 #define MASK_BR_CN 0x00800 00041 #define MASK_L2_TCH 0x00400 00042 #define MASK_L2_TCA 0x00200 00043 #define MASK_L2_TCM 0x00100 00044 #define MASK_L1_DCM 0x00040 00045 #define MASK_L1_ICM 0x00020 00046 #define MASK_L1_TCM 0x00010 00047 #define MASK_FP_INS 0x00004 00048 #define MASK_TOT_INS 0x00002 00049 #define MASK_TOT_CYC 0x00001 00050 00051 #define MAX_TEST_EVENTS 18 00052 00053 struct test_events_t { 00054 unsigned int mask; 00055 unsigned int event; 00056 }; 00057 00058 extern struct test_events_t test_events[]; 00059 00060 int papi_print_header (char *prompt, const PAPI_hw_info_t **hwinfo); 00061 void validate_string(char *name, char *s); 00062 void *get_overflow_address(void *context); 00063 void free_test_space(long long ** values, int num_tests); 00064 long long **allocate_test_space(int num_tests, int num_events); 00065 int add_test_events(int *number, int *mask, int allow_derived); 00066 int add_two_events(int *num_events, int *papi_event, int *mask); 00067 int add_two_nonderived_events(int *num_events, int *papi_event, int *mask); 00068 int add_test_events_r(int *number, int *mask, void *handle); 00069 int find_nonderived_event( void ); 00070 int enum_add_native_events(int *num_events, int **evtcodes, int need_interrupts, int no_software_events, int cidx); 00071 int remove_test_events(int *EventSet, int mask); 00072 void do_flush(void); 00073 void do_misses(int n, int size); 00074 void do_flops(int n); 00075 /* export the next symbol as 'end' address of do_flops for profiling */ 00076 void fdo_flops(int *n); 00077 void do_reads(int n); 00078 void do_both(int n); 00079 void do_l1misses(int n); 00080 void do_stuff(void); 00081 void dummy(void *); 00082 char *stringify_domain(int domain); 00083 char *stringify_all_domains(int domains); 00084 char *stringify_granularity(int granularity); 00085 char *stringify_all_granularities(int granularities); 00086 void tests_quiet(int argc, char **argv); 00087 void test_pass(char *file, long long ** values, int num_tests); 00088 void test_fail(char *file, int line, char *call, int retval); 00089 void test_fail_exit(char *file, int line, char *call, int retval); 00090 void test_skip(char *file, int line, char *call, int retval); 00091 void test_warn(char *file, int line, char *call, int retval); 00092 void test_print_event_header(char *call, int evset); 00093 void touch_dummy(double *ptr, int size); 00094 int approx_equals(double a, double b); 00095 void init_multiplex(void); 00096 00097 void clockcore(void); 00098 00099 /* Unix systems use %lld to display long long values 00100 Windows uses %I64d for the same purpose. 00101 Since these occur inside a quoted string, 00102 we must #define the entire format string. 00103 Below are several common forms of this string 00104 for both platforms. 00105 */ 00106 00107 #define ONEHDR " %12s" 00108 #define TAB2HDR "%s %12s %12s\n" 00109 #define TAB3HDR "%s %12s %12s %12s\n" 00110 #define TAB4HDR "%s %12s %12s %12s %12s\n" 00111 #define ONENUM " %12lld" 00112 #define TAB1 "%-12s %12lld\n" 00113 #define TAB2 "%-12s %12lld %12lld\n" 00114 #define TAB3 "%-12s %12lld %12lld %12lld\n" 00115 #define TAB4 "%-12s %12lld %12lld %12lld %12lld\n" 00116 #define TAB5 "%-12s %12lld %12lld %12lld %12lld %12lld\n" 00117 #define TWO12 "%12lld %12lld %s" 00118 #define LLDFMT "%lld" 00119 #define LLDFMT10 "%10lld" 00120 #define LLDFMT12 "%12lld" 00121 #define LLDFMT15 "%15lld" 00122 00123 extern int TESTS_QUIET; /* Declared in test_utils.c */ 00124 00125 #define printf if (!TESTS_QUIET) printf 00126