2 Copyright (c) 2014 Intel Corporation. All Rights Reserved.
4 Redistribution and use in source and binary forms, with or without
5 modification, are permitted provided that the following conditions
8 * Redistributions of source code must retain the above copyright
9 notice, this list of conditions and the following disclaimer.
10 * Redistributions in binary form must reproduce the above copyright
11 notice, this list of conditions and the following disclaimer in the
12 documentation and/or other materials provided with the distribution.
13 * Neither the name of Intel Corporation nor the names of its
14 contributors may be used to endorse or promote products derived
15 from this software without specific prior written permission.
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18 "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
19 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
20 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
21 HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
22 SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
23 LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
24 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
31 #include "offload_trace.h"
36 #include "liboffload_error_codes.h"
38 extern const char *prefix
;
46 static const char * offload_stage(std::stringstream
&ss
,
52 ss
<< "[" << report_get_message_str(c_report_offload
) << "]";
54 ss
<< " [" << prefix
<< "]";
56 ss
<< " [" << report_get_message_str(c_report_tag
);
57 ss
<< " " << offload_number
<< "]";
62 ss
<< " [" << tag
<< "]";
65 ss
<< " [" << prefix
<< " " << mic_index
<< "]";
67 ss
<< " [" << report_get_message_str(c_report_tag
);
68 ss
<< " " << offload_number
<< "]";
70 ss
<< " [" << tag
<< "]";
76 static const char * offload_signal(std::stringstream
&ss
,
81 ss
<< "[" << report_get_message_str(c_report_offload
) << "]";
82 ss
<< " [" << prefix
<< "]";
83 ss
<< " [" << report_get_message_str(c_report_tag
);
84 ss
<< " " << offload_number
<< "]";
85 ss
<< " [" << tag
<< "]";
90 void offload_stage_print(int stage
, int offload_number
, ...)
97 va_start(va_args
, offload_number
);
98 va_arg(va_args
, char*);
101 case c_offload_start
:
102 str1
= report_get_message_str(c_report_state
);
103 str2
= report_get_message_str(c_report_start
);
104 offload_stage(ss
, offload_number
, str1
, str2
, true);
107 str1
= report_get_message_str(c_report_state
);
108 str2
= report_get_message_str(c_report_init
);
109 offload_stage(ss
, offload_number
, str1
, str2
, false);
110 ss
<< " " << report_get_message_str(c_report_logical_card
);
111 ss
<< " " << va_arg(va_args
, int);
112 ss
<< " = " << report_get_message_str(c_report_physical_card
);
113 ss
<< " " << va_arg(va_args
, int);
115 case c_offload_register
:
116 str1
= report_get_message_str(c_report_state
);
117 str2
= report_get_message_str(c_report_register
);
118 offload_stage(ss
, offload_number
, str1
, str2
, true);
120 case c_offload_init_func
:
121 str1
= report_get_message_str(c_report_state
);
122 str2
= report_get_message_str(c_report_init_func
);
123 offload_stage(ss
, offload_number
, str1
, str2
, true);
124 ss
<< ": " << va_arg(va_args
, char*);
126 case c_offload_create_buf_host
:
127 str1
= report_get_message_str(c_report_state
);
128 str2
= report_get_message_str(c_report_create_buf_host
);
129 offload_stage(ss
, offload_number
, str1
, str2
, true);
130 ss
<< ": base=0x" << std::hex
<< va_arg(va_args
, uint64_t);
131 ss
<< " length=" << std::dec
<< va_arg(va_args
, uint64_t);
133 case c_offload_create_buf_mic
:
134 str1
= report_get_message_str(c_report_state
);
135 str2
= report_get_message_str(c_report_create_buf_mic
);
136 offload_stage(ss
, offload_number
, str1
, str2
, true);
137 ss
<< ": size=" << va_arg(va_args
, uint64_t);
138 ss
<< " offset=" << va_arg(va_args
, int);
139 if (va_arg(va_args
,int))
142 case c_offload_send_pointer_data
:
143 str1
= report_get_message_str(c_report_state
);
144 str2
= report_get_message_str(c_report_send_pointer_data
);
145 offload_stage(ss
, offload_number
, str1
, str2
, true);
147 case c_offload_sent_pointer_data
:
148 str1
= report_get_message_str(c_report_state
);
149 str2
= report_get_message_str(c_report_sent_pointer_data
);
150 offload_stage(ss
, offload_number
, str1
, str2
, true);
151 ss
<< " " << va_arg(va_args
, uint64_t);
153 case c_offload_gather_copyin_data
:
154 str1
= report_get_message_str(c_report_state
);
155 str2
= report_get_message_str(c_report_gather_copyin_data
);
156 offload_stage(ss
, offload_number
, str1
, str2
, true);
158 case c_offload_copyin_data
:
159 str1
= report_get_message_str(c_report_state
);
160 str2
= report_get_message_str(c_report_copyin_data
);
161 offload_stage(ss
, offload_number
, str1
, str2
, true);
162 ss
<< " " << va_arg(va_args
, uint64_t) << " ";
164 case c_offload_compute
:
165 str1
= report_get_message_str(c_report_state
);
166 str2
= report_get_message_str(c_report_compute
);
167 offload_stage(ss
, offload_number
, str1
, str2
, true);
169 case c_offload_receive_pointer_data
:
170 str1
= report_get_message_str(c_report_state
);
171 str2
= report_get_message_str(c_report_receive_pointer_data
);
172 offload_stage(ss
, offload_number
, str1
, str2
, true);
174 case c_offload_received_pointer_data
:
175 str1
= report_get_message_str(c_report_state
);
176 str2
= report_get_message_str(c_report_received_pointer_data
);
177 offload_stage(ss
, offload_number
, str1
, str2
, true);
178 ss
<< " " << va_arg(va_args
, uint64_t);
180 case c_offload_start_target_func
:
181 str1
= report_get_message_str(c_report_state
);
182 str2
= report_get_message_str(c_report_start_target_func
);
183 offload_stage(ss
, offload_number
, str1
, str2
, true);
184 ss
<< ": " << va_arg(va_args
, char*);
187 str1
= report_get_message_str(c_report_var
);
188 offload_stage(ss
, offload_number
, str1
, " ", true);
189 va_arg(va_args
, int);
190 ss
<< va_arg(va_args
, char*);
191 ss
<< " " << " " << va_arg(va_args
, char*);
193 case c_offload_scatter_copyin_data
:
194 str1
= report_get_message_str(c_report_state
);
195 str2
= report_get_message_str(c_report_scatter_copyin_data
);
196 offload_stage(ss
, offload_number
, str1
, str2
, true);
198 case c_offload_gather_copyout_data
:
199 str1
= report_get_message_str(c_report_state
);
200 str2
= report_get_message_str(c_report_gather_copyout_data
);
201 offload_stage(ss
, offload_number
, str1
, str2
, true);
203 case c_offload_scatter_copyout_data
:
204 str1
= report_get_message_str(c_report_state
);
205 str2
= report_get_message_str(c_report_scatter_copyout_data
);
206 offload_stage(ss
, offload_number
, str1
, str2
, true);
208 case c_offload_copyout_data
:
209 str1
= report_get_message_str(c_report_state
);
210 str2
= report_get_message_str(c_report_copyout_data
);
211 offload_stage(ss
, offload_number
, str1
, str2
, true);
212 ss
<< " " << va_arg(va_args
, uint64_t);
214 case c_offload_signal
:
217 str1
= report_get_message_str(c_report_state_signal
);
218 str2
= report_get_message_str(c_report_signal
);
219 offload_signal(ss
, offload_number
, str1
, str2
);
220 signal
= va_arg(va_args
, uint64_t*);
222 ss
<< " 0x" << std::hex
<< *signal
;
231 str1
= report_get_message_str(c_report_state_signal
);
232 str2
= report_get_message_str(c_report_wait
);
233 offload_signal(ss
, offload_number
, str1
, str2
);
234 count
= va_arg(va_args
, int);
235 signal
= va_arg(va_args
, uint64_t**);
238 ss
<< " " << std::hex
<< signal
[count
-1];
246 case c_offload_unregister
:
247 str1
= report_get_message_str(c_report_state
);
248 str2
= report_get_message_str(c_report_unregister
);
249 offload_stage(ss
, offload_number
, str1
, str2
, false);
251 case c_offload_destroy
:
252 str1
= report_get_message_str(c_report_state
);
253 str2
= report_get_message_str(c_report_destroy
);
254 offload_stage(ss
, offload_number
, str1
, str2
, true);
256 case c_offload_myoinit
:
257 str1
= report_get_message_str(c_report_state
);
258 str2
= report_get_message_str(c_report_myoinit
);
259 offload_stage(ss
, offload_number
, str1
, str2
, false);
261 case c_offload_myoregister
:
262 str1
= report_get_message_str(c_report_state
);
263 str2
= report_get_message_str(c_report_myoregister
);
264 offload_stage(ss
, offload_number
, str1
, str2
, false);
266 case c_offload_myofini
:
267 str1
= report_get_message_str(c_report_state
);
268 str2
= report_get_message_str(c_report_myofini
);
269 offload_stage(ss
, offload_number
, str1
, str2
, false);
271 case c_offload_mic_myo_shared
:
272 str1
= report_get_message_str(c_report_state
);
273 str2
= report_get_message_str(c_report_mic_myo_shared
);
274 offload_stage(ss
, offload_number
, str1
, str2
, false);
275 ss
<< " " << va_arg(va_args
, char*);
277 case c_offload_mic_myo_fptr
:
278 str1
= report_get_message_str(c_report_state
);
279 str2
= report_get_message_str(c_report_mic_myo_fptr
);
280 offload_stage(ss
, offload_number
, str1
, str2
, false);
281 ss
<< " " << va_arg(va_args
, char*);
283 case c_offload_myosharedmalloc
:
284 str1
= report_get_message_str(c_report_state
);
285 str2
= report_get_message_str(c_report_myosharedmalloc
);
286 offload_stage(ss
, offload_number
, str1
, str2
, false);
287 va_arg(va_args
, char*);
288 ss
<< " " << va_arg(va_args
, size_t);
290 case c_offload_myosharedfree
:
291 str1
= report_get_message_str(c_report_state
);
292 str2
= report_get_message_str(c_report_myosharedfree
);
293 offload_stage(ss
, offload_number
, str1
, str2
, false);
295 case c_offload_myosharedalignedmalloc
:
296 str1
= report_get_message_str(c_report_state
);
297 str2
= report_get_message_str(c_report_myosharedalignedmalloc
);
298 offload_stage(ss
, offload_number
, str1
, str2
, false);
299 va_arg(va_args
, char*);
300 ss
<< " " << va_arg(va_args
, size_t);
301 ss
<< " " << va_arg(va_args
, size_t);
303 case c_offload_myosharedalignedfree
:
304 str1
= report_get_message_str(c_report_state
);
305 str2
= report_get_message_str(c_report_myosharedalignedfree
);
306 offload_stage(ss
, offload_number
, str1
, str2
, false);
308 case c_offload_myoacquire
:
309 str1
= report_get_message_str(c_report_state
);
310 str2
= report_get_message_str(c_report_myoacquire
);
311 offload_stage(ss
, offload_number
, str1
, str2
, false);
313 case c_offload_myorelease
:
314 str1
= report_get_message_str(c_report_state
);
315 str2
= report_get_message_str(c_report_myorelease
);
316 offload_stage(ss
, offload_number
, str1
, str2
, false);
319 LIBOFFLOAD_ERROR(c_report_unknown_trace_node
);
324 fprintf(stdout
, buf
.data());