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

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

Added desc to PERF_SEC_BIND.

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