LLVM OpenMP 22.0.0git
InternalEventOperators.cpp
Go to the documentation of this file.
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-exception
6//
7//===----------------------------------------------------------------------===//
8///
9/// \file
10/// 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 internal
285
286} // namespace omptest
Declares internal event representations along the default CTOR definition.
bool operator==(const ParallelBegin &, const ParallelBegin &)
ompt_scope_endpoint_t Endpoint
ompt_scope_endpoint_t Endpoint
ompt_target_data_op_t OpType
ompt_scope_endpoint_t Endpoint
ompt_scope_endpoint_t Endpoint
ompt_data_t * ParallelData
ompt_scope_endpoint_t Endpoint