Commit 8cd1f0d8 authored by Dhruva Chakrabarti's avatar Dhruva Chakrabarti Committed by Michael Halkenhaeuser
Browse files

[OpenMP] [OMPT] [amdgpu] [4/8] Implemented callback registration in nextgen plugins

The purpose of this patch is to Implement registration of callback functions in the generic plugin by looking up corresponding callbacks in libomptarget. The overall design document is https://rice.app.box.com/s/pf3gix2hs4d4o1aatwir1set05xmjljc

Defined an object of type OmptDeviceCallbacksTy in the amdgpu plugin for holding the tool-provided callback functions. Implemented a global constructor in the plugin that creates a connector object to connect with libomptarget. The callbacks that are already registered with libomptarget are looked up and registered with the plugin.

Combined with an internal patch from Dhruva Chakrabarti, which fixes the OMPT initialization ordering.
Achieved through removal of the constructor attribute from ompt_init.

Patch from John Mellor-Crummey <johnmc@rice.edu>
With contributions from:
Dhruva Chakrabarti <Dhruva.Chakrabarti@amd.com>
Michael Halkenhaeuser <MichaelGerald.Halkenhauser@amd.com>

Differential Revision: https://reviews.llvm.org/D124070
parent 14085045
Loading
Loading
Loading
Loading
+14 −2
Original line number Diff line number Diff line
@@ -49,6 +49,20 @@ public:
#undef OmptBindCallback
  }

  /// Used to find a callback given its name
  ompt_interface_fn_t lookupCallback(const char *InterfaceFunctionName) {
#define OmptLookup(Name, Type, Code)                                           \
  if (strcmp(InterfaceFunctionName, #Name) == 0)                               \
    return (ompt_interface_fn_t)Name##_fn;

    FOREACH_OMPT_TARGET_CALLBACK(OmptLookup);
#undef OmptLookup
    return (ompt_interface_fn_t) nullptr;
  }

  /// Wrapper function to find a callback given its name
  static ompt_interface_fn_t doLookup(const char *InterfaceFunctionName);

private:
  /// Set to true if callbacks for this library have been initialized
  bool Enabled;
@@ -62,8 +76,6 @@ private:
/// Device callbacks object for the library that performs the instantiation
extern OmptDeviceCallbacksTy OmptDeviceCallbacks;

#undef DEBUG_PREFIX

#endif // OMPT_SUPPORT

#endif // _OMPT_DEVICE_CALLBACKS_H
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ if(CMAKE_SYSTEM_PROCESSOR MATCHES "${tmachine}$")
        PRIVATE
        elf_common
        MemoryManager
        OMPT
        PluginInterface
        ${LIBOMPTARGET_DEP_LIBFFI_LIBRARIES}
        ${OPENMP_PTHREAD_LIB}
+1 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ add_llvm_library(omptarget.rtl.amdgpu.nextgen SHARED
  PRIVATE
  elf_common
  MemoryManager
  OMPT
  PluginInterface
  ${LIBOMPTARGET_DEP_LIBRARIES}
  ${OPENMP_PTHREAD_LIB}
+1 −0
Original line number Diff line number Diff line
@@ -10,4 +10,5 @@
#
##===----------------------------------------------------------------------===##

add_subdirectory(OMPT)
add_subdirectory(PluginInterface)
+72 −0
Original line number Diff line number Diff line
##===----------------------------------------------------------------------===##
#
# 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
#
##===----------------------------------------------------------------------===##
#
# Aggregation of parts which can be used by OpenMP tools
#
##===----------------------------------------------------------------------===##

# NOTE: Don't try to build `OMPT` using `add_llvm_library` because we
# don't want to export `OMPT` while `add_llvm_library` requires that.
add_library(OMPT OBJECT
  OmptCallback.cpp)

# This is required when using LLVM libraries.
llvm_update_compile_flags(OMPT)

if (LLVM_LINK_LLVM_DYLIB)
  set(llvm_libs LLVM)
else()
  llvm_map_components_to_libnames(llvm_libs
    ${LLVM_TARGETS_TO_BUILD}
    AggressiveInstCombine
    Analysis
    BinaryFormat
    BitReader
    BitWriter
    CodeGen
    Core
    Extensions
    InstCombine
    Instrumentation
    IPO
    IRReader
    Linker
    MC
    Object
    Passes
    Remarks
    ScalarOpts
    Support
    Target
    TargetParser
    TransformUtils
    Vectorize
  )
endif()

target_link_libraries(OMPT
  PUBLIC
    ${llvm_libs}
    elf_common
    MemoryManager
)

# Define the TARGET_NAME and DEBUG_PREFIX.
target_compile_definitions(OMPT PRIVATE
  TARGET_NAME="OMPT"
  DEBUG_PREFIX="OMPT"
)

target_include_directories(OMPT
  INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}
  PRIVATE ${LIBOMPTARGET_INCLUDE_DIR}
)

set_target_properties(OMPT PROPERTIES
  POSITION_INDEPENDENT_CODE ON
  CXX_VISIBILITY_PRESET protected)
Loading