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

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

Minor fix.

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