Adding some BGP UPC preliminary performance counter support for use in
[charm.git] / src / ck-perf / trace-controlPoints-BGP.C
1 #if CMK_BLUEGENEP
2
3 #include <spi/UPC.h>
4 #include <spi/UPC_Events.h>
5 #include <iostream>
6
7
8 /// An initcall that registers the idle time reducer idleTimeReduction()
9 void initBGP_UPC_Counters(void) {
10
11     // every process on the node calls BGP_UPC_Initialize()
12     BGP_UPC_Initialize();
13
14
15     // just one rank per node sets the counter config and zeros the counters
16     
17     // counter_mode = 0, 1, 2, 3 (plus some others … see UPC.h)
18     // counter_trigger = BGP_UPC_CFG_LEVEL_HIGH, BGP_UPC_CFG_EDGE_DEFAULT
19     
20     BGP_UPC_Mode_t counter_mode = BGP_UPC_MODE_DEFAULT;
21     BGP_UPC_Event_Edge_t counter_trigger = BGP_UPC_CFG_LEVEL_HIGH;
22     
23     BGP_UPC_Initialize_Counter_Config(counter_mode, counter_trigger);
24
25     BGP_UPC_Zero_Counter_Values();
26     BGP_UPC_Start(0);
27
28 }
29
30
31
32
33
34 /// print out the counters
35 void printBGP_UPC_Counters(void) {
36     
37  
38     BGP_UPC_Stop();
39    
40     // Should look at BGP_TORUS_XP_NO_TOKENS to determine if there is contention
41    
42     int64_t cxp = BGP_UPC_Read_Counter_Value(BGP_TORUS_XP_PACKETS, BGP_UPC_READ_EXCLUSIVE);
43     std::cout << "BGP_UPC_Read_Counter_Value returned torus xp = " << cxp << std::endl;
44
45     int64_t cxm = BGP_UPC_Read_Counter_Value(BGP_TORUS_XM_PACKETS, BGP_UPC_READ_EXCLUSIVE);
46     std::cout << "BGP_UPC_Read_Counter_Value returned torus xm = " << cxm << std::endl;
47
48     int64_t cyp = BGP_UPC_Read_Counter_Value(BGP_TORUS_YP_PACKETS, BGP_UPC_READ_EXCLUSIVE);
49     std::cout << "BGP_UPC_Read_Counter_Value returned torus yp = " << cyp << std::endl;
50
51     int64_t cym = BGP_UPC_Read_Counter_Value(BGP_TORUS_YM_PACKETS, BGP_UPC_READ_EXCLUSIVE);
52     std::cout << "BGP_UPC_Read_Counter_Value returned torus ym = " << cym << std::endl;
53
54     int64_t czp = BGP_UPC_Read_Counter_Value(BGP_TORUS_ZP_PACKETS, BGP_UPC_READ_EXCLUSIVE);
55     std::cout << "BGP_UPC_Read_Counter_Value returned torus zp = " << czp << std::endl;
56
57     int64_t czm = BGP_UPC_Read_Counter_Value(BGP_TORUS_ZM_PACKETS, BGP_UPC_READ_EXCLUSIVE);
58     std::cout << "BGP_UPC_Read_Counter_Value returned torus zm = " << czm << std::endl;
59
60
61
62     int64_t cxpc = BGP_UPC_Read_Counter_Value(BGP_TORUS_XP_32BCHUNKS, BGP_UPC_READ_EXCLUSIVE);
63     std::cout << "BGP_UPC_Read_Counter_Value returned torus xp chunks = " << cxpc << std::endl;
64
65     int64_t cxmc = BGP_UPC_Read_Counter_Value(BGP_TORUS_XM_32BCHUNKS, BGP_UPC_READ_EXCLUSIVE);
66     std::cout << "BGP_UPC_Read_Counter_Value returned torus xm chunks = " << cxmc << std::endl;
67
68     int64_t cypc = BGP_UPC_Read_Counter_Value(BGP_TORUS_YP_32BCHUNKS, BGP_UPC_READ_EXCLUSIVE);
69     std::cout << "BGP_UPC_Read_Counter_Value returned torus yp chunks = " << cypc << std::endl;
70
71     int64_t cymc = BGP_UPC_Read_Counter_Value(BGP_TORUS_YM_32BCHUNKS, BGP_UPC_READ_EXCLUSIVE);
72     std::cout << "BGP_UPC_Read_Counter_Value returned torus ym chunks = " << cymc << std::endl;
73
74     int64_t czpc = BGP_UPC_Read_Counter_Value(BGP_TORUS_ZP_32BCHUNKS, BGP_UPC_READ_EXCLUSIVE);
75     std::cout << "BGP_UPC_Read_Counter_Value returned torus zp chunks = " << czpc << std::endl;
76
77     int64_t czmc = BGP_UPC_Read_Counter_Value(BGP_TORUS_ZM_32BCHUNKS, BGP_UPC_READ_EXCLUSIVE);
78     std::cout << "BGP_UPC_Read_Counter_Value returned torus zm chunks = " << czmc << std::endl;
79
80
81     //    Save the counter values from the counter_data structure …
82     BGP_UPC_Start(0);
83     
84 }
85 #else
86
87
88 void printBGP_UPC_Counters(void){
89 // do nothing since not on BGP
90 }
91
92
93
94 void initBGP_UPC_Counters(void){
95 // do nothing since not on BGP
96 }
97
98
99
100 #endif