rocprofiler-sdk/cxx/serialization.hpp Source File

rocprofiler-sdk/cxx/serialization.hpp Source File#

Rocprofiler SDK Developer API: rocprofiler-sdk/cxx/serialization.hpp Source File
Rocprofiler SDK Developer API 0.6.0
ROCm Profiling API and tools
serialization.hpp
Go to the documentation of this file.
1// MIT License
2//
3// Copyright (c) 2023-2025 Advanced Micro Devices, Inc. All rights reserved.
4//
5// Permission is hereby granted, free of charge, to any person obtaining a copy
6// of this software and associated documentation files (the "Software"), to deal
7// in the Software without restriction, including without limitation the rights
8// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9// copies of the Software, and to permit persons to whom the Software is
10// furnished to do so, subject to the following conditions:
11//
12// The above copyright notice and this permission notice shall be included in all
13// copies or substantial portions of the Software.
14//
15// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21// SOFTWARE.
22//
23
24#pragma once
25
29#include <rocprofiler-sdk/fwd.h>
35
36#include <cereal/archives/binary.hpp>
37#include <cereal/archives/json.hpp>
38#include <cereal/archives/portable_binary.hpp>
39#include <cereal/cereal.hpp>
40#include <cereal/types/array.hpp>
41#include <cereal/types/atomic.hpp>
42#include <cereal/types/bitset.hpp>
43#include <cereal/types/chrono.hpp>
44#include <cereal/types/common.hpp>
45#include <cereal/types/complex.hpp>
46#include <cereal/types/deque.hpp>
47#include <cereal/types/functional.hpp>
48#include <cereal/types/list.hpp>
49#include <cereal/types/map.hpp>
50#include <cereal/types/optional.hpp>
51#include <cereal/types/queue.hpp>
52#include <cereal/types/set.hpp>
53#include <cereal/types/stack.hpp>
54#include <cereal/types/string.hpp>
55#include <cereal/types/unordered_map.hpp>
56#include <cereal/types/unordered_set.hpp>
57#include <cereal/types/utility.hpp>
58#include <cereal/types/variant.hpp>
59#include <cereal/types/vector.hpp>
60
61#include <string>
62#include <string_view>
63#include <utility>
64#include <vector>
65
66#define ROCP_SDK_SAVE_DATA_FIELD(FIELD) ar(make_nvp(#FIELD, data.FIELD))
67#define ROCP_SDK_SAVE_DATA_VALUE(NAME, VALUE) ar(make_nvp(NAME, data.VALUE))
68#define ROCP_SDK_SAVE_VALUE(NAME, VALUE) ar(make_nvp(NAME, VALUE))
69#define ROCP_SDK_SAVE_DATA_CSTR(FIELD) \
70 ar(make_nvp(#FIELD, std::string{data.FIELD ? data.FIELD : ""}))
71#define ROCP_SDK_SAVE_DATA_BITFIELD(NAME, VALUE) \
72 { \
73 auto _val = data.VALUE; \
74 ar(make_nvp(NAME, _val)); \
75 }
76
77#if !defined(ROCPROFILER_SDK_CEREAL_NAMESPACE_BEGIN)
78# define ROCPROFILER_SDK_CEREAL_NAMESPACE_BEGIN \
79 namespace cereal \
80 {
81#endif
82
83#if !defined(ROCPROFILER_SDK_CEREAL_NAMESPACE_END)
84# define ROCPROFILER_SDK_CEREAL_NAMESPACE_END } // namespace cereal
85#endif
86
88
89template <typename ArchiveT>
90void
91save(ArchiveT& ar, rocprofiler_context_id_t data)
92{
94}
95
96template <typename ArchiveT>
97void
98save(ArchiveT& ar, rocprofiler_agent_id_t data)
99{
101}
102
103template <typename ArchiveT>
104void
105save(ArchiveT& ar, hsa_agent_t data)
106{
108}
109
110template <typename ArchiveT>
111void
112save(ArchiveT& ar, rocprofiler_queue_id_t data)
113{
115}
116
117template <typename ArchiveT>
118void
120{
122}
123
124template <typename ArchiveT>
125void
127{
128 ROCP_SDK_SAVE_DATA_FIELD(internal);
129 ROCP_SDK_SAVE_DATA_VALUE("external", external.value);
130}
131
132template <typename ArchiveT>
133void
140
141template <typename ArchiveT>
142void
143save(ArchiveT& ar, rocprofiler_address_t data)
144{
146}
147
148template <typename ArchiveT>
149void
151{
153 ROCP_SDK_SAVE_DATA_FIELD(code_object_id);
154 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
156 ROCP_SDK_SAVE_DATA_FIELD(load_base);
157 ROCP_SDK_SAVE_DATA_FIELD(load_size);
158 ROCP_SDK_SAVE_DATA_FIELD(load_delta);
159 ROCP_SDK_SAVE_DATA_FIELD(storage_type);
161 {
162 ROCP_SDK_SAVE_DATA_FIELD(storage_file);
163 }
165 {
166 ROCP_SDK_SAVE_DATA_FIELD(memory_base);
167 ROCP_SDK_SAVE_DATA_FIELD(memory_size);
168 }
169}
170
171template <typename ArchiveT>
172void
174{
176 ROCP_SDK_SAVE_DATA_FIELD(kernel_id);
177 ROCP_SDK_SAVE_DATA_FIELD(code_object_id);
178 ROCP_SDK_SAVE_DATA_CSTR(kernel_name);
179 ROCP_SDK_SAVE_DATA_FIELD(kernel_object);
180 ROCP_SDK_SAVE_DATA_FIELD(kernarg_segment_size);
181 ROCP_SDK_SAVE_DATA_FIELD(kernarg_segment_alignment);
182 ROCP_SDK_SAVE_DATA_FIELD(group_segment_size);
183 ROCP_SDK_SAVE_DATA_FIELD(private_segment_size);
184 ROCP_SDK_SAVE_DATA_FIELD(sgpr_count);
185 ROCP_SDK_SAVE_DATA_FIELD(arch_vgpr_count);
186 ROCP_SDK_SAVE_DATA_FIELD(accum_vgpr_count);
187 ROCP_SDK_SAVE_DATA_FIELD(kernel_code_entry_byte_offset);
188 ROCP_SDK_SAVE_DATA_FIELD(kernel_address);
189}
190
191template <typename ArchiveT>
192void
194{
196 ROCP_SDK_SAVE_DATA_FIELD(host_function_id);
197 ROCP_SDK_SAVE_DATA_FIELD(kernel_id);
198 ROCP_SDK_SAVE_DATA_FIELD(code_object_id);
199 ROCP_SDK_SAVE_DATA_FIELD(host_function);
201 ROCP_SDK_SAVE_DATA_CSTR(device_function);
202 ROCP_SDK_SAVE_DATA_FIELD(thread_limit);
203 ROCP_SDK_SAVE_DATA_FIELD(thread_ids);
204 ROCP_SDK_SAVE_DATA_FIELD(block_ids);
205 ROCP_SDK_SAVE_DATA_FIELD(block_dims);
206 ROCP_SDK_SAVE_DATA_FIELD(grid_dims);
207 ROCP_SDK_SAVE_DATA_FIELD(workgroup_size);
208}
209
210template <typename ArchiveT>
211void
213{
214 ROCP_SDK_SAVE_DATA_FIELD(uint64_t_retval);
215}
216
217template <typename ArchiveT>
218void
219save(ArchiveT& ar, const hsa_queue_t& data)
220{
221 ar(make_nvp("queue_id", data.id));
222}
223
224template <typename ArchiveT>
225void
226save(ArchiveT& ar, hsa_amd_event_scratch_alloc_start_t data)
227{
228 ar(make_nvp("queue_id", *data.queue));
229 ROCP_SDK_SAVE_DATA_FIELD(dispatch_id);
230}
231
232template <typename ArchiveT>
233void
234save(ArchiveT& ar, hsa_amd_event_scratch_alloc_end_t data)
235{
236 ar(make_nvp("queue_id", *data.queue));
237 ROCP_SDK_SAVE_DATA_FIELD(dispatch_id);
239 ROCP_SDK_SAVE_DATA_FIELD(num_slots);
241}
242
243template <typename ArchiveT>
244void
245save(ArchiveT& ar, hsa_amd_event_scratch_free_start_t data)
246{
247 ar(make_nvp("queue_id", *data.queue));
248}
249
250template <typename ArchiveT>
251void
252save(ArchiveT& ar, hsa_amd_event_scratch_free_end_t data)
253{
254 ar(make_nvp("queue_id", *data.queue));
256}
257
258template <typename ArchiveT>
259void
260save(ArchiveT& ar, hsa_amd_event_scratch_async_reclaim_start_t data)
261{
262 ar(make_nvp("queue_id", *data.queue));
263}
264
265template <typename ArchiveT>
266void
267save(ArchiveT& ar, hsa_amd_event_scratch_async_reclaim_end_t data)
268{
269 ar(make_nvp("queue_id", *data.queue));
271}
272
273template <typename ArchiveT>
274void
276{
277 ROCP_SDK_SAVE_DATA_FIELD(int64_t_retval);
278}
279
280template <typename ArchiveT>
281void
283{
285 // ROCP_SDK_SAVE_DATA_FIELD(args);
287}
288
289template <typename ArchiveT>
290void
292{
294 // ROCP_SDK_SAVE_DATA_FIELD(args);
296}
297
298template <typename ArchiveT>
299void
301{
302 ROCP_SDK_SAVE_DATA_FIELD(hipError_t_retval);
303}
304
305template <typename ArchiveT>
306void
308{
310 // ROCP_SDK_SAVE_DATA_FIELD(args);
312}
313
314template <typename ArchiveT>
315void
324
325template <typename ArchiveT>
326void
328{
330 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
331 ROCP_SDK_SAVE_DATA_FIELD(queue_id);
332 ROCP_SDK_SAVE_DATA_FIELD(kernel_id);
333 ROCP_SDK_SAVE_DATA_FIELD(dispatch_id);
334 ROCP_SDK_SAVE_DATA_FIELD(private_segment_size);
335 ROCP_SDK_SAVE_DATA_FIELD(group_segment_size);
336 ROCP_SDK_SAVE_DATA_FIELD(workgroup_size);
337 ROCP_SDK_SAVE_DATA_FIELD(grid_size);
338}
339
340template <typename ArchiveT>
341void
343{
345 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
346 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
347 ROCP_SDK_SAVE_DATA_FIELD(dispatch_info);
348}
349
350template <typename ArchiveT>
351void
353{
355 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
356 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
357 ROCP_SDK_SAVE_DATA_FIELD(dst_agent_id);
358 ROCP_SDK_SAVE_DATA_FIELD(src_agent_id);
360}
361
362template <typename ArchiveT>
363void
373
374template <typename ArchiveT>
375void
377{
378 ROCP_SDK_SAVE_DATA_FIELD(ncclResult_t_retval);
379}
380
381template <typename ArchiveT>
382void
384{
386 // ROCP_SDK_SAVE_DATA_FIELD(args);
388}
389
390template <typename ArchiveT>
391void
393{
394 ROCP_SDK_SAVE_DATA_FIELD(rocDecStatus_retval);
395}
396
397template <typename ArchiveT>
398void
404
405template <typename ArchiveT>
406void
408{
410 // ROCP_SDK_SAVE_DATA_FIELD(args);
411}
412
413template <typename ArchiveT>
414void
416{
418 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
419 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
420 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
421 ROCP_SDK_SAVE_DATA_FIELD(dispatch_info);
422}
423
424template <typename ArchiveT>
425void
427{
429 ROCP_SDK_SAVE_DATA_FIELD(num_records);
430 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
431 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
432 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
433 ROCP_SDK_SAVE_DATA_FIELD(dispatch_info);
434}
435
436template <typename ArchiveT>
437void
439{
440 ROCP_SDK_SAVE_DATA_FIELD(context_id);
441 ROCP_SDK_SAVE_DATA_FIELD(thread_id);
443 ROCP_SDK_SAVE_DATA_FIELD(operation);
444 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
446}
447
448template <typename ArchiveT, typename Tp>
449void
450save_buffer_tracing_api_record(ArchiveT& ar, Tp data)
451{
454 ROCP_SDK_SAVE_DATA_FIELD(operation);
455 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
456 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
457 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
458 ROCP_SDK_SAVE_DATA_FIELD(thread_id);
459}
460
461template <typename ArchiveT>
462void
467
468template <typename ArchiveT>
469void
471{
473 ROCP_SDK_SAVE_DATA_FIELD(counter_value);
474 ROCP_SDK_SAVE_DATA_FIELD(dispatch_id);
475}
476
477template <typename ArchiveT>
478void
483
484template <typename ArchiveT>
485void
490
491template <typename ArchiveT>
492void
497
498template <typename ArchiveT>
499void
504
505template <typename ArchiveT>
506void
508{
509 ROCP_SDK_SAVE_DATA_VALUE("kind", kind);
510 ROCP_SDK_SAVE_DATA_VALUE("device", device_num);
511 ROCP_SDK_SAVE_DATA_VALUE("task_id", task_id);
512 ROCP_SDK_SAVE_DATA_VALUE("target_id", target_id);
513}
514
515template <typename ArchiveT>
516void
518{
519 ROCP_SDK_SAVE_DATA_VALUE("host_op_id", host_op_id);
520 ROCP_SDK_SAVE_DATA_VALUE("optype", optype);
521 ROCP_SDK_SAVE_DATA_VALUE("src_device_num", src_device_num);
522 ROCP_SDK_SAVE_DATA_VALUE("dst_device_num", dst_device_num);
523 ROCP_SDK_SAVE_DATA_VALUE("bytes", bytes);
524}
525
526template <typename ArchiveT>
527void
529{
530 ROCP_SDK_SAVE_DATA_VALUE("host_op_id", host_op_id);
531 ROCP_SDK_SAVE_DATA_VALUE("device_num", device_num);
532 ROCP_SDK_SAVE_DATA_VALUE("requested_num_teams", requested_num_teams);
533}
534
535template <typename ArchiveT>
536void
538{
540
542 {
544 }
546 {
547 ROCP_SDK_SAVE_DATA_FIELD(target_data_op);
548 }
550 {
551 ROCP_SDK_SAVE_DATA_FIELD(target_kernel);
552 }
553}
554
555template <typename ArchiveT>
556void
558{
561 ROCP_SDK_SAVE_DATA_FIELD(operation);
562 ROCP_SDK_SAVE_DATA_FIELD(thread_id);
563 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
564 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
565 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
566 ROCP_SDK_SAVE_DATA_FIELD(dispatch_info);
567}
568
569template <typename ArchiveT>
570void
572{
575 ROCP_SDK_SAVE_DATA_FIELD(operation);
576 ROCP_SDK_SAVE_DATA_FIELD(thread_id);
577 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
578 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
579 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
580 ROCP_SDK_SAVE_DATA_FIELD(dst_agent_id);
581 ROCP_SDK_SAVE_DATA_FIELD(src_agent_id);
583}
584
585template <typename ArchiveT>
586void
600
601template <typename ArchiveT>
602void
604{
605 ROCP_SDK_SAVE_DATA_BITFIELD("read_fault", read_fault);
606 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
608}
609
610template <typename ArchiveT>
611void
613{
614 ROCP_SDK_SAVE_DATA_BITFIELD("migrated", migrated);
615 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
617}
618
619template <typename ArchiveT>
620void
622{
623 ROCP_SDK_SAVE_DATA_FIELD(start_addr);
624 ROCP_SDK_SAVE_DATA_FIELD(end_addr);
625 ROCP_SDK_SAVE_DATA_FIELD(from_agent);
626 ROCP_SDK_SAVE_DATA_FIELD(to_agent);
627 ROCP_SDK_SAVE_DATA_FIELD(prefetch_agent);
628 ROCP_SDK_SAVE_DATA_FIELD(preferred_agent);
630}
631
632template <typename ArchiveT>
633void
635{
636 ROCP_SDK_SAVE_DATA_FIELD(start_addr);
637 ROCP_SDK_SAVE_DATA_FIELD(end_addr);
638 ROCP_SDK_SAVE_DATA_FIELD(from_agent);
639 ROCP_SDK_SAVE_DATA_FIELD(to_agent);
641 ROCP_SDK_SAVE_DATA_FIELD(error_code);
642}
643
644template <typename ArchiveT>
645void
647{
648 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
650}
651
652template <typename ArchiveT>
653void
655{
656 ROCP_SDK_SAVE_DATA_BITFIELD("rescheduled", rescheduled);
657 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
658}
659
660template <typename ArchiveT>
661void
663{
664 ROCP_SDK_SAVE_DATA_FIELD(start_addr);
665 ROCP_SDK_SAVE_DATA_FIELD(end_addr);
666 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
668}
669
670template <typename ArchiveT>
671void
673{
674 ROCP_SDK_SAVE_DATA_FIELD(dropped_events_count);
675}
676
677namespace details
678{
679template <size_t Idx>
681
682#define ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(ENUM_VALUE, UNION_ARG) \
683 template <> \
684 struct save_page_migration_arg<ROCPROFILER_PAGE_MIGRATION_##ENUM_VALUE> \
685 { \
686 static constexpr auto value = ROCPROFILER_PAGE_MIGRATION_##ENUM_VALUE; \
687 template <typename ArchiveT> \
688 void operator()(ArchiveT& ar, rocprofiler_page_migration_args_t args) \
689 { \
690 ar(make_nvp(#UNION_ARG, args.UNION_ARG)); \
691 } \
692 };
693
695ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(PAGE_MIGRATE_START, page_migrate_start)
696ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(PAGE_MIGRATE_END, page_migrate_end)
697ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(PAGE_FAULT_START, page_fault_start)
698ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(PAGE_FAULT_END, page_fault_end)
699ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(QUEUE_EVICTION, queue_eviction)
700ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(QUEUE_RESTORE, queue_restore)
701ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(UNMAP_FROM_GPU, unmap_from_gpu)
702ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(DROPPED_EVENT, dropped_event)
703
704#undef ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG
705
706template <typename ArchiveT, size_t Idx, size_t... IdxTail>
707void
711 std::index_sequence<Idx, IdxTail...>)
712{
713 using save_page_migration_type = save_page_migration_arg<Idx>;
714 if(op == save_page_migration_type::value)
715 {
716 if constexpr(save_page_migration_type::value != ROCPROFILER_PAGE_MIGRATION_NONE)
717 save_page_migration_type{}(ar, args);
718 }
719 else if constexpr(sizeof...(IdxTail) > 0)
720 {
721 save_page_migration_args(ar, op, args, std::index_sequence<IdxTail...>{});
722 }
723}
724} // namespace details
725
726template <typename ArchiveT>
727void
729{
732 ROCP_SDK_SAVE_DATA_FIELD(operation);
733 ROCP_SDK_SAVE_DATA_FIELD(timestamp);
735 details::save_page_migration_args(
736 ar, data.operation, data.args, std::make_index_sequence<ROCPROFILER_PAGE_MIGRATION_LAST>{});
737}
738
739template <typename ArchiveT>
740void
742{
745 ROCP_SDK_SAVE_DATA_FIELD(operation);
746 ROCP_SDK_SAVE_DATA_FIELD(agent_id);
747 ROCP_SDK_SAVE_DATA_FIELD(queue_id);
748 ROCP_SDK_SAVE_DATA_FIELD(thread_id);
749 ROCP_SDK_SAVE_DATA_FIELD(start_timestamp);
750 ROCP_SDK_SAVE_DATA_FIELD(end_timestamp);
751 ROCP_SDK_SAVE_DATA_FIELD(correlation_id);
753}
754
755template <typename ArchiveT>
756void
764
765template <typename ArchiveT>
766void
767save(ArchiveT& ar, HsaCacheType data)
768{
769 ROCP_SDK_SAVE_DATA_BITFIELD("Data", ui32.Data);
770 ROCP_SDK_SAVE_DATA_BITFIELD("Instruction", ui32.Instruction);
771 ROCP_SDK_SAVE_DATA_BITFIELD("CPU", ui32.CPU);
772 ROCP_SDK_SAVE_DATA_BITFIELD("HSACU", ui32.HSACU);
773}
774
775template <typename ArchiveT>
776void
777save(ArchiveT& ar, HSA_LINKPROPERTY data)
778{
779 ROCP_SDK_SAVE_DATA_BITFIELD("Override", ui32.Override);
780 ROCP_SDK_SAVE_DATA_BITFIELD("NonCoherent", ui32.NonCoherent);
781 ROCP_SDK_SAVE_DATA_BITFIELD("NoAtomics32bit", ui32.NoAtomics32bit);
782 ROCP_SDK_SAVE_DATA_BITFIELD("NoAtomics64bit", ui32.NoAtomics64bit);
783 ROCP_SDK_SAVE_DATA_BITFIELD("NoPeerToPeerDMA", ui32.NoPeerToPeerDMA);
784}
785
786template <typename ArchiveT>
787void
788save(ArchiveT& ar, HSA_CAPABILITY data)
789{
790 ROCP_SDK_SAVE_DATA_BITFIELD("HotPluggable", ui32.HotPluggable);
791 ROCP_SDK_SAVE_DATA_BITFIELD("HSAMMUPresent", ui32.HSAMMUPresent);
792 ROCP_SDK_SAVE_DATA_BITFIELD("SharedWithGraphics", ui32.SharedWithGraphics);
793 ROCP_SDK_SAVE_DATA_BITFIELD("QueueSizePowerOfTwo", ui32.QueueSizePowerOfTwo);
794 ROCP_SDK_SAVE_DATA_BITFIELD("QueueSize32bit", ui32.QueueSize32bit);
795 ROCP_SDK_SAVE_DATA_BITFIELD("QueueIdleEvent", ui32.QueueIdleEvent);
796 ROCP_SDK_SAVE_DATA_BITFIELD("VALimit", ui32.VALimit);
797 ROCP_SDK_SAVE_DATA_BITFIELD("WatchPointsSupported", ui32.WatchPointsSupported);
798 ROCP_SDK_SAVE_DATA_BITFIELD("WatchPointsTotalBits", ui32.WatchPointsTotalBits);
799 ROCP_SDK_SAVE_DATA_BITFIELD("DoorbellType", ui32.DoorbellType);
800 ROCP_SDK_SAVE_DATA_BITFIELD("AQLQueueDoubleMap", ui32.AQLQueueDoubleMap);
801 ROCP_SDK_SAVE_DATA_BITFIELD("DebugTrapSupported", ui32.DebugTrapSupported);
802 ROCP_SDK_SAVE_DATA_BITFIELD("WaveLaunchTrapOverrideSupported",
803 ui32.WaveLaunchTrapOverrideSupported);
804 ROCP_SDK_SAVE_DATA_BITFIELD("WaveLaunchModeSupported", ui32.WaveLaunchModeSupported);
805 ROCP_SDK_SAVE_DATA_BITFIELD("PreciseMemoryOperationsSupported",
806 ui32.PreciseMemoryOperationsSupported);
807 ROCP_SDK_SAVE_DATA_BITFIELD("DEPRECATED_SRAM_EDCSupport", ui32.DEPRECATED_SRAM_EDCSupport);
808 ROCP_SDK_SAVE_DATA_BITFIELD("Mem_EDCSupport", ui32.Mem_EDCSupport);
809 ROCP_SDK_SAVE_DATA_BITFIELD("RASEventNotify", ui32.RASEventNotify);
810 ROCP_SDK_SAVE_DATA_BITFIELD("ASICRevision", ui32.ASICRevision);
811 ROCP_SDK_SAVE_DATA_BITFIELD("SRAM_EDCSupport", ui32.SRAM_EDCSupport);
812 ROCP_SDK_SAVE_DATA_BITFIELD("SVMAPISupported", ui32.SVMAPISupported);
813 ROCP_SDK_SAVE_DATA_BITFIELD("CoherentHostAccess", ui32.CoherentHostAccess);
814 ROCP_SDK_SAVE_DATA_BITFIELD("DebugSupportedFirmware", ui32.DebugSupportedFirmware);
815}
816
817template <typename ArchiveT>
818void
819save(ArchiveT& ar, HSA_MEMORYPROPERTY data)
820{
821 ROCP_SDK_SAVE_DATA_BITFIELD("HotPluggable", ui32.HotPluggable);
822 ROCP_SDK_SAVE_DATA_BITFIELD("NonVolatile", ui32.NonVolatile);
823}
824
825template <typename ArchiveT>
826void
827save(ArchiveT& ar, HSA_ENGINE_VERSION data)
828{
829 ROCP_SDK_SAVE_DATA_BITFIELD("uCodeSDMA", uCodeSDMA);
830 ROCP_SDK_SAVE_DATA_BITFIELD("uCodeRes", uCodeRes);
831}
832
833template <typename ArchiveT>
834void
835save(ArchiveT& ar, HSA_ENGINE_ID data)
836{
837 ROCP_SDK_SAVE_DATA_BITFIELD("uCode", ui32.uCode);
838 ROCP_SDK_SAVE_DATA_BITFIELD("Major", ui32.Major);
839 ROCP_SDK_SAVE_DATA_BITFIELD("Minor", ui32.Minor);
840 ROCP_SDK_SAVE_DATA_BITFIELD("Stepping", ui32.Stepping);
841}
842
843template <typename ArchiveT>
844void
846{
847 ROCP_SDK_SAVE_DATA_FIELD(processor_id_low);
850 ROCP_SDK_SAVE_DATA_FIELD(cache_line_size);
851 ROCP_SDK_SAVE_DATA_FIELD(cache_lines_per_tag);
852 ROCP_SDK_SAVE_DATA_FIELD(association);
855}
856template <typename ArchiveT>
857void
858save(ArchiveT& ar, rocprofiler_pc_t data)
859{
860 ROCP_SDK_SAVE_DATA_FIELD(code_object_id);
861 ROCP_SDK_SAVE_DATA_FIELD(code_object_offset);
862}
863
864template <typename ArchiveT>
865void
867{
868 ROCP_SDK_SAVE_DATA_BITFIELD("chiplet", chiplet);
869 ROCP_SDK_SAVE_DATA_BITFIELD("wave_id", wave_id);
870 ROCP_SDK_SAVE_DATA_BITFIELD("simd_id", simd_id);
871 ROCP_SDK_SAVE_DATA_BITFIELD("pipe_id", pipe_id);
872 ROCP_SDK_SAVE_DATA_BITFIELD("cu_or_wgp_id", cu_or_wgp_id);
873 ROCP_SDK_SAVE_DATA_BITFIELD("shader_array_id", shader_array_id);
874 ROCP_SDK_SAVE_DATA_BITFIELD("shader_engine_id", shader_engine_id);
875 ROCP_SDK_SAVE_DATA_BITFIELD("workgroup_id ", workgroup_id);
876 ROCP_SDK_SAVE_DATA_BITFIELD("vm_id", vm_id);
877 ROCP_SDK_SAVE_DATA_BITFIELD("queue_id", queue_id);
878 ROCP_SDK_SAVE_DATA_BITFIELD("microengine_id", microengine_id);
879}
880
881template <typename ArchiveT>
882void
884{
887 ROCP_SDK_SAVE_DATA_FIELD(exec_mask);
888 ROCP_SDK_SAVE_DATA_FIELD(timestamp);
889 ROCP_SDK_SAVE_DATA_FIELD(dispatch_id);
890 ROCP_SDK_SAVE_DATA_VALUE("corr_id", correlation_id);
891 ROCP_SDK_SAVE_DATA_VALUE("wrkgrp_id", workgroup_id);
892 ROCP_SDK_SAVE_DATA_BITFIELD("wave_in_grp", wave_in_group);
893}
894
895template <typename ArchiveT>
896void
898{
900 ROCP_SDK_SAVE_DATA_FIELD(version_major);
901 ROCP_SDK_SAVE_DATA_FIELD(version_minor);
902 ROCP_SDK_SAVE_DATA_FIELD(node_from);
905 ROCP_SDK_SAVE_DATA_FIELD(min_latency);
906 ROCP_SDK_SAVE_DATA_FIELD(max_latency);
907 ROCP_SDK_SAVE_DATA_FIELD(min_bandwidth);
908 ROCP_SDK_SAVE_DATA_FIELD(max_bandwidth);
909 ROCP_SDK_SAVE_DATA_FIELD(recommended_transfer_size);
911}
912
913template <typename ArchiveT>
914void
916{
917 ROCP_SDK_SAVE_DATA_FIELD(heap_type);
920 ROCP_SDK_SAVE_DATA_FIELD(mem_clk_max);
921 ROCP_SDK_SAVE_DATA_FIELD(size_in_bytes);
922}
923
924template <typename ArchiveT>
925void
934
935template <typename ArchiveT>
936void
937save(ArchiveT& ar, const rocprofiler_agent_v0_t& data)
938{
942 ROCP_SDK_SAVE_DATA_FIELD(cpu_cores_count);
943 ROCP_SDK_SAVE_DATA_FIELD(simd_count);
944 ROCP_SDK_SAVE_DATA_FIELD(mem_banks_count);
945 ROCP_SDK_SAVE_DATA_FIELD(caches_count);
946 ROCP_SDK_SAVE_DATA_FIELD(io_links_count);
947 ROCP_SDK_SAVE_DATA_FIELD(cpu_core_id_base);
948 ROCP_SDK_SAVE_DATA_FIELD(simd_id_base);
949 ROCP_SDK_SAVE_DATA_FIELD(max_waves_per_simd);
950 ROCP_SDK_SAVE_DATA_FIELD(lds_size_in_kb);
951 ROCP_SDK_SAVE_DATA_FIELD(gds_size_in_kb);
953 ROCP_SDK_SAVE_DATA_FIELD(wave_front_size);
955 ROCP_SDK_SAVE_DATA_FIELD(cu_count);
956 ROCP_SDK_SAVE_DATA_FIELD(array_count);
957 ROCP_SDK_SAVE_DATA_FIELD(num_shader_banks);
958 ROCP_SDK_SAVE_DATA_FIELD(simd_arrays_per_engine);
959 ROCP_SDK_SAVE_DATA_FIELD(cu_per_simd_array);
960 ROCP_SDK_SAVE_DATA_FIELD(simd_per_cu);
961 ROCP_SDK_SAVE_DATA_FIELD(max_slots_scratch_cu);
962 ROCP_SDK_SAVE_DATA_FIELD(gfx_target_version);
963 ROCP_SDK_SAVE_DATA_FIELD(vendor_id);
964 ROCP_SDK_SAVE_DATA_FIELD(device_id);
965 ROCP_SDK_SAVE_DATA_FIELD(location_id);
967 ROCP_SDK_SAVE_DATA_FIELD(drm_render_minor);
968 ROCP_SDK_SAVE_DATA_FIELD(num_sdma_engines);
969 ROCP_SDK_SAVE_DATA_FIELD(num_sdma_xgmi_engines);
970 ROCP_SDK_SAVE_DATA_FIELD(num_sdma_queues_per_engine);
971 ROCP_SDK_SAVE_DATA_FIELD(num_cp_queues);
972 ROCP_SDK_SAVE_DATA_FIELD(max_engine_clk_ccompute);
973 ROCP_SDK_SAVE_DATA_FIELD(max_engine_clk_fcompute);
974 ROCP_SDK_SAVE_DATA_FIELD(sdma_fw_version);
975 ROCP_SDK_SAVE_DATA_FIELD(fw_version);
976 ROCP_SDK_SAVE_DATA_FIELD(capability);
977 ROCP_SDK_SAVE_DATA_FIELD(cu_per_engine);
978 ROCP_SDK_SAVE_DATA_FIELD(max_waves_per_cu);
979 ROCP_SDK_SAVE_DATA_FIELD(family_id);
980 ROCP_SDK_SAVE_DATA_FIELD(workgroup_max_size);
981 ROCP_SDK_SAVE_DATA_FIELD(grid_max_size);
982 ROCP_SDK_SAVE_DATA_FIELD(local_mem_size);
985 ROCP_SDK_SAVE_DATA_FIELD(workgroup_max_dim);
986 ROCP_SDK_SAVE_DATA_FIELD(grid_max_dim);
988 ROCP_SDK_SAVE_DATA_CSTR(vendor_name);
989 ROCP_SDK_SAVE_DATA_CSTR(product_name);
990 ROCP_SDK_SAVE_DATA_CSTR(model_name);
992 ROCP_SDK_SAVE_DATA_FIELD(logical_node_id);
993
994 auto generate = [&](auto name, const auto* value, uint64_t size) {
995 using value_type = std::remove_const_t<std::remove_pointer_t<decltype(value)>>;
996 auto vec = std::vector<value_type>{};
997 vec.reserve(size);
998 for(uint64_t i = 0; i < size; ++i)
999 vec.emplace_back(value[i]);
1000 ar(make_nvp(name, vec));
1001 };
1002
1003 generate("mem_banks", data.mem_banks, data.mem_banks_count);
1004 generate("caches", data.caches, data.caches_count);
1005 generate("io_links", data.io_links, data.io_links_count);
1006}
1007
1008template <typename ArchiveT>
1009void
1011{
1013 ROCP_SDK_SAVE_DATA_BITFIELD("is_constant", is_constant);
1014 ROCP_SDK_SAVE_DATA_BITFIELD("is_derived", is_derived);
1016 ROCP_SDK_SAVE_DATA_CSTR(description);
1018 ROCP_SDK_SAVE_DATA_CSTR(expression);
1019}
1020
1021template <typename ArchiveT>
1022void
1024{
1026 ROCP_SDK_SAVE_DATA_FIELD(instance_size);
1028}
1029
1030template <typename ArchiveT>
1031void
1038
1039template <typename ArchiveT>
1040void
1052
1053template <typename ArchiveT, typename EnumT, typename ValueT>
1054void
1056{
1057 ar.makeArray();
1058 for(const auto& itr : data)
1059 ar(cereal::make_nvp("entry", itr));
1060}
1061
1062template <typename ArchiveT, typename EnumT, typename ValueT>
1063void
1065{
1066 auto _name = std::string{data.name};
1067 auto _ops = std::vector<std::string>{};
1068 _ops.reserve(data.operations.size());
1069
1070 ar(cereal::make_nvp("kind", _name));
1071 for(auto itr : data.operations)
1072 _ops.emplace_back(itr);
1073 ar(cereal::make_nvp("operations", _ops));
1074}
1075
1077
1078#undef ROCP_SDK_SAVE_DATA_FIELD
1079#undef ROCP_SDK_SAVE_DATA_VALUE
1080#undef ROCP_SDK_SAVE_DATA_CSTR
1081#undef ROCP_SDK_SAVE_DATA_BITFIELD
const rocprofiler_agent_io_link_t * io_links
Definition agent.h:205
uint32_t mem_banks_count
Definition agent.h:141
uint32_t caches_count
Definition agent.h:143
const rocprofiler_agent_mem_bank_t * mem_banks
Definition agent.h:203
uint32_t io_links_count
Definition agent.h:144
const rocprofiler_agent_cache_t * caches
Definition agent.h:204
Cache information for an agent.
Definition agent.h:56
Memory bank information for an agent.
Definition agent.h:91
Stores the properties of an agent (CPU, GPU, etc.)
Definition agent.h:131
uint64_t handle
usage example: store address in uint64_t format
Definition fwd.h:531
rocprofiler_page_migration_operation_t
Page migration event.
Definition fwd.h:337
@ ROCPROFILER_PAGE_MIGRATION_NONE
Unknown event.
Definition fwd.h:338
Agent Identifier.
Definition fwd.h:594
Context ID.
Definition fwd.h:555
ROCProfiler Record Correlation ID.
Definition fwd.h:571
Counter ID.
Definition fwd.h:602
Counter info struct version 0.
Definition fwd.h:758
Multi-dimensional struct of data used to describe GPU workgroup and grid sizes.
Definition fwd.h:619
ROCProfiler kernel dispatch information.
Definition fwd.h:706
ROCProfiler Profile Counting Counter Record per instance.
Definition fwd.h:736
Details for the dimension, including its size, for a counter record.
Definition fwd.h:723
Stores memory address for profiling.
Definition fwd.h:530
rocprofiler_tracing_operation_t operation
Specification of the rocprofiler_ompt_operation_t.
rocprofiler_address_t address
starting address for memory allocation
rocprofiler_page_migration_operation_t operation
ROCProfiler Buffer Correlation ID Retirement Tracer Record.
ROCProfiler Buffer HIP API Tracer Record.
ROCProfiler Buffer HSA API Tracer Record.
ROCProfiler Buffer Kernel Dispatch Tracer Record.
ROCProfiler Buffer Marker Tracer Record.
ROCProfiler Buffer Memory Allocation Tracer Record.
ROCProfiler Buffer Memory Copy Tracer Record.
ROCProfiler Buffer OMPT Tracer Record.
Additional trace data for OMPT target routines.
ROCProfiler Buffer Page Migration Tracer Record.
ROCProfiler Buffer RCCL API Record.
ROCProfiler Buffer ROCDecode API Record.
ROCProfiler Buffer Runtime Initialization Tracer Record.
ROCProfiler Buffer Scratch Memory Tracer Record.
rocprofiler_code_object_storage_type_t storage_type
storage type of the code object reader used to load the loaded code object
rocprofiler_address_t address
starting address for memory allocation
@ ROCPROFILER_CODE_OBJECT_STORAGE_TYPE_MEMORY
@ ROCPROFILER_CODE_OBJECT_STORAGE_TYPE_FILE
ROCProfiler Code Object Kernel Symbol Tracer Callback Record.
ROCProfiler Code Object Load Tracer Callback Record.
ROCProfiler HIP runtime and compiler API Tracer Callback Data.
ROCProfiler HSA API Callback Data.
ROCProfiler Kernel Dispatch Callback Tracer Record.
ROCProfiler Marker Tracer Callback Data.
ROCProfiler Memory Allocation Tracer Record.
ROCProfiler Memory Copy Callback Tracer Record.
ROCProfiler OMPT Callback Data.
ROCProfiler RCCL API Callback Data.
ROCProfiler ROCDecode API Callback Data.
ROCProfiler Scratch Memory Callback Data.
PC sampling configuration supported by a GPU agent.
Information about the GPU part where wave was executing at the moment of sampling.
ROCProfiler Host-Trap PC Sampling Record.
Sampled program counter.
Kernel dispatch data for profile counting callbacks.
ROCProfiler Profile Counting Counter Record Header Information.
void save_page_migration_args(ArchiveT &ar, rocprofiler_page_migration_operation_t op, rocprofiler_page_migration_args_t args, std::index_sequence< Idx, IdxTail... >)
void save(ArchiveT &ar, rocprofiler_context_id_t data)
void save_buffer_tracing_api_record(ArchiveT &ar, Tp data)
auto as_hex(Tp val, unsigned long width=0)
Definition utility.hpp:38
@ ROCPROFILER_OMPT_ID_target_submit_emi
Definition api_id.h:61
@ ROCPROFILER_OMPT_ID_target_emi
Definition api_id.h:59
@ ROCPROFILER_OMPT_ID_target_data_op_emi
Definition api_id.h:60
ROCProfiler-SDK API interface.
#define ROCP_SDK_SAVE_VALUE(NAME, VALUE)
#define ROCP_SDK_SPECIALIZE_PAGE_MIGRATION_ARG(ENUM_VALUE, UNION_ARG)
#define ROCP_SDK_SAVE_DATA_CSTR(FIELD)
#define ROCP_SDK_SAVE_DATA_BITFIELD(NAME, VALUE)
#define ROCP_SDK_SAVE_DATA_FIELD(FIELD)
#define ROCPROFILER_SDK_CEREAL_NAMESPACE_END
#define ROCPROFILER_SDK_CEREAL_NAMESPACE_BEGIN
#define ROCP_SDK_SAVE_DATA_VALUE(NAME, VALUE)
std::vector< value_type > operations
Definition name_info.hpp:61