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

Last change on this file since 4067 was 3025, checked in by cameron, 6 years ago

Elmin noise

File size: 4.2 KB
Line 
1#ifndef PERFSEC_H
2#define PERFSEC_H
3
4#if defined(WALL_TIMING)
5#include "WallTime.h"
6#elif defined(BUFFER_PROFILING)
7#include "BOM_Profiler.h"
8#elif defined(PAPI)
9        #include <cc.h>
10//      #include <cc.cxx>
11#endif
12
13#include <sys/stat.h>
14#include <string.h>
15#include <stdio.h>
16
17#if defined __linux__
18
19  #include <sched.h>
20
21  /* mask - Bit mask.
22
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
34    unsigned int len = sizeof(mask);
35
36    if (sched_setaffinity(0, len, (const cpu_set_t *)&mask) < 0) {
37      printf("sched_setaffinity call failed.\n");
38      return -1;
39    }
40
41    //printf("Set CPU affinity mask: %08lx\n", mask);
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
52  static inline int set_processor_affinity(DWORD_PTR mask) {
53
54    HANDLE hProcess  = OpenProcess(PROCESS_ALL_ACCESS, 0, getpid());
55
56        if(0 == SetProcessAffinityMask(hProcess, mask)) {
57              printf("SetProcessAffinityMask call failed.\n");
58              return -1;
59        }
60
61        //printf("CPU affinity mask: %08lx\n", mask);
62
63        return 0;
64  }
65
66#else
67
68  inline int set_processor_affinity(unsigned long mask) {
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) \
76        set_processor_affinity(mask);
77
78#if defined(WALL_TIMING)
79
80        #define PERF_SEC_INIT(timer) \
81                timer = init_Wall_timer()
82       
83        #define PERF_SEC_ADD_PARAM(timer, name, value) 
84
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)
93
94        #define PERF_SEC_WRITE(timer) 
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) \
102                timer = init_BOM_timer()
103
104        #define PERF_SEC_ADD_PARAM(timer, name, value) 
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       
115        #define PERF_SEC_WRITE(timer) 
116
117        #define PERF_SEC_DESTROY(timer) \
118                destroy_BOM_timer(timer)       
119       
120#elif defined(PAPI)
121/*  Quick and dirty hack to gather multiple events. - Oct 17. 2012.
122
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
157*/
158        #define PERF_SEC_INIT(timer) \
159                timer = new CC(PAPI_EVENTS, PAPI_EVENTS_COUNT, 0)
160                // timer = new CC(Events,1,0,false) \
161
162        #define PERF_SEC_ADD_PARAM(timer, name, value) \
163                timer->set_param(name, value) \
164
165        #define PERF_SEC_START(timer) \
166                timer->start_interval() \
167
168        #define PERF_SEC_END(timer,elems) \
169                timer->end_interval(elems)
170       
171        #define PERF_SEC_DUMP(timer) \
172                timer->display_system_info();\
173                timer->display_raw_event_data();\
174                timer->dump_avg_kelem() \
175
176        #define PERF_SEC_WRITE(timer) \
177                timer->write_csv_file()
178                // timer->write_xml_file()
179               
180        #define PERF_SEC_DESTROY(timer) \
181                if(timer) delete timer
182               
183#else
184
185        #define PERF_SEC_INIT(timer)
186        #define PERF_SEC_START(timer)
187        #define PERF_SEC_ADD_PARAM(timer, name, value) 
188        #define PERF_SEC_END(timer,elems)
189        #define PERF_SEC_DUMP(timer)
190        #define PERF_SEC_DESTROY(timer)
191        #define PERF_SEC_WRITE(timer) 
192
193#endif
194#endif
195
Note: See TracBrowser for help on using the repository browser.