@@ -259,6 +259,103 @@ static std::tuple<uint32_t, uint32_t> ClGetDevicePidTid(cl_device_pci_bus_info_k
259
259
return std::tuple<uint32_t , uint32_t >(device_pid, device_tid);
260
260
}
261
261
262
+ static std::string convertDataToString (IttArgs* args) {
263
+ std::string strData = " " ;
264
+ void * dataPtr = args->isIndirectData ? args->data [0 ] : args->data ;
265
+ if (args->count ) {
266
+ switch (args->type ) {
267
+ case __itt_metadata_u64: {
268
+ const uint64_t * uint64Ptr = reinterpret_cast <const uint64_t *>(dataPtr);
269
+ for (int i=0 ; i < args->count ; i++) {
270
+ if (i) {
271
+ strData += " ," ;
272
+ }
273
+ strData += std::to_string (*(uint64Ptr + i));
274
+ }
275
+ break ;
276
+ }
277
+ case __itt_metadata_s64: {
278
+ const int64_t * int64Ptr = reinterpret_cast <const int64_t *>(dataPtr);
279
+ for (int i=0 ; i < args->count ; i++) {
280
+ if (i) {
281
+ strData += " ," ;
282
+ }
283
+ strData += std::to_string (*(int64Ptr + i));
284
+ }
285
+ break ;
286
+ }
287
+ case __itt_metadata_u32: {
288
+ const uint32_t * uint32Ptr = reinterpret_cast <const uint32_t *>(dataPtr);
289
+ for (int i=0 ; i < args->count ; i++) {
290
+ if (i) {
291
+ strData += " ," ;
292
+ }
293
+ strData += std::to_string (*(uint32Ptr + i));
294
+ }
295
+ break ;
296
+ }
297
+ case __itt_metadata_s32: {
298
+ const int32_t * int32Ptr = reinterpret_cast <const int32_t *>(dataPtr);
299
+ for (int i=0 ; i < args->count ; i++) {
300
+ if (i) {
301
+ strData += " ," ;
302
+ }
303
+ strData += std::to_string (*(int32Ptr + i));
304
+ }
305
+ break ;
306
+ }
307
+ case __itt_metadata_u16: {
308
+ const uint16_t * uint16Ptr = reinterpret_cast <const uint16_t *>(dataPtr);
309
+ for (int i=0 ; i < args->count ; i++) {
310
+ if (i) {
311
+ strData += " ," ;
312
+ }
313
+ strData += std::to_string (*(uint16Ptr + i));
314
+ }
315
+ break ;
316
+ }
317
+ case __itt_metadata_s16: {
318
+ const int16_t * uint16Ptr = reinterpret_cast <const int16_t *>(dataPtr);
319
+ for (int i=0 ; i < args->count ; i++) {
320
+ if (i) {
321
+ strData += " ," ;
322
+ }
323
+ strData += std::to_string (*(uint16Ptr + i));
324
+ }
325
+ break ;
326
+ }
327
+ case __itt_metadata_float: {
328
+ const float * floatPtr = reinterpret_cast <const float *>(dataPtr);
329
+ for (int i=0 ; i < args->count ; i++) {
330
+ if (i) {
331
+ strData += " ," ;
332
+ }
333
+ strData += std::to_string (*(floatPtr + i));
334
+ }
335
+ break ;
336
+ }
337
+ case __itt_metadata_double: {
338
+ const double * doublePtr = reinterpret_cast <const double *>(dataPtr);
339
+ for (int i=0 ; i < args->count ; i++) {
340
+ if (i) {
341
+ strData += " ," ;
342
+ }
343
+ strData += std::to_string (*(doublePtr + i));
344
+ }
345
+ break ;
346
+ }
347
+ default : { // default is string
348
+ const char * stringPtr = reinterpret_cast <const char *>(dataPtr);
349
+ strData += " \" " ;
350
+ strData += std::string (stringPtr, args->count );
351
+ strData += " \" " ;
352
+ break ;
353
+ }
354
+ }
355
+ }
356
+ return strData;
357
+ }
358
+
262
359
class TraceBuffer ;
263
360
std::set<TraceBuffer *> *trace_buffers_ = nullptr ;
264
361
@@ -546,10 +643,24 @@ class TraceBuffer {
546
643
if (args.mpi_counter >= 0 ) {
547
644
str_args += " , \" mpi_counter\" : " + std::to_string (args.mpi_counter );
548
645
}
549
- } else if (rec.api_type_ == CCL) {
550
- const CclArgs& args = rec.ccl_args_ ;
551
- str_args += " \" ssize\" : " + std::to_string (args.buff_size );
552
- }
646
+ } else if (rec.api_type_ == ITT) {
647
+ str_args = str_args + " \" " + rec.itt_args_ .key + " \" :[" ;
648
+ str_args += convertDataToString (&rec.itt_args_ );
649
+ str_args += " ]" ;
650
+ if (rec.itt_args_ .isIndirectData ) {
651
+ free (rec.itt_args_ .data [0 ]);
652
+ }
653
+ IttArgs* args = rec.itt_args_ .next ;
654
+ while (args != nullptr ) {
655
+ str_args += " ," ;
656
+ str_args = str_args + " \" " + args->key + " \" :[" ;
657
+ str_args += convertDataToString (args);
658
+ str_args += " ]" ;
659
+ IttArgs* toFree = args;
660
+ args = args->next ;
661
+ free (toFree);
662
+ }
663
+ }
553
664
554
665
if (!str_args.empty ()) {
555
666
str += " , \" args\" : {" + str_args + " }" ;
@@ -971,10 +1082,24 @@ class ClTraceBuffer {
971
1082
str_args += " , \" mpi_counter\" : " + std::to_string (args.mpi_counter );
972
1083
}
973
1084
974
- } else if (rec.api_type_ == CCL) {
975
- const CclArgs& args = rec.ccl_args_ ;
976
- str_args += " \" ssize\" : " + std::to_string (args.buff_size );
977
- }
1085
+ } else if (rec.api_type_ == ITT) {
1086
+ str_args = str_args + " \" " + rec.itt_args_ .key + " \" :[" ;
1087
+ str_args += convertDataToString (&rec.itt_args_ );
1088
+ str_args += " ]" ;
1089
+ if (rec.itt_args_ .isIndirectData ) {
1090
+ free (rec.itt_args_ .data [0 ]);
1091
+ }
1092
+ IttArgs* args = rec.itt_args_ .next ;
1093
+ while (args != nullptr ) {
1094
+ str_args += " ," ;
1095
+ str_args = str_args + " \" " + args->key + " \" :[" ;
1096
+ str_args += convertDataToString (args);
1097
+ str_args += " ]" ;
1098
+ IttArgs* toFree = args;
1099
+ args = args->next ;
1100
+ free (toFree);
1101
+ }
1102
+ }
978
1103
979
1104
if (!str_args.empty ()) {
980
1105
str += " , \" args\" : {" + str_args + " }" ;
@@ -1303,7 +1428,7 @@ class ChromeLogger {
1303
1428
}
1304
1429
}
1305
1430
1306
- static void IttLoggingCallback (const char *name, uint64_t start_ts, uint64_t end_ts) {
1431
+ static void IttLoggingCallback (const char *name, uint64_t start_ts, uint64_t end_ts, IttArgs* metadata_args ) {
1307
1432
if (!thread_local_buffer_.IsFinalized ()) {
1308
1433
HostEventRecord *rec = thread_local_buffer_.GetHostEvent ();
1309
1434
@@ -1319,27 +1444,10 @@ class ChromeLogger {
1319
1444
rec->start_time_ = start_ts;
1320
1445
rec->end_time_ = end_ts;
1321
1446
rec->id_ = 0 ;
1322
- thread_local_buffer_.BufferHostEvent ();
1323
- }
1324
- }
1325
-
1326
- static void CclLoggingCallback (const char *name, uint64_t start_ts, uint64_t end_ts, uint64_t buff_size) {
1327
- if (!thread_local_buffer_.IsFinalized ()) {
1328
- HostEventRecord *rec = thread_local_buffer_.GetHostEvent ();
1329
-
1330
- if (name != nullptr ) {
1331
- rec->name_ = strdup (name);
1332
- } else {
1333
- rec->name_ = nullptr ;
1447
+ if (metadata_args != nullptr && metadata_args->count != 0 ) {
1448
+ rec->api_type_ = ITT;
1449
+ rec->itt_args_ = *metadata_args;
1334
1450
}
1335
-
1336
- rec->type_ = EVENT_COMPLETE;
1337
- rec->api_id_ = IttTracingId;
1338
- rec->start_time_ = start_ts;
1339
- rec->end_time_ = end_ts;
1340
- rec->id_ = 0 ;
1341
- rec->api_type_ = CCL;
1342
- rec->ccl_args_ .buff_size = buff_size;
1343
1451
thread_local_buffer_.BufferHostEvent ();
1344
1452
}
1345
1453
}
0 commit comments