Files
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

134 lines
4.4 KiB
C++

//===- OmptDeviceTracing.h - Target independent OMPT callbacks --*- 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
//
//===----------------------------------------------------------------------===//
//
// Interface used by target-independent runtimes to coordinate registration and
// invocation of OMPT tracing functionality.
//
//===----------------------------------------------------------------------===//
#ifndef OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_COMMON_OMPTDEVICETRACING_H
#define OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_COMMON_OMPTDEVICETRACING_H
#ifdef OMPT_SUPPORT
#include "OpenMP/OMPT/OmptCommonDefs.h"
#include "llvm/Support/DynamicLibrary.h"
#include <map>
#include <memory>
#pragma push_macro("DEBUG_PREFIX")
#undef DEBUG_PREFIX
#define DEBUG_PREFIX "OMPT"
extern void setOmptAsyncCopyProfile(bool Enable);
extern void setGlobalOmptKernelProfile(void *Device, int Enable);
extern uint64_t getSystemTimestampInNs();
namespace llvm {
namespace omp {
namespace target {
namespace ompt {
// Declare OMPT device tracing function entry points
#define declareOmptTracingFn(Name) extern libomptarget_##Name##_t Name##_fn;
FOREACH_OMPT_DEVICE_TRACING_FN_IMPLEMENTAIONS(declareOmptTracingFn)
#undef declareOmptTracingFn
// Declare OMPT device tracing function mutexes
#define declareOmptTracingFnMutex(Name) extern std::mutex Name##_mutex;
FOREACH_OMPT_DEVICE_TRACING_FN_IMPLEMENTAIONS(declareOmptTracingFnMutex)
#undef declareOmptTracingFnMutex
extern std::mutex DeviceIdWritingMutex;
/// Activate tracing on the given device
void enableDeviceTracing(int DeviceId);
/// Deactivate tracing on the given device
void disableDeviceTracing(int DeviceId);
/// Set 'start' and 'stop' in trace records
void setOmptTimestamp(uint64_t StartTime, uint64_t EndTime);
/// Set the linear function correlation between host and device clocks
void setOmptHostToDeviceRate(double Slope, double Offset);
/// Set / store the number of granted teams in trace records
void setOmptGrantedNumTeams(uint64_t NumTeams);
/// Lookup the given device pointer and return its RTL device ID
int getDeviceId(ompt_device_t *Device);
/// Map the given device pointer to the given DeviceId
void setDeviceId(ompt_device_t *Device, int32_t DeviceId);
/// Rempve the given device pointer from the current mapping
void removeDeviceId(ompt_device_t *Device);
/// Check whether the provided device is currently traced.
bool isTracedDevice(int32_t DeviceId);
/// Provide name based lookup for the device tracing functions
extern ompt_interface_fn_t
lookupDeviceTracingFn(const char *InterfaceFunctionName);
/// Host to device linear clock correlation
extern double HostToDeviceSlope;
/// Host to device constant clock offset
extern double HostToDeviceOffset;
/// Mapping of device pointers to their corresponding RTL device ID
extern std::map<ompt_device_t *, int32_t> Devices;
/// Mapping of RTL device IDs to their currently enabled tracing event types.
/// Note: Event type '0' (bit position) indicates if this device is traced.
extern std::map<int32_t, uint64_t> TracedDevices;
/// OMPT global tracing status. Indicates if at least one device is traced.
extern bool TracingActive;
/// Parent library pointer
extern std::shared_ptr<llvm::sys::DynamicLibrary> ParentLibrary;
/// Get the parent library by pointer. If it is not already set, it will set the
/// parent library pointer.
std::shared_ptr<llvm::sys::DynamicLibrary> getParentLibrary();
/// Set the parent library by filename
void setParentLibrary(const char *Filename);
/// Search for FuncName inside the parent library and assign to FuncPtr.
/// IMPORTANT: This function assumes that the *caller* holds the respective lock
/// for FuncPtr.
template <typename FT>
void ensureFuncPtrLoaded(const std::string &FuncName, FT *FuncPtr) {
if (*FuncPtr == nullptr) {
if ((ParentLibrary == nullptr && getParentLibrary() == nullptr) ||
!ParentLibrary->isValid())
return;
void *SymbolPtr = ParentLibrary->getAddressOfSymbol(FuncName.c_str());
if (SymbolPtr == nullptr)
return;
*FuncPtr = reinterpret_cast<FT>(SymbolPtr);
}
}
} // namespace ompt
} // namespace target
} // namespace omp
} // namespace llvm
#pragma pop_macro("DEBUG_PREFIX")
#endif // OMPT_SUPPORT
#endif // OPENMP_LIBOMPTARGET_PLUGINS_NEXTGEN_COMMON_OMPTDEVICETRACING_H