CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
378 lines
17 KiB
C++
378 lines
17 KiB
C++
//===- 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,
|
|
const ObserveState &Expected, ompt_id_t TargetId,
|
|
ompt_id_t HostOpId, ompt_target_data_op_t OpType, void *SrcAddr,
|
|
int SrcDeviceNum, void *DstAddr, int DstDeviceNum, size_t Bytes,
|
|
const void *CodeptrRA);
|
|
|
|
static OmptAssertEvent
|
|
TargetDataOp(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_target_data_op_t OpType,
|
|
size_t Bytes = expectedDefault(size_t),
|
|
void *SrcAddr = expectedDefault(void *),
|
|
void *DstAddr = expectedDefault(void *),
|
|
int SrcDeviceNum = expectedDefault(int),
|
|
int DstDeviceNum = expectedDefault(int),
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
ompt_id_t HostOpId = expectedDefault(ompt_id_t),
|
|
const void *CodeptrRA = expectedDefault(void *));
|
|
|
|
static OmptAssertEvent
|
|
TargetDataOpEmi(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_scope_endpoint_t Endpoint,
|
|
ompt_data_t *TargetTaskData, ompt_data_t *TargetData,
|
|
ompt_id_t *HostOpId, ompt_target_data_op_t OpType,
|
|
void *SrcAddr, int SrcDeviceNum, void *DstAddr,
|
|
int DstDeviceNum, size_t Bytes, const void *CodeptrRA);
|
|
|
|
static OmptAssertEvent
|
|
TargetDataOpEmi(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_target_data_op_t OpType,
|
|
ompt_scope_endpoint_t Endpoint,
|
|
size_t Bytes = expectedDefault(size_t),
|
|
void *SrcAddr = expectedDefault(void *),
|
|
void *DstAddr = expectedDefault(void *),
|
|
int SrcDeviceNum = expectedDefault(int),
|
|
int DstDeviceNum = expectedDefault(int),
|
|
ompt_data_t *TargetTaskData = expectedDefault(ompt_data_t *),
|
|
ompt_data_t *TargetData = expectedDefault(ompt_data_t *),
|
|
ompt_id_t *HostOpId = expectedDefault(ompt_id_t *),
|
|
const void *CodeptrRA = expectedDefault(void *));
|
|
|
|
static OmptAssertEvent TargetSubmit(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected,
|
|
ompt_id_t TargetId, ompt_id_t HostOpId,
|
|
unsigned int RequestedNumTeams);
|
|
|
|
static OmptAssertEvent
|
|
TargetSubmit(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, unsigned int RequestedNumTeams,
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
ompt_id_t HostOpId = expectedDefault(ompt_id_t));
|
|
|
|
static OmptAssertEvent
|
|
TargetSubmitEmi(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_scope_endpoint_t Endpoint,
|
|
ompt_data_t *TargetData, ompt_id_t *HostOpId,
|
|
unsigned int RequestedNumTeams);
|
|
|
|
static OmptAssertEvent
|
|
TargetSubmitEmi(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, unsigned int RequestedNumTeams,
|
|
ompt_scope_endpoint_t Endpoint,
|
|
ompt_data_t *TargetData = expectedDefault(ompt_data_t *),
|
|
ompt_id_t *HostOpId = expectedDefault(ompt_id_t *));
|
|
|
|
static OmptAssertEvent ControlTool(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected);
|
|
|
|
static OmptAssertEvent DeviceInitialize(
|
|
const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, int DeviceNum,
|
|
const char *Type = expectedDefault(const char *),
|
|
ompt_device_t *Device = expectedDefault(ompt_device_t *),
|
|
ompt_function_lookup_t LookupFn = expectedDefault(ompt_function_lookup_t),
|
|
const char *DocumentationStr = expectedDefault(const char *));
|
|
|
|
static OmptAssertEvent DeviceFinalize(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected,
|
|
int DeviceNum);
|
|
|
|
static OmptAssertEvent
|
|
DeviceLoad(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, int DeviceNum,
|
|
const char *Filename = expectedDefault(const char *),
|
|
int64_t OffsetInFile = expectedDefault(int64_t),
|
|
void *VmaInFile = expectedDefault(void *),
|
|
size_t Bytes = expectedDefault(size_t),
|
|
void *HostAddr = expectedDefault(void *),
|
|
void *DeviceAddr = expectedDefault(void *),
|
|
uint64_t ModuleId = expectedDefault(int64_t));
|
|
|
|
static OmptAssertEvent DeviceUnload(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected);
|
|
|
|
static OmptAssertEvent BufferRequest(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected,
|
|
int DeviceNum, ompt_buffer_t **Buffer,
|
|
size_t *Bytes);
|
|
|
|
static OmptAssertEvent
|
|
BufferComplete(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, int DeviceNum,
|
|
ompt_buffer_t *Buffer, size_t Bytes,
|
|
ompt_buffer_cursor_t Begin, int BufferOwned);
|
|
|
|
static OmptAssertEvent BufferRecord(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected,
|
|
ompt_record_ompt_t *Record);
|
|
|
|
/// Handle type = ompt_record_target_t
|
|
static OmptAssertEvent
|
|
BufferRecord(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_callbacks_t Type,
|
|
ompt_target_t Kind, ompt_scope_endpoint_t Endpoint,
|
|
int DeviceNum = expectedDefault(int),
|
|
ompt_id_t TaskId = expectedDefault(ompt_id_t),
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
const void *CodeptrRA = expectedDefault(void *));
|
|
|
|
/// Handle type = ompt_callback_target_data_op
|
|
static OmptAssertEvent
|
|
BufferRecord(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_callbacks_t Type,
|
|
ompt_target_data_op_t OpType, size_t Bytes,
|
|
std::pair<ompt_device_time_t, ompt_device_time_t> Timeframe,
|
|
void *SrcAddr = expectedDefault(void *),
|
|
void *DstAddr = expectedDefault(void *),
|
|
int SrcDeviceNum = expectedDefault(int),
|
|
int DstDeviceNum = expectedDefault(int),
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
ompt_id_t HostOpId = expectedDefault(ompt_id_t),
|
|
const void *CodeptrRA = expectedDefault(void *));
|
|
|
|
/// Handle type = ompt_callback_target_data_op
|
|
static OmptAssertEvent BufferRecord(
|
|
const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_callbacks_t Type,
|
|
ompt_target_data_op_t OpType, size_t Bytes = expectedDefault(size_t),
|
|
ompt_device_time_t MinimumTimeDelta = expectedDefault(ompt_device_time_t),
|
|
void *SrcAddr = expectedDefault(void *),
|
|
void *DstAddr = expectedDefault(void *),
|
|
int SrcDeviceNum = expectedDefault(int),
|
|
int DstDeviceNum = expectedDefault(int),
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
ompt_id_t HostOpId = expectedDefault(ompt_id_t),
|
|
const void *CodeptrRA = expectedDefault(void *));
|
|
|
|
/// Handle type = ompt_callback_target_submit
|
|
static OmptAssertEvent
|
|
BufferRecord(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_callbacks_t Type,
|
|
std::pair<ompt_device_time_t, ompt_device_time_t> Timeframe,
|
|
unsigned int RequestedNumTeams = expectedDefault(unsigned int),
|
|
unsigned int GrantedNumTeams = expectedDefault(unsigned int),
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
ompt_id_t HostOpId = expectedDefault(ompt_id_t));
|
|
|
|
/// Handle type = ompt_callback_target_submit
|
|
/// Note: This will also act as the simplest default CTOR
|
|
static OmptAssertEvent BufferRecord(
|
|
const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, ompt_callbacks_t Type,
|
|
ompt_device_time_t MinimumTimeDelta = expectedDefault(ompt_device_time_t),
|
|
unsigned int RequestedNumTeams = expectedDefault(unsigned int),
|
|
unsigned int GrantedNumTeams = expectedDefault(unsigned int),
|
|
ompt_id_t TargetId = expectedDefault(ompt_id_t),
|
|
ompt_id_t HostOpId = expectedDefault(ompt_id_t));
|
|
|
|
static OmptAssertEvent BufferRecordDeallocation(const std::string &Name,
|
|
const std::string &Group,
|
|
const ObserveState &Expected,
|
|
ompt_buffer_t *Buffer);
|
|
|
|
/// Allow move construction (due to std::unique_ptr)
|
|
OmptAssertEvent(OmptAssertEvent &&o) = default;
|
|
OmptAssertEvent &operator=(OmptAssertEvent &&o) = default;
|
|
|
|
/// Get the event's name
|
|
std::string getEventName() const;
|
|
|
|
/// Get the event's group name
|
|
std::string getEventGroup() const;
|
|
|
|
/// Get the event's expected observation state
|
|
ObserveState getEventExpectedState() const;
|
|
|
|
/// Return the actual event type enum value
|
|
internal::EventTy getEventType() const;
|
|
|
|
/// Get a pointer to the internal event
|
|
internal::InternalEvent *getEvent() const;
|
|
|
|
/// Make events comparable
|
|
friend bool operator==(const OmptAssertEvent &A, const OmptAssertEvent &B);
|
|
|
|
/// Returns the string representation of the event
|
|
std::string toString(bool PrefixEventName = false) const;
|
|
|
|
private:
|
|
OmptAssertEvent(const std::string &Name, const std::string &Group,
|
|
const ObserveState &Expected, internal::InternalEvent *IE);
|
|
OmptAssertEvent(const OmptAssertEvent &o) = delete;
|
|
|
|
/// Determine the event name. Either it is provided directly or determined
|
|
/// from the calling function's name.
|
|
static std::string getName(const std::string &Name,
|
|
const char *Caller = __builtin_FUNCTION()) {
|
|
std::string EName = Name;
|
|
if (EName.empty())
|
|
EName.append(Caller).append(" (auto generated)");
|
|
|
|
return EName;
|
|
}
|
|
|
|
/// Determine the event name. Either it is provided directly or "default".
|
|
static std::string getGroup(const std::string &Group) {
|
|
if (Group.empty())
|
|
return "default";
|
|
|
|
return Group;
|
|
}
|
|
|
|
std::string Name;
|
|
std::string Group;
|
|
ObserveState ExpectedState;
|
|
std::unique_ptr<internal::InternalEvent> TheEvent;
|
|
};
|
|
|
|
/// POD type, which holds the target region id, corresponding to an event group.
|
|
struct AssertEventGroup {
|
|
AssertEventGroup(uint64_t TargetRegion) : TargetRegion(TargetRegion) {}
|
|
uint64_t TargetRegion;
|
|
};
|
|
|
|
bool operator==(const OmptAssertEvent &A, const OmptAssertEvent &B);
|
|
|
|
} // namespace omptest
|
|
|
|
#endif
|