| #include "InternalEvent.h" |
| #include <omp-tools.h> |
| #include <sstream> |
| |
| #include "gtest/gtest.h" |
| |
| using namespace omptest; |
| |
| TEST(InternalEvent_toString, AssertionSyncPoint) { |
| internal::AssertionSyncPoint SP{/*Name=*/"Test Sync Point"}; |
| |
| EXPECT_EQ(SP.toString(), "Assertion SyncPoint: 'Test Sync Point'"); |
| } |
| |
| TEST(InternalEvent_toString, ThreadBegin) { |
| internal::ThreadBegin TB{/*ThreadType=*/ompt_thread_t::ompt_thread_initial}; |
| |
| EXPECT_EQ(TB.toString(), "OMPT Callback ThreadBegin: ThreadType=1"); |
| } |
| |
| TEST(InternalEvent_toString, ThreadEnd) { |
| internal::ThreadEnd TE{}; |
| |
| EXPECT_EQ(TE.toString(), "OMPT Callback ThreadEnd"); |
| } |
| |
| TEST(InternalEvent_toString, ParallelBegin) { |
| internal::ParallelBegin PB{/*NumThreads=*/31}; |
| |
| EXPECT_EQ(PB.toString(), "OMPT Callback ParallelBegin: NumThreads=31"); |
| } |
| |
| TEST(InternalEvent_toString, ParallelEnd) { |
| internal::ParallelEnd PE{/*ParallelData=*/(ompt_data_t *)0x11, |
| /*EncounteringTaskData=*/(ompt_data_t *)0x22, |
| /*Flags=*/31, |
| /*CodeptrRA=*/(const void *)0x33}; |
| |
| EXPECT_EQ(PE.toString(), "OMPT Callback ParallelEnd"); |
| } |
| |
| TEST(InternalEvent_toString, Work) { |
| internal::Work WK{/*WorkType=*/ompt_work_t::ompt_work_loop_dynamic, |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_beginend, |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Count=*/31, |
| /*CodeptrRA=*/(const void *)0x33}; |
| |
| EXPECT_EQ(WK.toString(), |
| "OMPT Callback Work: work_type=11 endpoint=3 parallel_data=0x11 " |
| "task_data=0x22 count=31 codeptr=0x33"); |
| } |
| |
| TEST(InternalEvent_toString, Dispatch_iteration) { |
| ompt_data_t DI{.value = 31}; |
| internal::Dispatch D{/*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Kind=*/ompt_dispatch_t::ompt_dispatch_iteration, |
| /*Instance=*/DI}; |
| |
| EXPECT_EQ(D.toString(), "OMPT Callback Dispatch: parallel_data=0x11 " |
| "task_data=0x22 kind=1 instance=[it=31]"); |
| } |
| |
| TEST(InternalEvent_toString, Dispatch_section) { |
| ompt_data_t DI{.ptr = (void *)0x33}; |
| internal::Dispatch D{/*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Kind=*/ompt_dispatch_t::ompt_dispatch_section, |
| /*Instance=*/DI}; |
| |
| EXPECT_EQ(D.toString(), "OMPT Callback Dispatch: parallel_data=0x11 " |
| "task_data=0x22 kind=2 instance=[ptr=0x33]"); |
| } |
| |
| TEST(InternalEvent_toString, Dispatch_chunks) { |
| ompt_dispatch_chunk_t DC{.start = 7, .iterations = 31}; |
| ompt_data_t DI{.ptr = (void *)&DC}; |
| |
| internal::Dispatch DLoop{ |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Kind=*/ompt_dispatch_t::ompt_dispatch_ws_loop_chunk, |
| /*Instance=*/DI}; |
| |
| internal::Dispatch DTask{ |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Kind=*/ompt_dispatch_t::ompt_dispatch_taskloop_chunk, |
| /*Instance=*/DI}; |
| |
| internal::Dispatch DDist{ |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Kind=*/ompt_dispatch_t::ompt_dispatch_distribute_chunk, |
| /*Instance=*/DI}; |
| |
| ompt_data_t DINull{.ptr = nullptr}; |
| internal::Dispatch DDistNull{ |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*Kind=*/ompt_dispatch_t::ompt_dispatch_distribute_chunk, |
| /*Instance=*/DINull}; |
| |
| EXPECT_EQ(DLoop.toString(), |
| "OMPT Callback Dispatch: parallel_data=0x11 " |
| "task_data=0x22 kind=3 instance=[chunk=(start=7, iterations=31)]"); |
| |
| EXPECT_EQ(DTask.toString(), |
| "OMPT Callback Dispatch: parallel_data=0x11 " |
| "task_data=0x22 kind=4 instance=[chunk=(start=7, iterations=31)]"); |
| |
| EXPECT_EQ(DDist.toString(), |
| "OMPT Callback Dispatch: parallel_data=0x11 " |
| "task_data=0x22 kind=5 instance=[chunk=(start=7, iterations=31)]"); |
| |
| EXPECT_EQ(DDistNull.toString(), "OMPT Callback Dispatch: parallel_data=0x11 " |
| "task_data=0x22 kind=5"); |
| } |
| |
| TEST(InternalEvent_toString, TaskCreate) { |
| internal::TaskCreate TC{/*EncounteringTaskData=*/(ompt_data_t *)0x11, |
| /*EncounteringTaskFrame=*/(const ompt_frame_t *)0x22, |
| /*NewTaskData=*/(ompt_data_t *)0x33, |
| /*Flags=*/7, |
| /*HasDependences=*/31, |
| /*CodeptrRA=*/(const void *)0x44}; |
| |
| EXPECT_EQ(TC.toString(), |
| "OMPT Callback TaskCreate: encountering_task_data=0x11 " |
| "encountering_task_frame=0x22 new_task_data=0x33 flags=7 " |
| "has_dependences=31 codeptr=0x44"); |
| } |
| |
| TEST(InternalEvent_toString, ImplicitTask) { |
| internal::ImplicitTask IT{ |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*ActualParallelism=*/7, |
| /*Index=*/31, |
| /*Flags=*/127}; |
| |
| EXPECT_EQ(IT.toString(), |
| "OMPT Callback ImplicitTask: endpoint=1 parallel_data=0x11 " |
| "task_data=0x22 actual_parallelism=7 index=31 flags=127"); |
| } |
| |
| TEST(InternalEvent_toString, SyncRegion) { |
| internal::SyncRegion SR{ |
| /*Kind=*/ompt_sync_region_t::ompt_sync_region_taskwait, |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_end, |
| /*ParallelData=*/(ompt_data_t *)0x11, |
| /*TaskData=*/(ompt_data_t *)0x22, |
| /*CodeptrRA=*/(const void *)0x33}; |
| |
| EXPECT_EQ(SR.toString(), "OMPT Callback SyncRegion: kind=5 endpoint=2 " |
| "parallel_data=0x11 task_data=0x22 codeptr=0x33"); |
| } |
| |
| TEST(InternalEvent_toString, Target) { |
| internal::Target T{/*Kind=*/ompt_target_t::ompt_target_enter_data_nowait, |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_end, |
| /*DeviceNum=*/7, |
| /*TaskData=*/(ompt_data_t *)0x11, |
| /*TargetId=*/(ompt_id_t)31, |
| /*CodeptrRA=*/(const void *)0x22}; |
| |
| EXPECT_EQ(T.toString(), "Callback Target: target_id=31 kind=10 " |
| "endpoint=2 device_num=7 code=0x22"); |
| } |
| |
| TEST(InternalEvent_toString, TargetEmi) { |
| ompt_data_t TaskData{.value = 31}; |
| ompt_data_t TargetTaskData{.value = 127}; |
| ompt_data_t TargetData{.value = 8191}; |
| |
| internal::TargetEmi T{/*Kind=*/ompt_target_t::ompt_target_update, |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*DeviceNum=*/7, |
| /*TaskData=*/(ompt_data_t *)&TaskData, |
| /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData, |
| /*TargetData=*/(ompt_data_t *)&TargetData, |
| /*CodeptrRA=*/(const void *)0x11}; |
| |
| internal::TargetEmi TDataNull{ |
| /*Kind=*/ompt_target_t::ompt_target_update, |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*DeviceNum=*/7, |
| /*TaskData=*/(ompt_data_t *)&TaskData, |
| /*TargetTaskData=*/(ompt_data_t *)nullptr, |
| /*TargetData=*/(ompt_data_t *)&TargetData, |
| /*CodeptrRA=*/(const void *)0x11}; |
| |
| std::ostringstream StreamT1; |
| std::ostringstream StreamT2; |
| std::string CallBackPrefix{ |
| "Callback Target EMI: kind=4 endpoint=1 device_num=7"}; |
| StreamT1 << CallBackPrefix << std::showbase << std::hex; |
| StreamT1 << " task_data=" << &TaskData << " (0x1f)"; |
| StreamT1 << " target_task_data=" << &TargetTaskData << " (0x7f)"; |
| StreamT1 << " target_data=" << &TargetData << " (0x1fff)"; |
| StreamT1 << " code=0x11"; |
| |
| StreamT2 << CallBackPrefix << std::showbase << std::hex; |
| StreamT2 << " task_data=" << &TaskData << " (0x1f)"; |
| StreamT2 << " target_task_data=(nil) (0x0)"; |
| StreamT2 << " target_data=" << &TargetData << " (0x1fff)"; |
| StreamT2 << " code=0x11"; |
| |
| EXPECT_EQ(T.toString(), StreamT1.str()); |
| EXPECT_EQ(TDataNull.toString(), StreamT2.str()); |
| } |
| |
| TEST(InternalEvent_toString, TargetDataOp) { |
| internal::TargetDataOp TDO{ |
| /*TargetId=*/7, |
| /*HostOpId=*/31, |
| /*OpType=*/ompt_target_data_op_t::ompt_target_data_associate, |
| /*SrcAddr=*/(void *)0x11, |
| /*SrcDeviceNum=*/127, |
| /*DstAddr=*/(void *)0x22, |
| /*DstDeviceNum=*/8191, |
| /*Bytes=*/4096, |
| /*CodeptrRA=*/(const void *)0x33}; |
| |
| EXPECT_EQ( |
| TDO.toString(), |
| " Callback DataOp: target_id=7 host_op_id=31 optype=5 src=0x11 " |
| "src_device_num=127 dest=0x22 dest_device_num=8191 bytes=4096 code=0x33"); |
| } |
| |
| TEST(InternalEvent_toString, TargetDataOpEmi) { |
| ompt_data_t TargetTaskData{.value = 31}; |
| ompt_data_t TargetData{.value = 127}; |
| ompt_id_t HostOpId = 8191; |
| |
| internal::TargetDataOpEmi TDO{ |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData, |
| /*TargetData=*/(ompt_data_t *)&TargetData, |
| /*HostOpId=*/(ompt_id_t *)&HostOpId, |
| /*OpType=*/ompt_target_data_op_t::ompt_target_data_disassociate, |
| /*SrcAddr=*/(void *)0x11, |
| /*SrcDeviceNum=*/1, |
| /*DstAddr=*/(void *)0x22, |
| /*DstDeviceNum=*/2, |
| /*Bytes=*/4096, |
| /*CodeptrRA=*/(const void *)0x33}; |
| |
| // Set HostOpId=nullptr |
| internal::TargetDataOpEmi TDO_HostOpIdNull{ |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*TargetTaskData=*/(ompt_data_t *)&TargetTaskData, |
| /*TargetData=*/(ompt_data_t *)&TargetData, |
| /*HostOpId=*/(ompt_id_t *)nullptr, |
| /*OpType=*/ompt_target_data_op_t::ompt_target_data_disassociate, |
| /*SrcAddr=*/(void *)0x11, |
| /*SrcDeviceNum=*/1, |
| /*DstAddr=*/(void *)0x22, |
| /*DstDeviceNum=*/2, |
| /*Bytes=*/4096, |
| /*CodeptrRA=*/(const void *)0x33}; |
| |
| std::ostringstream StreamTDO1; |
| std::ostringstream StreamTDO2; |
| std::string CallBackPrefix{" Callback DataOp EMI: endpoint=1 optype=6"}; |
| std::string CallBackSuffix{ |
| " src=0x11 src_device_num=1 dest=0x22 dest_device_num=2 " |
| "bytes=4096 code=0x33"}; |
| StreamTDO1 << CallBackPrefix << std::showbase << std::hex; |
| StreamTDO1 << " target_task_data=" << &TargetTaskData << " (0x1f)"; |
| StreamTDO1 << " target_data=" << &TargetData << " (0x7f)"; |
| StreamTDO1 << " host_op_id=" << &HostOpId << " (0x1fff)"; |
| StreamTDO1 << CallBackSuffix; |
| |
| StreamTDO2 << CallBackPrefix << std::showbase << std::hex; |
| StreamTDO2 << " target_task_data=" << &TargetTaskData << " (0x1f)"; |
| StreamTDO2 << " target_data=" << &TargetData << " (0x7f)"; |
| StreamTDO2 << " host_op_id=(nil) (0x0)"; |
| StreamTDO2 << CallBackSuffix; |
| |
| EXPECT_EQ(TDO.toString(), StreamTDO1.str()); |
| EXPECT_EQ(TDO_HostOpIdNull.toString(), StreamTDO2.str()); |
| } |
| |
| TEST(InternalEvent_toString, TargetSubmit) { |
| internal::TargetSubmit TS{/*TargetId=*/7, |
| /*HostOpId=*/31, |
| /*RequestedNumTeams=*/127}; |
| |
| EXPECT_EQ(TS.toString(), |
| " Callback Submit: target_id=7 host_op_id=31 req_num_teams=127"); |
| } |
| |
| TEST(InternalEvent_toString, TargetSubmitEmi) { |
| ompt_data_t TargetData{.value = 127}; |
| ompt_id_t HostOpId = 8191; |
| internal::TargetSubmitEmi TS{ |
| /*Endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*TargetData=*/(ompt_data_t *)&TargetData, |
| /*HostOpId=*/(ompt_id_t *)&HostOpId, |
| /*RequestedNumTeams=*/7}; |
| |
| std::ostringstream StreamTS; |
| std::string CallBackPrefix{ |
| " Callback Submit EMI: endpoint=1 req_num_teams=7"}; |
| StreamTS << CallBackPrefix << std::showbase << std::hex; |
| StreamTS << " target_data=" << &TargetData << " (0x7f)"; |
| StreamTS << " host_op_id=" << &HostOpId << " (0x1fff)"; |
| |
| EXPECT_EQ(TS.toString(), StreamTS.str()); |
| } |
| |
| TEST(InternalEvent_toString, DeviceInitialize) { |
| const char *Type = "DeviceType"; |
| const char *DocStr = "DocumentationString"; |
| |
| internal::DeviceInitialize DI{/*DeviceNum=*/7, |
| /*Type=*/Type, |
| /*Device=*/(ompt_device_t *)0x11, |
| /*LookupFn=*/(ompt_function_lookup_t)0x22, |
| /*DocStr=*/DocStr}; |
| |
| internal::DeviceInitialize DINull{/*DeviceNum=*/0, |
| /*Type=*/nullptr, |
| /*Device=*/nullptr, |
| /*LookupFn=*/(ompt_function_lookup_t)0x0, |
| /*DocStr=*/nullptr}; |
| |
| std::ostringstream StreamDI; |
| std::string CallBackPrefix{"Callback Init: device_num=7 type=DeviceType " |
| "device=0x11 lookup=0x22 doc="}; |
| StreamDI << CallBackPrefix << std::showbase << std::hex; |
| StreamDI << (uint64_t)DocStr; |
| EXPECT_EQ(DI.toString(), StreamDI.str()); |
| |
| // TODO This looks inconsistent: (null) vs. (nil) |
| EXPECT_EQ(DINull.toString(), "Callback Init: device_num=0 type=(null) " |
| "device=(nil) lookup=(nil) doc=(nil)"); |
| } |
| |
| TEST(InternalEvent_toString, DeviceFinalize) { |
| internal::DeviceFinalize DF{/*DeviceNum=*/7}; |
| |
| EXPECT_EQ(DF.toString(), "Callback Fini: device_num=7"); |
| } |
| |
| TEST(InternalEvent_toString, DeviceLoad) { |
| const char *Filename = "FilenameToLoad"; |
| |
| internal::DeviceLoad DL{/*DeviceNum=*/7, |
| /*Filename=*/Filename, |
| /*OffsetInFile=*/31, |
| /*VmaInFile=*/(void *)0x11, |
| /*Bytes=*/127, |
| /*HostAddr=*/(void *)0x22, |
| /*DeviceAddr=*/(void *)0x33, |
| /*ModuleId=*/8191}; |
| |
| internal::DeviceLoad DLNull{/*DeviceNum=*/0, |
| /*Filename=*/nullptr, |
| /*OffsetInFile=*/0, |
| /*VmaInFile=*/nullptr, |
| /*Bytes=*/0, |
| /*HostAddr=*/nullptr, |
| /*DeviceAddr=*/nullptr, |
| /*ModuleId=*/0}; |
| |
| EXPECT_EQ( |
| DL.toString(), |
| "Callback Load: device_num:7 module_id:8191 " |
| "filename:FilenameToLoad host_addr:0x22 device_addr:0x33 bytes:127"); |
| |
| // TODO This looks inconsistent: (null) vs. (nil) and ':' instead of '=' |
| EXPECT_EQ(DLNull.toString(), |
| "Callback Load: device_num:0 module_id:0 filename:(null) " |
| "host_addr:(nil) device_addr:(nil) bytes:0"); |
| } |
| |
| TEST(InternalEvent_toString, BufferRequest) { |
| size_t Bytes = 7; |
| ompt_buffer_t *Buffer = (void *)0x11; |
| |
| internal::BufferRequest BR{/*DeviceNum=*/31, |
| /*Buffer=*/&Buffer, |
| /*Bytes=*/&Bytes}; |
| |
| internal::BufferRequest BRNull{/*DeviceNum=*/127, |
| /*Buffer=*/nullptr, |
| /*Bytes=*/nullptr}; |
| |
| EXPECT_EQ(BR.toString(), |
| "Allocated 7 bytes at 0x11 in buffer request callback"); |
| EXPECT_EQ(BRNull.toString(), |
| "Allocated 0 bytes at (nil) in buffer request callback"); |
| } |
| |
| TEST(InternalEvent_toString, BufferComplete) { |
| ompt_buffer_t *Buffer = (void *)0x11; |
| |
| internal::BufferComplete BC{/*DeviceNum=*/7, |
| /*Buffer=*/Buffer, |
| /*Bytes=*/127, |
| /*Begin=*/8191, |
| /*BufferOwned=*/1}; |
| |
| internal::BufferComplete BCNull{/*DeviceNum=*/0, |
| /*Buffer=*/nullptr, |
| /*Bytes=*/0, |
| /*Begin=*/0, |
| /*BufferOwned=*/0}; |
| |
| EXPECT_EQ(BC.toString(), |
| "Executing buffer complete callback: 7 0x11 127 0x1fff 1"); |
| EXPECT_EQ(BCNull.toString(), |
| "Executing buffer complete callback: 0 (nil) 0 (nil) 0"); |
| } |
| |
| TEST(InternalEvent_toString, BufferRecordInvalid) { |
| ompt_record_ompt_t InvalidRecord{ |
| /*type=*/ompt_callbacks_t::ompt_callback_parallel_begin, |
| /*time=*/7, |
| /*thread_id=*/31, |
| /*target_id=*/127, |
| /*record=*/{.parallel_begin = {}}}; |
| |
| internal::BufferRecord BRNull{/*RecordPtr=*/nullptr}; |
| internal::BufferRecord BRInvalid{/*RecordPtr=*/&InvalidRecord}; |
| |
| std::ostringstream StreamBRInvalid; |
| StreamBRInvalid << "rec=" << std::showbase << std::hex << &InvalidRecord; |
| StreamBRInvalid << " type=3 (unsupported record type)"; |
| |
| EXPECT_EQ(BRNull.toString(), "rec=(nil) type=0 (unsupported record type)"); |
| EXPECT_EQ(BRInvalid.toString(), StreamBRInvalid.str()); |
| } |
| |
| TEST(InternalEvent_toString, BufferRecordTarget) { |
| ompt_record_target_t SubRecordTarget{ |
| /*kind=*/ompt_target_t::ompt_target_update, |
| /*endpoint=*/ompt_scope_endpoint_t::ompt_scope_begin, |
| /*device_num=*/2, |
| /*task_id=*/127, |
| /*target_id=*/31, |
| /*codeptr_ra=*/(const void *)0x11}; |
| |
| ompt_record_ompt_t TargetRecord{ |
| /*type=*/ompt_callbacks_t::ompt_callback_target, |
| /*time=*/7, |
| /*thread_id=*/29, |
| /*target_id=*/31, |
| /*record*/ {.target = SubRecordTarget}}; |
| |
| internal::BufferRecord BR{/*RecordPtr=*/&TargetRecord}; |
| |
| std::ostringstream StreamBR; |
| StreamBR << "rec=" << std::showbase << std::hex << &TargetRecord; |
| StreamBR << " type=8 (Target task) time=7 thread_id=29 target_id=31 kind=4"; |
| StreamBR << " endpoint=1 device=2 task_id=127 codeptr=0x11"; |
| |
| EXPECT_EQ(BR.toString(), StreamBR.str()); |
| } |
| |
| TEST(InternalEvent_toString, BufferRecordDataOp) { |
| ompt_record_target_data_op_t SubRecordTargetDataOp{ |
| /*host_op_id=*/7, |
| /*optype=*/ompt_target_data_op_t::ompt_target_data_alloc_async, |
| /*src_addr=*/(void *)0x11, |
| /*src_device_num=*/1, |
| /*dest_addr=*/(void *)0x22, |
| /*dest_device_num=*/2, |
| /*bytes=*/127, |
| /*end_time=*/128, |
| /*codeptr_ra=*/(const void *)0x33, |
| }; |
| |
| ompt_record_ompt_t DataOpRecord{ |
| /*type=*/ompt_callbacks_t::ompt_callback_target_data_op_emi, |
| /*time=*/8, |
| /*thread_id=*/3, |
| /*target_id=*/5, |
| /*record=*/{.target_data_op = SubRecordTargetDataOp}}; |
| |
| internal::BufferRecord BR{/*RecordPtr=*/&DataOpRecord}; |
| |
| std::ostringstream StreamBR; |
| StreamBR << "rec=" << std::showbase << std::hex << &DataOpRecord; |
| StreamBR << " type=34 (Target data op) time=8 thread_id=3 target_id=5"; |
| StreamBR << " host_op_id=7 optype=17 src_addr=0x11 src_device=1"; |
| StreamBR << " dest_addr=0x22 dest_device=2 bytes=127 end_time=128"; |
| StreamBR << " duration=120 ns codeptr=0x33"; |
| |
| EXPECT_EQ(BR.toString(), StreamBR.str()); |
| } |
| |
| TEST(InternalEvent_toString, BufferRecordKernel) { |
| ompt_record_target_kernel_t SubRecordTargetKernel{ |
| /*host_op_id=*/11, |
| /*requested_num_teams=*/127, |
| /*granted_num_teams=*/63, |
| /*end_time=*/8191, |
| }; |
| |
| ompt_record_ompt_t KernelRecord{ |
| /*type=*/ompt_callbacks_t::ompt_callback_target_submit_emi, |
| /*time=*/9, |
| /*thread_id=*/19, |
| /*target_id=*/33, |
| /*record=*/{.target_kernel = SubRecordTargetKernel}}; |
| |
| internal::BufferRecord BR{/*RecordPtr=*/&KernelRecord}; |
| |
| std::ostringstream StreamBR; |
| StreamBR << "rec=" << std::showbase << std::hex << &KernelRecord; |
| StreamBR << " type=35 (Target kernel) time=9 thread_id=19 target_id=33"; |
| StreamBR << " host_op_id=11 requested_num_teams=127 granted_num_teams=63"; |
| StreamBR << " end_time=8191 duration=8182 ns"; |
| |
| EXPECT_EQ(BR.toString(), StreamBR.str()); |
| } |
| |
| TEST(InternalEvent_toString, BufferRecordDeallocation) { |
| internal::BufferRecordDeallocation BRD{/*Buffer=*/(ompt_record_ompt_t *)0x11}; |
| internal::BufferRecordDeallocation BRDNull{/*Buffer=*/nullptr}; |
| |
| EXPECT_EQ(BRD.toString(), "Deallocated 0x11"); |
| EXPECT_EQ(BRDNull.toString(), "Deallocated (nil)"); |
| } |