438 lines · c
1//===- InternalEvent.h - Internal event representation ----------*- C++ -*-===//2//3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.4// See https://llvm.org/LICENSE.txt for license information.5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception6//7//===----------------------------------------------------------------------===//8///9/// \file10/// Declares internal event representations along the default CTOR definition.11///12//===----------------------------------------------------------------------===//13 14#ifndef OPENMP_TOOLS_OMPTEST_INCLUDE_INTERNALEVENT_H15#define OPENMP_TOOLS_OMPTEST_INCLUDE_INTERNALEVENT_H16 17#include "InternalEventCommon.h"18 19#include <cstring>20#include <limits>21#include <omp-tools.h>22 23#define expectedDefault(TypeName) std::numeric_limits<TypeName>::min()24 25namespace omptest {26 27namespace util {28 29/// String manipulation helper function. Takes up to 8 bytes of data and returns30/// their hexadecimal representation as string. The data can be expanded to the31/// given size in bytes and will by default be prefixed with '0x'.32std::string makeHexString(uint64_t Data, bool IsPointer = true,33 size_t DataBytes = 0, bool ShowHexBase = true);34 35} // namespace util36 37namespace internal {38struct AssertionSyncPoint : public EventBase<AssertionSyncPoint> {39 std::string toString() const override;40 AssertionSyncPoint(const std::string &Name) : Name(Name) {}41 const std::string Name;42};43 44struct AssertionSuspend : public EventBase<AssertionSuspend> {45 AssertionSuspend() = default;46};47 48struct ThreadBegin : public EventBase<ThreadBegin> {49 std::string toString() const override;50 ThreadBegin(ompt_thread_t ThreadType) : ThreadType(ThreadType) {}51 ompt_thread_t ThreadType;52};53 54struct ThreadEnd : public EventBase<ThreadEnd> {55 std::string toString() const override;56 ThreadEnd() = default;57};58 59struct ParallelBegin : public EventBase<ParallelBegin> {60 std::string toString() const override;61 ParallelBegin(int NumThreads) : NumThreads(NumThreads) {}62 unsigned int NumThreads;63};64 65struct ParallelEnd : public EventBase<ParallelEnd> {66 std::string toString() const override;67 ParallelEnd(ompt_data_t *ParallelData, ompt_data_t *EncounteringTaskData,68 int Flags, const void *CodeptrRA)69 : ParallelData(ParallelData), EncounteringTaskData(EncounteringTaskData),70 Flags(Flags), CodeptrRA(CodeptrRA) {}71 ompt_data_t *ParallelData;72 ompt_data_t *EncounteringTaskData;73 int Flags;74 const void *CodeptrRA;75};76 77struct Work : public EventBase<Work> {78 std::string toString() const override;79 Work(ompt_work_t WorkType, ompt_scope_endpoint_t Endpoint,80 ompt_data_t *ParallelData, ompt_data_t *TaskData, uint64_t Count,81 const void *CodeptrRA)82 : WorkType(WorkType), Endpoint(Endpoint), ParallelData(ParallelData),83 TaskData(TaskData), Count(Count), CodeptrRA(CodeptrRA) {}84 ompt_work_t WorkType;85 ompt_scope_endpoint_t Endpoint;86 ompt_data_t *ParallelData;87 ompt_data_t *TaskData;88 uint64_t Count;89 const void *CodeptrRA;90};91 92struct Dispatch : public EventBase<Dispatch> {93 std::string toString() const override;94 Dispatch(ompt_data_t *ParallelData, ompt_data_t *TaskData,95 ompt_dispatch_t Kind, ompt_data_t Instance)96 : ParallelData(ParallelData), TaskData(TaskData), Kind(Kind),97 Instance(Instance) {}98 ompt_data_t *ParallelData;99 ompt_data_t *TaskData;100 ompt_dispatch_t Kind;101 ompt_data_t Instance;102};103 104struct TaskCreate : public EventBase<TaskCreate> {105 std::string toString() const override;106 TaskCreate(ompt_data_t *EncounteringTaskData,107 const ompt_frame_t *EncounteringTaskFrame,108 ompt_data_t *NewTaskData, int Flags, int HasDependences,109 const void *CodeptrRA)110 : EncounteringTaskData(EncounteringTaskData),111 EncounteringTaskFrame(EncounteringTaskFrame), NewTaskData(NewTaskData),112 Flags(Flags), HasDependences(HasDependences), CodeptrRA(CodeptrRA) {}113 ompt_data_t *EncounteringTaskData;114 const ompt_frame_t *EncounteringTaskFrame;115 ompt_data_t *NewTaskData;116 int Flags;117 int HasDependences;118 const void *CodeptrRA;119};120 121struct Dependences : public EventBase<Dependences> {122 Dependences() = default;123};124 125struct TaskDependence : public EventBase<TaskDependence> {126 TaskDependence() = default;127};128 129struct TaskSchedule : public EventBase<TaskSchedule> {130 TaskSchedule() = default;131};132 133struct ImplicitTask : public EventBase<ImplicitTask> {134 std::string toString() const override;135 ImplicitTask(ompt_scope_endpoint_t Endpoint, ompt_data_t *ParallelData,136 ompt_data_t *TaskData, unsigned int ActualParallelism,137 unsigned int Index, int Flags)138 : Endpoint(Endpoint), ParallelData(ParallelData), TaskData(TaskData),139 ActualParallelism(ActualParallelism), Index(Index), Flags(Flags) {}140 ompt_scope_endpoint_t Endpoint;141 ompt_data_t *ParallelData;142 ompt_data_t *TaskData;143 unsigned int ActualParallelism;144 unsigned int Index;145 int Flags;146};147 148struct Masked : public EventBase<Masked> {149 Masked() = default;150};151 152struct SyncRegion : public EventBase<SyncRegion> {153 std::string toString() const override;154 SyncRegion(ompt_sync_region_t Kind, ompt_scope_endpoint_t Endpoint,155 ompt_data_t *ParallelData, ompt_data_t *TaskData,156 const void *CodeptrRA)157 : Kind(Kind), Endpoint(Endpoint), ParallelData(ParallelData),158 TaskData(TaskData), CodeptrRA(CodeptrRA) {}159 ompt_sync_region_t Kind;160 ompt_scope_endpoint_t Endpoint;161 ompt_data_t *ParallelData;162 ompt_data_t *TaskData;163 const void *CodeptrRA;164};165 166struct MutexAcquire : public EventBase<MutexAcquire> {167 MutexAcquire() = default;168};169 170struct Mutex : public EventBase<Mutex> {171 Mutex() = default;172};173 174struct NestLock : public EventBase<NestLock> {175 NestLock() = default;176};177 178struct Flush : public EventBase<Flush> {179 Flush() = default;180};181 182struct Cancel : public EventBase<Cancel> {183 Cancel() = default;184};185 186struct Target : public EventBase<Target> {187 std::string toString() const override;188 Target(ompt_target_t Kind, ompt_scope_endpoint_t Endpoint, int DeviceNum,189 ompt_data_t *TaskData, ompt_id_t TargetId, const void *CodeptrRA)190 : Kind(Kind), Endpoint(Endpoint), DeviceNum(DeviceNum),191 TaskData(TaskData), TargetId(TargetId), CodeptrRA(CodeptrRA) {}192 ompt_target_t Kind;193 ompt_scope_endpoint_t Endpoint;194 int DeviceNum;195 ompt_data_t *TaskData;196 ompt_id_t TargetId;197 const void *CodeptrRA;198};199 200struct TargetEmi : public EventBase<TargetEmi> {201 std::string toString() const override;202 TargetEmi(ompt_target_t Kind, ompt_scope_endpoint_t Endpoint, int DeviceNum,203 ompt_data_t *TaskData, ompt_data_t *TargetTaskData,204 ompt_data_t *TargetData, const void *CodeptrRA)205 : Kind(Kind), Endpoint(Endpoint), DeviceNum(DeviceNum),206 TaskData(TaskData), TargetTaskData(TargetTaskData),207 TargetData(TargetData), CodeptrRA(CodeptrRA) {}208 ompt_target_t Kind;209 ompt_scope_endpoint_t Endpoint;210 int DeviceNum;211 ompt_data_t *TaskData;212 ompt_data_t *TargetTaskData;213 ompt_data_t *TargetData;214 const void *CodeptrRA;215};216 217struct TargetDataOp : public EventBase<TargetDataOp> {218 std::string toString() const override;219 TargetDataOp(ompt_id_t TargetId, ompt_id_t HostOpId,220 ompt_target_data_op_t OpType, void *SrcAddr, int SrcDeviceNum,221 void *DstAddr, int DstDeviceNum, size_t Bytes,222 const void *CodeptrRA)223 : TargetId(TargetId), HostOpId(HostOpId), OpType(OpType),224 SrcAddr(SrcAddr), SrcDeviceNum(SrcDeviceNum), DstAddr(DstAddr),225 DstDeviceNum(DstDeviceNum), Bytes(Bytes), CodeptrRA(CodeptrRA) {}226 ompt_id_t TargetId;227 ompt_id_t HostOpId;228 ompt_target_data_op_t OpType;229 void *SrcAddr;230 int SrcDeviceNum;231 void *DstAddr;232 int DstDeviceNum;233 size_t Bytes;234 const void *CodeptrRA;235};236 237struct TargetDataOpEmi : public EventBase<TargetDataOpEmi> {238 std::string toString() const override;239 TargetDataOpEmi(ompt_scope_endpoint_t Endpoint, ompt_data_t *TargetTaskData,240 ompt_data_t *TargetData, ompt_id_t *HostOpId,241 ompt_target_data_op_t OpType, void *SrcAddr, int SrcDeviceNum,242 void *DstAddr, int DstDeviceNum, size_t Bytes,243 const void *CodeptrRA)244 : Endpoint(Endpoint), TargetTaskData(TargetTaskData),245 TargetData(TargetData), HostOpId(HostOpId), OpType(OpType),246 SrcAddr(SrcAddr), SrcDeviceNum(SrcDeviceNum), DstAddr(DstAddr),247 DstDeviceNum(DstDeviceNum), Bytes(Bytes), CodeptrRA(CodeptrRA) {}248 ompt_scope_endpoint_t Endpoint;249 ompt_data_t *TargetTaskData;250 ompt_data_t *TargetData;251 ompt_id_t *HostOpId;252 ompt_target_data_op_t OpType;253 void *SrcAddr;254 int SrcDeviceNum;255 void *DstAddr;256 int DstDeviceNum;257 size_t Bytes;258 const void *CodeptrRA;259};260 261struct TargetSubmit : public EventBase<TargetSubmit> {262 std::string toString() const override;263 TargetSubmit(ompt_id_t TargetId, ompt_id_t HostOpId,264 unsigned int RequestedNumTeams)265 : TargetId(TargetId), HostOpId(HostOpId),266 RequestedNumTeams(RequestedNumTeams) {}267 ompt_id_t TargetId;268 ompt_id_t HostOpId;269 unsigned int RequestedNumTeams;270};271 272struct TargetSubmitEmi : public EventBase<TargetSubmitEmi> {273 std::string toString() const override;274 TargetSubmitEmi(ompt_scope_endpoint_t Endpoint, ompt_data_t *TargetData,275 ompt_id_t *HostOpId, unsigned int RequestedNumTeams)276 : Endpoint(Endpoint), TargetData(TargetData), HostOpId(HostOpId),277 RequestedNumTeams(RequestedNumTeams) {}278 ompt_scope_endpoint_t Endpoint;279 ompt_data_t *TargetData;280 ompt_id_t *HostOpId;281 unsigned int RequestedNumTeams;282};283 284struct ControlTool : public EventBase<ControlTool> {285 ControlTool() = default;286};287 288struct DeviceInitialize : public EventBase<DeviceInitialize> {289 std::string toString() const override;290 DeviceInitialize(int DeviceNum, const char *Type, ompt_device_t *Device,291 ompt_function_lookup_t LookupFn, const char *DocStr)292 : DeviceNum(DeviceNum), Type(Type), Device(Device), LookupFn(LookupFn),293 DocStr(DocStr) {}294 int DeviceNum;295 const char *Type;296 ompt_device_t *Device;297 ompt_function_lookup_t LookupFn;298 const char *DocStr;299};300 301struct DeviceFinalize : public EventBase<DeviceFinalize> {302 std::string toString() const override;303 DeviceFinalize(int DeviceNum) : DeviceNum(DeviceNum) {}304 int DeviceNum;305};306 307struct DeviceLoad : public EventBase<DeviceLoad> {308 std::string toString() const override;309 DeviceLoad(int DeviceNum, const char *Filename, int64_t OffsetInFile,310 void *VmaInFile, size_t Bytes, void *HostAddr, void *DeviceAddr,311 uint64_t ModuleId)312 : DeviceNum(DeviceNum), Filename(Filename), OffsetInFile(OffsetInFile),313 VmaInFile(VmaInFile), Bytes(Bytes), HostAddr(HostAddr),314 DeviceAddr(DeviceAddr), ModuleId(ModuleId) {}315 int DeviceNum;316 const char *Filename;317 int64_t OffsetInFile;318 void *VmaInFile;319 size_t Bytes;320 void *HostAddr;321 void *DeviceAddr;322 uint64_t ModuleId;323};324 325struct DeviceUnload : public EventBase<DeviceUnload> {326 DeviceUnload() = default;327};328 329struct BufferRequest : public EventBase<BufferRequest> {330 std::string toString() const override;331 BufferRequest(int DeviceNum, ompt_buffer_t **Buffer, size_t *Bytes)332 : DeviceNum(DeviceNum), Buffer(Buffer), Bytes(Bytes) {}333 int DeviceNum;334 ompt_buffer_t **Buffer;335 size_t *Bytes;336};337 338struct BufferComplete : public EventBase<BufferComplete> {339 std::string toString() const override;340 BufferComplete(int DeviceNum, ompt_buffer_t *Buffer, size_t Bytes,341 ompt_buffer_cursor_t Begin, int BufferOwned)342 : DeviceNum(DeviceNum), Buffer(Buffer), Bytes(Bytes), Begin(Begin),343 BufferOwned(BufferOwned) {}344 int DeviceNum;345 ompt_buffer_t *Buffer;346 size_t Bytes;347 ompt_buffer_cursor_t Begin;348 int BufferOwned;349};350 351struct BufferRecord : public EventBase<BufferRecord> {352 std::string toString() const override;353 BufferRecord(ompt_record_ompt_t *RecordPtr) : RecordPtr(RecordPtr) {354 if (RecordPtr != nullptr)355 Record = *RecordPtr;356 else357 memset(&Record, 0, sizeof(ompt_record_ompt_t));358 }359 ompt_record_ompt_t Record;360 ompt_record_ompt_t *RecordPtr;361};362 363struct BufferRecordDeallocation : public EventBase<BufferRecordDeallocation> {364 std::string toString() const override;365 BufferRecordDeallocation(ompt_buffer_t *Buffer) : Buffer(Buffer) {}366 ompt_buffer_t *Buffer;367};368 369// Add specialized event equality operators here.370// Note: Placement of these forward declarations is important as they need to371// take precedence over the following default equality operator definition.372bool operator==(const ParallelBegin &, const ParallelBegin &);373bool operator==(const Work &, const Work &);374bool operator==(const Dispatch &, const Dispatch &);375bool operator==(const ImplicitTask &, const ImplicitTask &);376bool operator==(const SyncRegion &, const SyncRegion &);377bool operator==(const Target &, const Target &);378bool operator==(const TargetEmi &, const TargetEmi &);379bool operator==(const TargetDataOp &, const TargetDataOp &);380bool operator==(const TargetDataOpEmi &, const TargetDataOpEmi &);381bool operator==(const TargetSubmit &, const TargetSubmit &);382bool operator==(const TargetSubmitEmi &, const TargetSubmitEmi &);383bool operator==(const DeviceInitialize &, const DeviceInitialize &);384bool operator==(const DeviceFinalize &, const DeviceFinalize &);385bool operator==(const DeviceLoad &, const DeviceLoad &);386bool operator==(const BufferRequest &, const BufferRequest &);387bool operator==(const BufferComplete &, const BufferComplete &);388bool operator==(const BufferRecord &, const BufferRecord &);389 390/// Default (fallback) event equality operator definition.391template <typename Event> bool operator==(const Event &, const Event &) {392 return true;393}394 395// clang-format off396event_type_trait(AssertionSyncPoint)397event_type_trait(AssertionSuspend)398event_type_trait(ThreadBegin)399event_type_trait(ThreadEnd)400event_type_trait(ParallelBegin)401event_type_trait(ParallelEnd)402event_type_trait(Work)403event_type_trait(Dispatch)404event_type_trait(TaskCreate)405event_type_trait(Dependences)406event_type_trait(TaskDependence)407event_type_trait(TaskSchedule)408event_type_trait(ImplicitTask)409event_type_trait(Masked)410event_type_trait(SyncRegion)411event_type_trait(MutexAcquire)412event_type_trait(Mutex)413event_type_trait(NestLock)414event_type_trait(Flush)415event_type_trait(Cancel)416event_type_trait(Target)417event_type_trait(TargetEmi)418event_type_trait(TargetDataOp)419event_type_trait(TargetDataOpEmi)420event_type_trait(TargetSubmit)421event_type_trait(TargetSubmitEmi)422event_type_trait(ControlTool)423event_type_trait(DeviceInitialize)424event_type_trait(DeviceFinalize)425event_type_trait(DeviceLoad)426event_type_trait(DeviceUnload)427event_type_trait(BufferRequest)428event_type_trait(BufferComplete)429event_type_trait(BufferRecord)430event_type_trait(BufferRecordDeallocation)431// clang-format on432 433} // namespace internal434 435} // namespace omptest436 437#endif438