287 lines · cpp
1//===- InternalEventOperators.cpp - Operator implementations ----*- 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/// Defines the internal event operators, like comparators.11///12//===----------------------------------------------------------------------===//13 14#include "InternalEvent.h"15 16namespace omptest {17 18namespace internal {19 20bool operator==(const ParallelBegin &Expected, const ParallelBegin &Observed) {21 return Expected.NumThreads == Observed.NumThreads;22}23 24bool operator==(const Work &Expected, const Work &Observed) {25 bool isSameWorkType = (Expected.WorkType == Observed.WorkType);26 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);27 bool isSameParallelData =28 (Expected.ParallelData == std::numeric_limits<ompt_data_t *>::min()) ||29 (Expected.ParallelData == Observed.ParallelData);30 bool isSameTaskData =31 (Expected.TaskData == std::numeric_limits<ompt_data_t *>::min()) ||32 (Expected.TaskData == Observed.TaskData);33 bool isSameCount = (Expected.Count == std::numeric_limits<uint64_t>::min()) ||34 (Expected.Count == Observed.Count);35 return isSameWorkType && isSameEndpoint && isSameParallelData &&36 isSameTaskData && isSameCount;37}38 39bool operator==(const Dispatch &Expected, const Dispatch &Observed) {40 bool isSameKind = (Expected.Kind == Observed.Kind);41 return isSameKind;42}43 44bool operator==(const ImplicitTask &Expected, const ImplicitTask &Observed) {45 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);46 bool isSameActualParallelism =47 (Expected.ActualParallelism ==48 std::numeric_limits<unsigned int>::min()) ||49 (Expected.ActualParallelism == Observed.ActualParallelism);50 bool isSameIndex =51 (Expected.Index == std::numeric_limits<unsigned int>::min()) ||52 (Expected.Index == Observed.Index);53 return isSameEndpoint && isSameActualParallelism && isSameIndex;54}55 56bool operator==(const SyncRegion &Expected, const SyncRegion &Observed) {57 bool isSameKind = (Expected.Kind == Observed.Kind);58 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);59 bool isSameParallelData =60 (Expected.ParallelData == std::numeric_limits<ompt_data_t *>::min()) ||61 (Expected.ParallelData == Observed.ParallelData);62 bool isSameTaskData =63 (Expected.TaskData == std::numeric_limits<ompt_data_t *>::min()) ||64 (Expected.TaskData == Observed.TaskData);65 return isSameKind && isSameEndpoint && isSameParallelData && isSameTaskData;66}67 68bool operator==(const Target &Expected, const Target &Observed) {69 bool isSameKind = (Expected.Kind == Observed.Kind);70 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);71 bool isSameDeviceNum =72 (Expected.DeviceNum == std::numeric_limits<int>::min()) ||73 (Expected.DeviceNum == Observed.DeviceNum);74 return isSameKind && isSameEndpoint && isSameDeviceNum;75}76 77bool operator==(const TargetEmi &Expected, const TargetEmi &Observed) {78 bool isSameKind = (Expected.Kind == Observed.Kind);79 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);80 bool isSameDeviceNum =81 (Expected.DeviceNum == std::numeric_limits<int>::min()) ||82 (Expected.DeviceNum == Observed.DeviceNum);83 return isSameKind && isSameEndpoint && isSameDeviceNum;84}85 86bool operator==(const TargetDataOp &Expected, const TargetDataOp &Observed) {87 bool isSameOpType = (Expected.OpType == Observed.OpType);88 bool isSameSize = (Expected.Bytes == std::numeric_limits<size_t>::min()) ||89 (Expected.Bytes == Observed.Bytes);90 bool isSameSrcAddr =91 (Expected.SrcAddr == std::numeric_limits<void *>::min()) ||92 (Expected.SrcAddr == Observed.SrcAddr);93 bool isSameDstAddr =94 (Expected.DstAddr == std::numeric_limits<void *>::min()) ||95 (Expected.DstAddr == Observed.DstAddr);96 bool isSameSrcDeviceNum =97 (Expected.SrcDeviceNum == std::numeric_limits<int>::min()) ||98 (Expected.SrcDeviceNum == Observed.SrcDeviceNum);99 bool isSameDstDeviceNum =100 (Expected.DstDeviceNum == std::numeric_limits<int>::min()) ||101 (Expected.DstDeviceNum == Observed.DstDeviceNum);102 return isSameOpType && isSameSize && isSameSrcAddr && isSameDstAddr &&103 isSameSrcDeviceNum && isSameDstDeviceNum;104}105 106bool operator==(const TargetDataOpEmi &Expected,107 const TargetDataOpEmi &Observed) {108 bool isSameOpType = (Expected.OpType == Observed.OpType);109 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);110 bool isSameSize = (Expected.Bytes == std::numeric_limits<size_t>::min()) ||111 (Expected.Bytes == Observed.Bytes);112 bool isSameSrcAddr =113 (Expected.SrcAddr == std::numeric_limits<void *>::min()) ||114 (Expected.SrcAddr == Observed.SrcAddr);115 bool isSameDstAddr =116 (Expected.DstAddr == std::numeric_limits<void *>::min()) ||117 (Expected.DstAddr == Observed.DstAddr);118 bool isSameSrcDeviceNum =119 (Expected.SrcDeviceNum == std::numeric_limits<int>::min()) ||120 (Expected.SrcDeviceNum == Observed.SrcDeviceNum);121 bool isSameDstDeviceNum =122 (Expected.DstDeviceNum == std::numeric_limits<int>::min()) ||123 (Expected.DstDeviceNum == Observed.DstDeviceNum);124 return isSameOpType && isSameEndpoint && isSameSize && isSameSrcAddr &&125 isSameDstAddr && isSameSrcDeviceNum && isSameDstDeviceNum;126}127 128bool operator==(const TargetSubmit &Expected, const TargetSubmit &Observed) {129 bool isSameReqNumTeams =130 (Expected.RequestedNumTeams == Observed.RequestedNumTeams);131 return isSameReqNumTeams;132}133 134bool operator==(const TargetSubmitEmi &Expected,135 const TargetSubmitEmi &Observed) {136 bool isSameReqNumTeams =137 (Expected.RequestedNumTeams == Observed.RequestedNumTeams);138 bool isSameEndpoint = (Expected.Endpoint == Observed.Endpoint);139 return isSameReqNumTeams && isSameEndpoint;140}141 142bool operator==(const DeviceInitialize &Expected,143 const DeviceInitialize &Observed) {144 bool isSameDeviceNum = (Expected.DeviceNum == Observed.DeviceNum);145 bool isSameType =146 (Expected.Type == std::numeric_limits<const char *>::min()) ||147 ((Expected.Type == Observed.Type) ||148 (strcmp(Expected.Type, Observed.Type) == 0));149 bool isSameDevice =150 (Expected.Device == std::numeric_limits<ompt_device_t *>::min()) ||151 (Expected.Device == Observed.Device);152 return isSameDeviceNum && isSameType && isSameDevice;153}154 155bool operator==(const DeviceFinalize &Expected,156 const DeviceFinalize &Observed) {157 bool isSameDeviceNum =158 (Expected.DeviceNum == std::numeric_limits<int>::min()) ||159 (Expected.DeviceNum == Observed.DeviceNum);160 return isSameDeviceNum;161}162 163bool operator==(const DeviceLoad &Expected, const DeviceLoad &Observed) {164 bool isSameDeviceNum =165 (Expected.DeviceNum == std::numeric_limits<int>::min()) ||166 (Expected.DeviceNum == Observed.DeviceNum);167 bool isSameSize = (Expected.Bytes == std::numeric_limits<size_t>::min()) ||168 (Expected.Bytes == Observed.Bytes);169 return isSameDeviceNum && isSameSize;170}171 172bool operator==(const BufferRequest &Expected, const BufferRequest &Observed) {173 bool isSameDeviceNum =174 (Expected.DeviceNum == std::numeric_limits<int>::min()) ||175 (Expected.DeviceNum == Observed.DeviceNum);176 bool isSameSize = (Expected.Bytes == std::numeric_limits<size_t *>::min()) ||177 (Expected.Bytes == Observed.Bytes);178 return isSameDeviceNum && isSameSize;179}180 181bool operator==(const BufferComplete &Expected,182 const BufferComplete &Observed) {183 bool isSameDeviceNum =184 (Expected.DeviceNum == std::numeric_limits<int>::min()) ||185 (Expected.DeviceNum == Observed.DeviceNum);186 bool isSameSize = (Expected.Bytes == std::numeric_limits<size_t>::min()) ||187 (Expected.Bytes == Observed.Bytes);188 return isSameDeviceNum && isSameSize;189}190 191bool operator==(const BufferRecord &Expected, const BufferRecord &Observed) {192 bool isSameType = (Expected.Record.type == Observed.Record.type);193 bool isSameTargetId =194 (Expected.Record.target_id == std::numeric_limits<ompt_id_t>::min()) ||195 (Expected.Record.target_id == Observed.Record.target_id);196 if (!(isSameType && isSameTargetId))197 return false;198 bool isEqual = true;199 ompt_device_time_t ObservedDurationNs =200 Observed.Record.record.target_data_op.end_time - Observed.Record.time;201 switch (Expected.Record.type) {202 case ompt_callback_target:203 isEqual &= (Expected.Record.record.target.kind ==204 std::numeric_limits<ompt_target_t>::min()) ||205 (Expected.Record.record.target.kind ==206 Observed.Record.record.target.kind);207 isEqual &= (Expected.Record.record.target.endpoint ==208 std::numeric_limits<ompt_scope_endpoint_t>::min()) ||209 (Expected.Record.record.target.endpoint ==210 Observed.Record.record.target.endpoint);211 isEqual &= (Expected.Record.record.target.device_num ==212 std::numeric_limits<int>::min()) ||213 (Expected.Record.record.target.device_num ==214 Observed.Record.record.target.device_num);215 break;216 case ompt_callback_target_data_op:217 isEqual &= (Expected.Record.record.target_data_op.optype ==218 std::numeric_limits<ompt_target_data_op_t>::min()) ||219 (Expected.Record.record.target_data_op.optype ==220 Observed.Record.record.target_data_op.optype);221 isEqual &= (Expected.Record.record.target_data_op.bytes ==222 std::numeric_limits<size_t>::min()) ||223 (Expected.Record.record.target_data_op.bytes ==224 Observed.Record.record.target_data_op.bytes);225 isEqual &= (Expected.Record.record.target_data_op.src_addr ==226 std::numeric_limits<void *>::min()) ||227 (Expected.Record.record.target_data_op.src_addr ==228 Observed.Record.record.target_data_op.src_addr);229 isEqual &= (Expected.Record.record.target_data_op.dest_addr ==230 std::numeric_limits<void *>::min()) ||231 (Expected.Record.record.target_data_op.dest_addr ==232 Observed.Record.record.target_data_op.dest_addr);233 isEqual &= (Expected.Record.record.target_data_op.src_device_num ==234 std::numeric_limits<int>::min()) ||235 (Expected.Record.record.target_data_op.src_device_num ==236 Observed.Record.record.target_data_op.src_device_num);237 isEqual &= (Expected.Record.record.target_data_op.dest_device_num ==238 std::numeric_limits<int>::min()) ||239 (Expected.Record.record.target_data_op.dest_device_num ==240 Observed.Record.record.target_data_op.dest_device_num);241 isEqual &= (Expected.Record.record.target_data_op.host_op_id ==242 std::numeric_limits<ompt_id_t>::min()) ||243 (Expected.Record.record.target_data_op.host_op_id ==244 Observed.Record.record.target_data_op.host_op_id);245 isEqual &= (Expected.Record.record.target_data_op.codeptr_ra ==246 std::numeric_limits<void *>::min()) ||247 (Expected.Record.record.target_data_op.codeptr_ra ==248 Observed.Record.record.target_data_op.codeptr_ra);249 if (Expected.Record.record.target_data_op.end_time !=250 std::numeric_limits<ompt_device_time_t>::min()) {251 isEqual &=252 ObservedDurationNs <= Expected.Record.record.target_data_op.end_time;253 }254 isEqual &= ObservedDurationNs >= Expected.Record.time;255 break;256 case ompt_callback_target_submit:257 ObservedDurationNs =258 Observed.Record.record.target_kernel.end_time - Observed.Record.time;259 isEqual &= (Expected.Record.record.target_kernel.requested_num_teams ==260 std::numeric_limits<unsigned int>::min()) ||261 (Expected.Record.record.target_kernel.requested_num_teams ==262 Observed.Record.record.target_kernel.requested_num_teams);263 isEqual &= (Expected.Record.record.target_kernel.granted_num_teams ==264 std::numeric_limits<unsigned int>::min()) ||265 (Expected.Record.record.target_kernel.granted_num_teams ==266 Observed.Record.record.target_kernel.granted_num_teams);267 isEqual &= (Expected.Record.record.target_kernel.host_op_id ==268 std::numeric_limits<ompt_id_t>::min()) ||269 (Expected.Record.record.target_kernel.host_op_id ==270 Observed.Record.record.target_kernel.host_op_id);271 if (Expected.Record.record.target_kernel.end_time !=272 std::numeric_limits<ompt_device_time_t>::min()) {273 isEqual &=274 ObservedDurationNs <= Expected.Record.record.target_kernel.end_time;275 }276 isEqual &= ObservedDurationNs >= Expected.Record.time;277 break;278 default:279 assert(false && "Encountered invalid record type");280 }281 return isEqual;282}283 284} // namespace internal285 286} // namespace omptest287