From d36f66b42d7abec73bb5b953612eef26e6c12e0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michael=20Halkenh=C3=A4user?= Date: Mon, 23 Sep 2024 11:58:40 +0200 Subject: [PATCH] [NFC][offload][OMPT] Cleanup of OMPT internals (#109005) Removed `OmptCallbacks.cpp` since relevant contents were duplicated. Because of the static linking there should be no change in functionality. --- offload/include/OpenMP/OMPT/Callback.h | 6 +- offload/include/OpenMP/OMPT/Interface.h | 12 +-- offload/plugins-nextgen/common/CMakeLists.txt | 6 -- .../common/OMPT/OmptCallback.cpp | 75 ------------------- offload/src/OpenMP/OMPT/Callback.cpp | 54 ++++--------- offload/src/exports | 1 - 6 files changed, 25 insertions(+), 129 deletions(-) delete mode 100644 offload/plugins-nextgen/common/OMPT/OmptCallback.cpp diff --git a/offload/include/OpenMP/OMPT/Callback.h b/offload/include/OpenMP/OMPT/Callback.h index 89c5731221e973..68cb43745eb1f8 100644 --- a/offload/include/OpenMP/OMPT/Callback.h +++ b/offload/include/OpenMP/OMPT/Callback.h @@ -11,8 +11,8 @@ // //===----------------------------------------------------------------------===// -#ifndef OMPTARGET_OPENMP_OMPT_CALLBACK_H -#define OMPTARGET_OPENMP_OMPT_CALLBACK_H +#ifndef OFFLOAD_INCLUDE_OPENMP_OMPT_CALLBACK_H +#define OFFLOAD_INCLUDE_OPENMP_OMPT_CALLBACK_H #ifdef OMPT_SUPPORT @@ -102,4 +102,4 @@ extern bool Initialized; #define performIfOmptInitialized(stmt) #endif // OMPT_SUPPORT -#endif // OMPTARGET_OPENMP_OMPT_CALLBACK_H +#endif // OFFLOAD_INCLUDE_OPENMP_OMPT_CALLBACK_H diff --git a/offload/include/OpenMP/OMPT/Interface.h b/offload/include/OpenMP/OMPT/Interface.h index 0dc1bad8f7ecea..43fb193bc75a6c 100644 --- a/offload/include/OpenMP/OMPT/Interface.h +++ b/offload/include/OpenMP/OMPT/Interface.h @@ -10,19 +10,19 @@ // //===----------------------------------------------------------------------===// -#ifndef _OMPTARGET_OMPTINTERFACE_H -#define _OMPTARGET_OMPTINTERFACE_H +#ifndef OFFLOAD_INCLUDE_OPENMP_OMPT_INTERFACE_H +#define OFFLOAD_INCLUDE_OPENMP_OMPT_INTERFACE_H // Only provide functionality if target OMPT support is enabled #ifdef OMPT_SUPPORT -#include -#include - #include "Callback.h" #include "omp-tools.h" #include "llvm/Support/ErrorHandling.h" +#include +#include + #define OMPT_IF_BUILT(stmt) stmt /// Callbacks for target regions require task_data representing the @@ -326,4 +326,4 @@ class ReturnAddressSetterRAII { #define OMPT_IF_BUILT(stmt) #endif -#endif // _OMPTARGET_OMPTINTERFACE_H +#endif // OFFLOAD_INCLUDE_OPENMP_OMPT_INTERFACE_H diff --git a/offload/plugins-nextgen/common/CMakeLists.txt b/offload/plugins-nextgen/common/CMakeLists.txt index 4dca5422087bba..fde4b2f930349e 100644 --- a/offload/plugins-nextgen/common/CMakeLists.txt +++ b/offload/plugins-nextgen/common/CMakeLists.txt @@ -38,12 +38,6 @@ elseif(${LIBOMPTARGET_GPU_LIBC_SUPPORT}) endif() endif() -# If we have OMPT enabled include it in the list of sources. -if (OMPT_TARGET_DEFAULT AND LIBOMPTARGET_OMPT_SUPPORT) - target_sources(PluginCommon PRIVATE OMPT/OmptCallback.cpp) - target_include_directories(PluginCommon PRIVATE OMPT) -endif() - # Define the TARGET_NAME and DEBUG_PREFIX. target_compile_definitions(PluginCommon PRIVATE TARGET_NAME="PluginInterface" diff --git a/offload/plugins-nextgen/common/OMPT/OmptCallback.cpp b/offload/plugins-nextgen/common/OMPT/OmptCallback.cpp deleted file mode 100644 index fb8a156fe5767a..00000000000000 --- a/offload/plugins-nextgen/common/OMPT/OmptCallback.cpp +++ /dev/null @@ -1,75 +0,0 @@ -//===---------- OmptCallback.cpp - Generic 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 -// -//===----------------------------------------------------------------------===// -// -// OMPT support for PluginInterface -// -//===----------------------------------------------------------------------===// - -#ifdef OMPT_SUPPORT - -#include "llvm/Support/DynamicLibrary.h" - -#include -#include -#include - -#include "Shared/Debug.h" - -#include "OpenMP/OMPT/Callback.h" -#include "OpenMP/OMPT/Connector.h" - -using namespace llvm::omp::target::ompt; - -bool llvm::omp::target::ompt::Initialized = false; - -ompt_get_callback_t llvm::omp::target::ompt::lookupCallbackByCode = nullptr; -ompt_function_lookup_t llvm::omp::target::ompt::lookupCallbackByName = nullptr; - -int llvm::omp::target::ompt::initializeLibrary(ompt_function_lookup_t lookup, - int initial_device_num, - ompt_data_t *tool_data) { - DP("OMPT: Executing initializeLibrary (libomptarget)\n"); -#define bindOmptFunctionName(OmptFunction, DestinationFunction) \ - if (lookup) \ - DestinationFunction = (OmptFunction##_t)lookup(#OmptFunction); \ - DP("OMPT: initializeLibrary (libomptarget) bound %s=%p\n", \ - #DestinationFunction, ((void *)(uint64_t)DestinationFunction)); - - bindOmptFunctionName(ompt_get_callback, lookupCallbackByCode); -#undef bindOmptFunctionName - - // Store pointer of 'ompt_libomp_target_fn_lookup' for use by the plugin - lookupCallbackByName = lookup; - - Initialized = true; - - return 0; -} - -void llvm::omp::target::ompt::finalizeLibrary(ompt_data_t *tool_data) { - DP("OMPT: Executing finalizeLibrary (libomptarget)\n"); -} - -void llvm::omp::target::ompt::connectLibrary() { - DP("OMPT: Entering connectLibrary (libomptarget)\n"); - /// Connect plugin instance with libomptarget - OmptLibraryConnectorTy LibomptargetConnector("libomptarget"); - ompt_start_tool_result_t OmptResult; - - // Initialize OmptResult with the init and fini functions that will be - // called by the connector - OmptResult.initialize = ompt::initializeLibrary; - OmptResult.finalize = ompt::finalizeLibrary; - OmptResult.tool_data.value = 0; - - // Now call connect that causes the above init/fini functions to be called - LibomptargetConnector.connect(&OmptResult); - DP("OMPT: Exiting connectLibrary (libomptarget)\n"); -} - -#endif diff --git a/offload/src/OpenMP/OMPT/Callback.cpp b/offload/src/OpenMP/OMPT/Callback.cpp index f2964281eeb95f..ab0942ed4fd3f7 100644 --- a/offload/src/OpenMP/OMPT/Callback.cpp +++ b/offload/src/OpenMP/OMPT/Callback.cpp @@ -10,14 +10,7 @@ // //===----------------------------------------------------------------------===// -#ifndef OMPT_SUPPORT - -extern "C" { -/// Dummy definition when OMPT is disabled -void ompt_libomptarget_connect() {} -} - -#else // OMPT_SUPPORT is set +#ifdef OMPT_SUPPORT #include #include @@ -34,8 +27,6 @@ void ompt_libomptarget_connect() {} #undef DEBUG_PREFIX #define DEBUG_PREFIX "OMPT" -using namespace llvm::omp::target::ompt; - // Define OMPT callback functions (bound to actual callbacks later on) #define defineOmptCallback(Name, Type, Code) \ Name##_t llvm::omp::target::ompt::Name##_fn = nullptr; @@ -43,6 +34,8 @@ FOREACH_OMPT_NOEMI_EVENT(defineOmptCallback) FOREACH_OMPT_EMI_EVENT(defineOmptCallback) #undef defineOmptCallback +using namespace llvm::omp::target::ompt; + /// Forward declaration class LibomptargetRtlFinalizer; @@ -226,26 +219,26 @@ void Interface::endTargetDataRetrieve(int64_t SrcDeviceId, void *SrcPtrBegin, endTargetDataOperation(); } -void Interface::beginTargetSubmit(unsigned int numTeams) { +void Interface::beginTargetSubmit(unsigned int NumTeams) { if (ompt_callback_target_submit_emi_fn) { // HostOpId is set by the tool. Invoke the tool supplied target submit EMI // callback ompt_callback_target_submit_emi_fn(ompt_scope_begin, &TargetData, &HostOpId, - numTeams); + NumTeams); } else if (ompt_callback_target_submit_fn) { // HostOpId is set by the runtime HostOpId = createOpId(); - ompt_callback_target_submit_fn(TargetData.value, HostOpId, numTeams); + ompt_callback_target_submit_fn(TargetData.value, HostOpId, NumTeams); } } -void Interface::endTargetSubmit(unsigned int numTeams) { +void Interface::endTargetSubmit(unsigned int NumTeams) { // Only EMI callback handles end scope if (ompt_callback_target_submit_emi_fn) { // HostOpId is set by the tool. Invoke the tool supplied target submit EMI // callback ompt_callback_target_submit_emi_fn(ompt_scope_end, &TargetData, &HostOpId, - numTeams); + NumTeams); } } @@ -458,7 +451,7 @@ class LibomptargetRtlFinalizer { void finalize() { for (auto FinalizationFunction : RtlFinalizationFunctions) - FinalizationFunction(/* tool_data */ nullptr); + FinalizationFunction(/*tool_data=*/nullptr); RtlFinalizationFunctions.clear(); } @@ -469,10 +462,11 @@ class LibomptargetRtlFinalizer { int llvm::omp::target::ompt::initializeLibrary(ompt_function_lookup_t lookup, int initial_device_num, ompt_data_t *tool_data) { - DP("Executing initializeLibrary (libomp)\n"); + DP("Executing initializeLibrary\n"); #define bindOmptFunctionName(OmptFunction, DestinationFunction) \ - DestinationFunction = (OmptFunction##_t)lookup(#OmptFunction); \ - DP("initializeLibrary (libomp) bound %s=%p\n", #DestinationFunction, \ + if (lookup) \ + DestinationFunction = (OmptFunction##_t)lookup(#OmptFunction); \ + DP("initializeLibrary bound %s=%p\n", #DestinationFunction, \ ((void *)(uint64_t)DestinationFunction)); bindOmptFunctionName(ompt_get_callback, lookupCallbackByCode); @@ -499,7 +493,7 @@ int llvm::omp::target::ompt::initializeLibrary(ompt_function_lookup_t lookup, } void llvm::omp::target::ompt::finalizeLibrary(ompt_data_t *data) { - DP("Executing finalizeLibrary (libomp)\n"); + DP("Executing finalizeLibrary\n"); // Before disabling OMPT, call the (plugin) finalizations that were registered // with this library LibraryFinalizer->finalize(); @@ -508,7 +502,7 @@ void llvm::omp::target::ompt::finalizeLibrary(ompt_data_t *data) { } void llvm::omp::target::ompt::connectLibrary() { - DP("Entering connectLibrary (libomp)\n"); + DP("Entering connectLibrary\n"); // Connect with libomp static OmptLibraryConnectorTy LibompConnector("libomp"); static ompt_start_tool_result_t OmptResult; @@ -531,23 +525,7 @@ void llvm::omp::target::ompt::connectLibrary() { FOREACH_OMPT_EMI_EVENT(bindOmptCallback) #undef bindOmptCallback - DP("Exiting connectLibrary (libomp)\n"); + DP("Exiting connectLibrary\n"); } -extern "C" { -/// Used for connecting libomptarget with a plugin -void ompt_libomptarget_connect(ompt_start_tool_result_t *result) { - DP("Enter ompt_libomptarget_connect\n"); - if (Initialized && result && LibraryFinalizer) { - // Cache each fini function, so that they can be invoked on exit - LibraryFinalizer->registerRtl(result->finalize); - // Invoke the provided init function with the lookup function maintained - // in this library so that callbacks maintained by this library are - // retrieved. - result->initialize(lookupCallbackByName, - /* initial_device_num */ 0, /* tool_data */ nullptr); - } - DP("Leave ompt_libomptarget_connect\n"); -} -} #endif // OMPT_SUPPORT diff --git a/offload/src/exports b/offload/src/exports index 7bdc7d2a531bb3..2406776c1fb5fc 100644 --- a/offload/src/exports +++ b/offload/src/exports @@ -70,7 +70,6 @@ VERS1.0 { __tgt_interop_init; __tgt_interop_use; __tgt_interop_destroy; - ompt_libomptarget_connect; __llvmPushCallConfiguration; __llvmPopCallConfiguration; llvmLaunchKernel;