[Openmp-commits] [openmp] [OpenMP] Add ompTest library to OpenMP (PR #147381)

Michael Halkenhäuser via Openmp-commits openmp-commits at lists.llvm.org
Tue Jul 15 05:04:00 PDT 2025


================
@@ -0,0 +1,377 @@
+//===- OmptAssertEvent.h - Assertion event declarations ---------*- C++ -*-===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+///
+/// \file
+/// Contains assertion event constructors, for generally all observable events.
+/// This includes user-generated events, like synchronization.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef OPENMP_TOOLS_OMPTEST_INCLUDE_OMPTASSERTEVENT_H
+#define OPENMP_TOOLS_OMPTEST_INCLUDE_OMPTASSERTEVENT_H
+
+#include "InternalEvent.h"
+#include "omp-tools.h"
+
+#include <cassert>
+#include <limits>
+#include <memory>
+#include <string>
+
+namespace omptest {
+
+enum class ObserveState { generated, always, never };
+
+/// Helper function, returning an ObserveState string representation
+const char *to_string(ObserveState State);
+
+/// Assertion event struct, provides statically callable CTORs.
+struct OmptAssertEvent {
+  static OmptAssertEvent AssertionSyncPoint(const std::string &Name,
+                                            const std::string &Group,
+                                            const ObserveState &Expected,
+                                            const std::string &SyncPointName);
+
+  static OmptAssertEvent AssertionSuspend(const std::string &Name,
+                                          const std::string &Group,
+                                          const ObserveState &Expected);
+
+  static OmptAssertEvent ThreadBegin(const std::string &Name,
+                                     const std::string &Group,
+                                     const ObserveState &Expected,
+                                     ompt_thread_t ThreadType);
+
+  static OmptAssertEvent ThreadEnd(const std::string &Name,
+                                   const std::string &Group,
+                                   const ObserveState &Expected);
+
+  static OmptAssertEvent ParallelBegin(const std::string &Name,
+                                       const std::string &Group,
+                                       const ObserveState &Expected,
+                                       int NumThreads);
+
+  static OmptAssertEvent ParallelEnd(
+      const std::string &Name, const std::string &Group,
+      const ObserveState &Expected,
+      ompt_data_t *ParallelData = expectedDefault(ompt_data_t *),
+      ompt_data_t *EncounteringTaskData = expectedDefault(ompt_data_t *),
+      int Flags = expectedDefault(int),
+      const void *CodeptrRA = expectedDefault(const void *));
+
+  static OmptAssertEvent
+  Work(const std::string &Name, const std::string &Group,
+       const ObserveState &Expected, ompt_work_t WorkType,
+       ompt_scope_endpoint_t Endpoint,
+       ompt_data_t *ParallelData = expectedDefault(ompt_data_t *),
+       ompt_data_t *TaskData = expectedDefault(ompt_data_t *),
+       uint64_t Count = expectedDefault(uint64_t),
+       const void *CodeptrRA = expectedDefault(const void *));
+
+  static OmptAssertEvent
+  Dispatch(const std::string &Name, const std::string &Group,
+           const ObserveState &Expected,
+           ompt_data_t *ParallelData = expectedDefault(ompt_data_t *),
+           ompt_data_t *TaskData = expectedDefault(ompt_data_t *),
+           ompt_dispatch_t Kind = expectedDefault(ompt_dispatch_t),
+           ompt_data_t Instance = expectedDefault(ompt_data_t));
+
+  static OmptAssertEvent
+  TaskCreate(const std::string &Name, const std::string &Group,
+             const ObserveState &Expected,
+             ompt_data_t *EncounteringTaskData = expectedDefault(ompt_data_t *),
+             const ompt_frame_t *EncounteringTaskFrame =
+                 expectedDefault(ompt_frame_t *),
+             ompt_data_t *NewTaskData = expectedDefault(ompt_data_t *),
+             int Flags = expectedDefault(int),
+             int HasDependences = expectedDefault(int),
+             const void *CodeptrRA = expectedDefault(const void *));
+
+  static OmptAssertEvent TaskSchedule(const std::string &Name,
+                                      const std::string &Group,
+                                      const ObserveState &Expected);
+
+  static OmptAssertEvent
+  ImplicitTask(const std::string &Name, const std::string &Group,
+               const ObserveState &Expected, ompt_scope_endpoint_t Endpoint,
+               ompt_data_t *ParallelData = expectedDefault(ompt_data_t *),
+               ompt_data_t *TaskData = expectedDefault(ompt_data_t *),
+               unsigned int ActualParallelism = expectedDefault(unsigned int),
+               unsigned int Index = expectedDefault(unsigned int),
+               int Flags = expectedDefault(int));
+
+  static OmptAssertEvent
+  SyncRegion(const std::string &Name, const std::string &Group,
+             const ObserveState &Expected, ompt_sync_region_t Kind,
+             ompt_scope_endpoint_t Endpoint,
+             ompt_data_t *ParallelData = expectedDefault(ompt_data_t *),
+             ompt_data_t *TaskData = expectedDefault(ompt_data_t *),
+             const void *CodeptrRA = expectedDefault(const void *));
+
+  static OmptAssertEvent
+  Target(const std::string &Name, const std::string &Group,
+         const ObserveState &Expected, ompt_target_t Kind,
+         ompt_scope_endpoint_t Endpoint, int DeviceNum = expectedDefault(int),
+         ompt_data_t *TaskData = expectedDefault(ompt_data_t *),
+         ompt_id_t TargetId = expectedDefault(ompt_id_t),
+         const void *CodeptrRA = expectedDefault(void *));
+
+  static OmptAssertEvent
+  TargetEmi(const std::string &Name, const std::string &Group,
+            const ObserveState &Expected, ompt_target_t Kind,
+            ompt_scope_endpoint_t Endpoint,
+            int DeviceNum = expectedDefault(int),
+            ompt_data_t *TaskData = expectedDefault(ompt_data_t *),
+            ompt_data_t *TargetTaskData = expectedDefault(ompt_data_t *),
+            ompt_data_t *TargetData = expectedDefault(ompt_data_t *),
+            const void *CodeptrRA = expectedDefault(void *));
+
+  static OmptAssertEvent
+  TargetDataOp(const std::string &Name, const std::string &Group,
----------------
mhalk wrote:

The first one (without default values) resembles the signature of the OpenMP spec.
Additionally, we wanted to provide an "easy-to-use" CTOR, where you may just provide the `OpType` (as Name, Group, and Expected may be handled internally).
Other arguments were reordered as reasonable as possible.

https://github.com/llvm/llvm-project/pull/147381


More information about the Openmp-commits mailing list