brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.9 KiB · dde6409 Raw
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