source: trunk/lib/perflib/perfsec.h @ 2856

Last change on this file since 2856 was 2856, checked in by ksherdy, 6 years ago

Record CSV results only.

File size: 4.2 KB
RevLine 
[517]1#ifndef PERFSEC_H
2#define PERFSEC_H
[462]3
[517]4#if defined(WALL_TIMING)
5#include "WallTime.h"
6#elif defined(BUFFER_PROFILING)
[462]7#include "BOM_Profiler.h"
[2481]8#elif defined(PAPI)
9        #include <cc.h>
[2856]10//      #include <cc.cxx>
[478]11#endif
[462]12
[2856]13#include <sys/stat.h>
14#include <string.h>
15#include <stdio.h>
16
[1218]17#if defined __linux__
[557]18
19  #include <sched.h>
20
[2846]21  /* mask - Bit mask.
[557]22
[2846]23     mask = 2^0 = 1 core 1
24     mask = 2^1 = 2 core 2
25     ...
26     mask = 2^7 = 128 core 8
27
28     mask = (2^0 | 2^1) = 3 core 1 or core 2
29  */ 
30
31  static inline int set_processor_affinity(unsigned long mask) { 
32
33
[557]34    unsigned int len = sizeof(mask);
35
36    if (sched_setaffinity(0, len, (const cpu_set_t *)&mask) < 0) {
[2846]37      printf("sched_setaffinity call failed.\n");
[557]38      return -1;
39    }
40
[2846]41    printf("Set CPU affinity mask: %08lx\n", mask);
[557]42
43    return 0;
44  }
45
46#elif defined _MSC_VER
47
48  #include <process.h>
49  #include <Windows.h>
50  #define getpid _getpid
51
[2479]52  static inline int set_processor_affinity(DWORD_PTR mask) {
[557]53
54    HANDLE hProcess  = OpenProcess(PROCESS_ALL_ACCESS, 0, getpid());
55
56        if(0 == SetProcessAffinityMask(hProcess, mask)) {
[2846]57              printf("SetProcessAffinityMask call failed.\n");
[557]58              return -1;
59        }
60
[2846]61        printf("CPU affinity mask: %08lx\n", mask);
[557]62
63        return 0;
64  }
65
66#else
67
[2479]68  inline int set_processor_affinity(unsigned long mask) {
[557]69        printf("set_processor_affinity is not implemented on the current OS.\n");
70        return -1;
71  }
72
73#endif
74
75#define PERF_SEC_BIND(mask) \
[2846]76        set_processor_affinity(mask);
[557]77
[517]78#if defined(WALL_TIMING)
[462]79
[478]80        #define PERF_SEC_INIT(timer) \
[517]81                timer = init_Wall_timer()
82       
[2481]83        #define PERF_SEC_ADD_PARAM(timer, name, value) 
84
[517]85        #define PERF_SEC_START(timer) \
86                start_Wall_interval(timer) 
87       
88        #define PERF_SEC_END(timer,elems) \
89                end_Wall_interval(timer,elems) 
90       
91        #define PERF_SEC_DUMP(timer) \
92                dump_Timer_Table(timer)
[2481]93
94        #define PERF_SEC_WRITE(timer) 
[517]95       
96        #define PERF_SEC_DESTROY(timer) \
97                destroy_Wall_timer(timer)       
98       
99#elif defined(BUFFER_PROFILING)
100
101        #define PERF_SEC_INIT(timer) \
[478]102                timer = init_BOM_timer()
[2481]103
104        #define PERF_SEC_ADD_PARAM(timer, name, value) 
[478]105       
106        #define PERF_SEC_START(timer) \
107                start_BOM_interval(timer) 
108       
109        #define PERF_SEC_END(timer,elems) \
110                end_BOM_interval(timer,elems) 
111       
112        #define PERF_SEC_DUMP(timer) \
113                dump_BOM_table(timer)
114       
[2481]115        #define PERF_SEC_WRITE(timer) 
116
[478]117        #define PERF_SEC_DESTROY(timer) \
118                destroy_BOM_timer(timer)       
119       
[2481]120#elif defined(PAPI)
[2543]121/*  Quick and dirty hack to gather multiple events. - Oct 17. 2012.
[462]122
[2481]123        //#PAPI_L1_DCM 
124        #if (0x80000000 == CC_EVENT)
125                                int Events[1] = {PAPI_L1_DCM}; 
126        //#PAPI_L1_ICM 
127        #elif (0x80000001 == CC_EVENT)
128                                int Events[1] = {PAPI_L1_ICM};
129        //#PAPI_L2_DCM 
130        #elif (0x80000002 == CC_EVENT)
131                                int Events[1] = {PAPI_L2_DCM};
132        //#PAPI_L2_ICM 
133        #elif (0x80000003 == CC_EVENT)
134                                int Events[1] = {PAPI_L2_ICM};
135        //#PAPI_L3_DCM 
136        #elif (0x80000004 == CC_EVENT)
137                                int Events[1] = {PAPI_L3_DCM};
138        //#PAPI_L3_ICM 
139        #elif (0x80000005 == CC_EVENT)
140                                int Events[1] = {PAPI_L3_ICM};
141        //#PAPI_BR_CN   
142        #elif (0x8000002b == CC_EVENT)
143                                int Events[1] = {PAPI_BR_CN};
144        //#PAPI_BR_MSP 
145        #elif (0x8000002e == CC_EVENT)
146                                int Events[1] = {PAPI_BR_MSP};
147        //#PAPI_TOT_INS 
148        #elif (0x80000032 == CC_EVENT)
149                                int Events[1] = {PAPI_TOT_INS};
150        //#PAPI_TOT_CYC   
151        #elif (0x8000003b == CC_EVENT)
152                                int Events[1] = {PAPI_TOT_CYC };
153        #else
154                                #warning CC_EVENT not defined in Makefile. Default to PAPI_TOT_CYC.
155                                int Events[1] = {PAPI_TOT_CYC };
156        #endif
[2543]157*/
[2481]158        #define PERF_SEC_INIT(timer) \
[2828]159                timer = new CC(PAPI_EVENTS, PAPI_EVENTS_COUNT, 0)
160                // timer = new CC(Events,1,0,false) \
[2481]161
162        #define PERF_SEC_ADD_PARAM(timer, name, value) \
163                timer->set_param(name, value) \
164
[478]165        #define PERF_SEC_START(timer) \
[2481]166                timer->start_interval() \
[462]167
[478]168        #define PERF_SEC_END(timer,elems) \
169                timer->end_interval(elems)
170       
171        #define PERF_SEC_DUMP(timer) \
[2481]172                timer->display_system_info();\
173                timer->display_raw_event_data();\
[478]174                timer->dump_avg_kelem() \
[2481]175
176        #define PERF_SEC_WRITE(timer) \
[2856]177                timer->write_csv_file()
178                // timer->write_xml_file()
[478]179               
180        #define PERF_SEC_DESTROY(timer) \
181                if(timer) delete timer
182               
[462]183#else
[478]184
185        #define PERF_SEC_INIT(timer)
186        #define PERF_SEC_START(timer)
[2481]187        #define PERF_SEC_ADD_PARAM(timer, name, value) 
[478]188        #define PERF_SEC_END(timer,elems)
189        #define PERF_SEC_DUMP(timer)
190        #define PERF_SEC_DESTROY(timer)
[2481]191        #define PERF_SEC_WRITE(timer) 
[478]192
[462]193#endif
[517]194#endif
[462]195
Note: See TracBrowser for help on using the repository browser.