18
18
#include < thread>
19
19
#include < unistd.h>
20
20
21
- unsigned long process_id () { return static_cast <unsigned long >(getpid ()); }
22
21
23
22
namespace chrono = std::chrono;
24
23
25
24
Writer *GWriter = nullptr ;
26
25
26
+ struct Measurements {
27
+ size_t TID;
28
+ size_t PID;
29
+ size_t TimeStamp;
30
+ };
31
+
32
+ unsigned long process_id () { return static_cast <unsigned long >(getpid ()); }
33
+
34
+ static Measurements measure () {
35
+ size_t TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
36
+ size_t PID = process_id ();
37
+ auto Now = chrono::high_resolution_clock::now ();
38
+ size_t TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
39
+ .time_since_epoch ()
40
+ .count ();
41
+
42
+ return Measurements{TID, PID, TS};
43
+ }
44
+
27
45
XPTI_CALLBACK_API void piBeginEndCallback (uint16_t TraceType,
28
46
xpti::trace_event_data_t *,
29
47
xpti::trace_event_data_t *,
@@ -51,29 +69,21 @@ XPTI_CALLBACK_API void xptiTraceInit(unsigned int /*major_version*/,
51
69
52
70
if (std::string_view (StreamName) == " sycl.pi" ) {
53
71
uint8_t StreamID = xptiRegisterStream (StreamName);
54
- xptiRegisterCallback (StreamID,
55
- (uint16_t )xpti::trace_point_type_t ::function_begin,
72
+ xptiRegisterCallback (StreamID, xpti::trace_function_begin,
56
73
piBeginEndCallback);
57
- xptiRegisterCallback (StreamID,
58
- (uint16_t )xpti::trace_point_type_t ::function_end,
74
+ xptiRegisterCallback (StreamID, xpti::trace_function_end,
59
75
piBeginEndCallback);
60
76
} else if (std::string_view (StreamName) == " sycl" ) {
61
77
uint8_t StreamID = xptiRegisterStream (StreamName);
62
- xptiRegisterCallback (StreamID,
63
- (uint16_t )xpti::trace_point_type_t ::task_begin,
78
+ xptiRegisterCallback (StreamID, xpti::trace_task_begin,
64
79
taskBeginEndCallback);
65
- xptiRegisterCallback (StreamID, (uint16_t )xpti::trace_point_type_t ::task_end,
66
- taskBeginEndCallback);
67
- xptiRegisterCallback (StreamID,
68
- (uint16_t )xpti::trace_point_type_t ::wait_begin,
69
- waitBeginEndCallback);
70
- xptiRegisterCallback (StreamID, (uint16_t )xpti::trace_point_type_t ::wait_end,
80
+ xptiRegisterCallback (StreamID, xpti::trace_task_end, taskBeginEndCallback);
81
+ xptiRegisterCallback (StreamID, xpti::trace_wait_begin,
71
82
waitBeginEndCallback);
72
- xptiRegisterCallback (StreamID,
73
- ( uint16_t ) xpti::trace_point_type_t ::barrier_begin ,
83
+ xptiRegisterCallback (StreamID, xpti::trace_wait_end, waitBeginEndCallback);
84
+ xptiRegisterCallback (StreamID, xpti::trace_barrier_begin ,
74
85
waitBeginEndCallback);
75
- xptiRegisterCallback (StreamID,
76
- (uint16_t )xpti::trace_point_type_t ::barrier_end,
86
+ xptiRegisterCallback (StreamID, xpti::trace_barrier_end,
77
87
waitBeginEndCallback);
78
88
}
79
89
}
@@ -85,13 +95,8 @@ XPTI_CALLBACK_API void piBeginEndCallback(uint16_t TraceType,
85
95
xpti::trace_event_data_t *,
86
96
uint64_t /* Instance*/ ,
87
97
const void *UserData) {
88
- unsigned long TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
89
- unsigned long PID = process_id ();
90
- auto Now = chrono::high_resolution_clock::now ();
91
- auto TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
92
- .time_since_epoch ()
93
- .count ();
94
- if (TraceType == (uint16_t )xpti::trace_point_type_t ::function_begin) {
98
+ auto [TID, PID, TS] = measure ();
99
+ if (TraceType == xpti::trace_function_begin) {
95
100
GWriter->writeBegin (static_cast <const char *>(UserData), " Plugin" , PID, TID,
96
101
TS);
97
102
} else {
@@ -105,9 +110,6 @@ XPTI_CALLBACK_API void taskBeginEndCallback(uint16_t TraceType,
105
110
xpti::trace_event_data_t *Event,
106
111
uint64_t /* Instance*/ ,
107
112
const void *) {
108
- unsigned long TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
109
- unsigned long PID = process_id ();
110
-
111
113
std::string_view Name = " unknown" ;
112
114
113
115
xpti::metadata_t *Metadata = xptiQueryMetadata (Event);
@@ -118,12 +120,8 @@ XPTI_CALLBACK_API void taskBeginEndCallback(uint16_t TraceType,
118
120
}
119
121
}
120
122
121
- auto Now = chrono::high_resolution_clock::now ();
122
- auto TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
123
- .time_since_epoch ()
124
- .count ();
125
-
126
- if (TraceType == (uint16_t )xpti::trace_point_type_t ::task_begin) {
123
+ auto [TID, PID, TS] = measure ();
124
+ if (TraceType == xpti::trace_task_begin) {
127
125
GWriter->writeBegin (Name, " SYCL" , PID, TID, TS);
128
126
} else {
129
127
GWriter->writeEnd (Name, " SYCL" , PID, TID, TS);
@@ -135,14 +133,9 @@ XPTI_CALLBACK_API void waitBeginEndCallback(uint16_t TraceType,
135
133
xpti::trace_event_data_t *,
136
134
uint64_t /* Instance*/ ,
137
135
const void *UserData) {
138
- unsigned long TID = std::hash<std::thread::id>{}(std::this_thread::get_id ());
139
- unsigned long PID = process_id ();
140
- auto Now = chrono::high_resolution_clock::now ();
141
- auto TS = chrono::time_point_cast<chrono::nanoseconds>(Now)
142
- .time_since_epoch ()
143
- .count ();
144
- if (TraceType == (uint16_t )xpti::trace_point_type_t ::wait_begin ||
145
- TraceType == (uint16_t )xpti::trace_point_type_t ::barrier_begin) {
136
+ auto [TID, PID, TS] = measure ();
137
+ if (TraceType == xpti::trace_wait_begin ||
138
+ TraceType == xpti::trace_barrier_begin) {
146
139
GWriter->writeBegin (static_cast <const char *>(UserData), " SYCL" , PID, TID,
147
140
TS);
148
141
} else {
0 commit comments