PAPI  5.0.1.0
papi_test.h
Go to the documentation of this file.
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 
 All Data Structures Files Functions Variables Typedefs Enumerations Enumerator Defines