[Openmp-commits] [openmp] [OpenMP][NFC] Move out plugin API and APITypes into standalone headers (PR #73868)
Johannes Doerfert via Openmp-commits
openmp-commits at lists.llvm.org
Wed Nov 29 15:09:15 PST 2023
https://github.com/jdoerfert created https://github.com/llvm/llvm-project/pull/73868
None
>From b1f90db309c8cb522be08e53e38893fd1ebe9ef9 Mon Sep 17 00:00:00 2001
From: Johannes Doerfert <johannes at jdoerfert.de>
Date: Wed, 29 Nov 2023 15:07:48 -0800
Subject: [PATCH] [OpenMP][NFC] Move out plugin API and APITypes into
standalone headers
---
openmp/libomptarget/include/Shared/APITypes.h | 91 +++++++++++++++++++
.../{omptargetplugin.h => Shared/PluginAPI.h} | 17 ++--
openmp/libomptarget/include/omptarget.h | 65 +------------
.../common/src/PluginInterface.cpp | 3 +-
.../plugins-nextgen/common/src/Utils/ELF.cpp | 1 +
.../plugins-nextgen/common/src/Utils/ELF.h | 4 +-
.../kernelreplay/llvm-omp-kernel-replay.cpp | 4 +-
7 files changed, 108 insertions(+), 77 deletions(-)
create mode 100644 openmp/libomptarget/include/Shared/APITypes.h
rename openmp/libomptarget/include/{omptargetplugin.h => Shared/PluginAPI.h} (97%)
diff --git a/openmp/libomptarget/include/Shared/APITypes.h b/openmp/libomptarget/include/Shared/APITypes.h
new file mode 100644
index 000000000000000..fc494cd5f5865f8
--- /dev/null
+++ b/openmp/libomptarget/include/Shared/APITypes.h
@@ -0,0 +1,91 @@
+//===-- Shared/APITypes.h - Offload and plugin API types --------*- 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
+//
+//===----------------------------------------------------------------------===//
+//
+// This file defines types used in the interface between the user code, the
+// target independent offload runtime library, and target dependent plugins.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef OMPTARGET_SHARED_API_TYPES_H
+#define OMPTARGET_SHARED_API_TYPES_H
+
+#include "Environment.h"
+
+#include "llvm/ADT/SmallVector.h"
+
+#include <cstddef>
+#include <cstdint>
+
+extern "C" {
+
+/// This struct is a record of an entry point or global. For a function
+/// entry point the size is expected to be zero
+struct __tgt_offload_entry {
+ void *addr; // Pointer to the offload entry info (function or global)
+ char *name; // Name of the function or global
+ size_t size; // Size of the entry info (0 if it is a function)
+ int32_t flags; // Flags associated with the entry, e.g. 'link'.
+ int32_t reserved; // Reserved, to be used by the runtime library.
+};
+
+/// This struct is a record of the device image information
+struct __tgt_device_image {
+ void *ImageStart; // Pointer to the target code start
+ void *ImageEnd; // Pointer to the target code end
+ __tgt_offload_entry *EntriesBegin; // Begin of table with all target entries
+ __tgt_offload_entry *EntriesEnd; // End of table (non inclusive)
+};
+
+struct __tgt_device_info {
+ void *Context = nullptr;
+ void *Device = nullptr;
+};
+
+/// This struct contains information about a given image.
+struct __tgt_image_info {
+ const char *Arch;
+};
+
+/// This struct is a record of all the host code that may be offloaded to a
+/// target.
+struct __tgt_bin_desc {
+ int32_t NumDeviceImages; // Number of device types supported
+ __tgt_device_image *DeviceImages; // Array of device images (1 per dev. type)
+ __tgt_offload_entry *HostEntriesBegin; // Begin of table with all host entries
+ __tgt_offload_entry *HostEntriesEnd; // End of table (non inclusive)
+};
+
+/// This struct contains the offload entries identified by the target runtime
+struct __tgt_target_table {
+ __tgt_offload_entry *EntriesBegin; // Begin of the table with all the entries
+ __tgt_offload_entry
+ *EntriesEnd; // End of the table with all the entries (non inclusive)
+};
+
+// clang-format on
+
+/// This struct contains information exchanged between different asynchronous
+/// operations for device-dependent optimization and potential synchronization
+struct __tgt_async_info {
+ // A pointer to a queue-like structure where offloading operations are issued.
+ // We assume to use this structure to do synchronization. In CUDA backend, it
+ // is CUstream.
+ void *Queue = nullptr;
+
+ /// A collection of allocations that are associated with this stream and that
+ /// should be freed after finalization.
+ llvm::SmallVector<void *, 2> AssociatedAllocations;
+
+ /// The kernel launch environment used to issue a kernel. Stored here to
+ /// ensure it is a valid location while the transfer to the device is
+ /// happening.
+ KernelLaunchEnvironmentTy KernelLaunchEnvironment;
+};
+}
+
+#endif // OMPTARGET_SHARED_API_TYPES_H
diff --git a/openmp/libomptarget/include/omptargetplugin.h b/openmp/libomptarget/include/Shared/PluginAPI.h
similarity index 97%
rename from openmp/libomptarget/include/omptargetplugin.h
rename to openmp/libomptarget/include/Shared/PluginAPI.h
index 8bdb39de9da9ec7..4147879bf61869d 100644
--- a/openmp/libomptarget/include/omptargetplugin.h
+++ b/openmp/libomptarget/include/Shared/PluginAPI.h
@@ -1,4 +1,4 @@
-//===-- omptargetplugin.h - Target dependent OpenMP Plugin API --*- C++ -*-===//
+//===-- Shared/PluginAPI.h - Target independent plugin API ------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
@@ -11,14 +11,15 @@
//
//===----------------------------------------------------------------------===//
-#ifndef _OMPTARGETPLUGIN_H_
-#define _OMPTARGETPLUGIN_H_
+#ifndef OMPTARGET_SHARED_PLUGIN_API_H
+#define OMPTARGET_SHARED_PLUGIN_API_H
-#include <omptarget.h>
+#include <cstddef>
+#include <cstdint>
+
+#include "Shared/APITypes.h"
-#ifdef __cplusplus
extern "C" {
-#endif
// First method called on the plugin
int32_t __tgt_rtl_init_plugin();
@@ -215,8 +216,6 @@ int32_t __tgt_rtl_data_notify_unmapped(int32_t ID, void *HstPtr);
// unique device number.
int32_t __tgt_rtl_set_device_offset(int32_t DeviceIdOffset);
-#ifdef __cplusplus
}
-#endif
-#endif // _OMPTARGETPLUGIN_H_
+#endif // OMPTARGET_SHARED_PLUGIN_API_H
diff --git a/openmp/libomptarget/include/omptarget.h b/openmp/libomptarget/include/omptarget.h
index 34cee21f1607880..45fb40c397afe4c 100644
--- a/openmp/libomptarget/include/omptarget.h
+++ b/openmp/libomptarget/include/omptarget.h
@@ -14,6 +14,7 @@
#ifndef _OMPTARGET_H_
#define _OMPTARGET_H_
+#include "Shared/APITypes.h"
#include "Shared/Environment.h"
#include "Shared/SourceInfo.h"
@@ -147,65 +148,6 @@ inline KernelArgsTy CTorDTorKernelArgs = {1, 0, nullptr, nullptr,
nullptr, nullptr, nullptr, nullptr,
0, {0,0}, {1, 0, 0}, {1, 0, 0}, 0};
-/// This struct is a record of an entry point or global. For a function
-/// entry point the size is expected to be zero
-struct __tgt_offload_entry {
- void *addr; // Pointer to the offload entry info (function or global)
- char *name; // Name of the function or global
- size_t size; // Size of the entry info (0 if it is a function)
- int32_t flags; // Flags associated with the entry, e.g. 'link'.
- int32_t reserved; // Reserved, to be used by the runtime library.
-};
-
-/// This struct is a record of the device image information
-struct __tgt_device_image {
- void *ImageStart; // Pointer to the target code start
- void *ImageEnd; // Pointer to the target code end
- __tgt_offload_entry *EntriesBegin; // Begin of table with all target entries
- __tgt_offload_entry *EntriesEnd; // End of table (non inclusive)
-};
-
-/// This struct contains information about a given image.
-struct __tgt_image_info {
- const char *Arch;
-};
-
-/// This struct is a record of all the host code that may be offloaded to a
-/// target.
-struct __tgt_bin_desc {
- int32_t NumDeviceImages; // Number of device types supported
- __tgt_device_image *DeviceImages; // Array of device images (1 per dev. type)
- __tgt_offload_entry *HostEntriesBegin; // Begin of table with all host entries
- __tgt_offload_entry *HostEntriesEnd; // End of table (non inclusive)
-};
-
-/// This struct contains the offload entries identified by the target runtime
-struct __tgt_target_table {
- __tgt_offload_entry *EntriesBegin; // Begin of the table with all the entries
- __tgt_offload_entry
- *EntriesEnd; // End of the table with all the entries (non inclusive)
-};
-
-// clang-format on
-
-/// This struct contains information exchanged between different asynchronous
-/// operations for device-dependent optimization and potential synchronization
-struct __tgt_async_info {
- // A pointer to a queue-like structure where offloading operations are issued.
- // We assume to use this structure to do synchronization. In CUDA backend, it
- // is CUstream.
- void *Queue = nullptr;
-
- /// A collection of allocations that are associated with this stream and that
- /// should be freed after finalization.
- llvm::SmallVector<void *, 2> AssociatedAllocations;
-
- /// The kernel launch environment used to issue a kernel. Stored here to
- /// ensure it is a valid location while the transfer to the device is
- /// happening.
- KernelLaunchEnvironmentTy KernelLaunchEnvironment;
-};
-
struct DeviceTy;
/// The libomptarget wrapper around a __tgt_async_info object directly
@@ -366,11 +308,6 @@ struct __tgt_target_non_contig {
uint64_t Stride;
};
-struct __tgt_device_info {
- void *Context = nullptr;
- void *Device = nullptr;
-};
-
#ifdef __cplusplus
extern "C" {
#endif
diff --git a/openmp/libomptarget/plugins-nextgen/common/src/PluginInterface.cpp b/openmp/libomptarget/plugins-nextgen/common/src/PluginInterface.cpp
index 2ba9aca9e141a4d..c580817987a5071 100644
--- a/openmp/libomptarget/plugins-nextgen/common/src/PluginInterface.cpp
+++ b/openmp/libomptarget/plugins-nextgen/common/src/PluginInterface.cpp
@@ -10,14 +10,15 @@
#include "PluginInterface.h"
+#include "Shared/APITypes.h"
#include "Shared/Debug.h"
#include "Shared/Environment.h"
+#include "Shared/PluginAPI.h"
#include "GlobalHandler.h"
#include "JIT.h"
#include "Utils/ELF.h"
#include "omptarget.h"
-#include "omptargetplugin.h"
#ifdef OMPT_SUPPORT
#include "OpenMP/OMPT/Callback.h"
diff --git a/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.cpp b/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.cpp
index 7089e26754aa521..0643d004df17e68 100644
--- a/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.cpp
+++ b/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.cpp
@@ -12,6 +12,7 @@
#include "ELF.h"
+#include "Shared/APITypes.h"
#include "Shared/Debug.h"
#include "llvm/BinaryFormat/Magic.h"
diff --git a/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.h b/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.h
index 6b1ce434f0c4e18..b3740a104d6130d 100644
--- a/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.h
+++ b/openmp/libomptarget/plugins-nextgen/common/src/Utils/ELF.h
@@ -13,7 +13,7 @@
#ifndef LLVM_OPENMP_LIBOMPTARGET_PLUGINS_ELF_UTILS_H
#define LLVM_OPENMP_LIBOMPTARGET_PLUGINS_ELF_UTILS_H
-#include "omptargetplugin.h"
+#include "Shared/PluginAPI.h"
#include "llvm/Object/ELF.h"
#include "llvm/Object/ELFObjectFile.h"
@@ -23,7 +23,7 @@ namespace elf {
/// Return non-zero, if the given \p image is an ELF object, which
/// e_machine matches \p target_id; return zero otherwise.
-EXTERN int32_t checkMachine(__tgt_device_image *Image, uint16_t TargetId);
+int32_t checkMachine(__tgt_device_image *Image, uint16_t TargetId);
/// Returns the symbol associated with the \p Name in the \p ELFObj. It will
/// first search for the hash sections to identify symbols from the hash table.
diff --git a/openmp/libomptarget/tools/kernelreplay/llvm-omp-kernel-replay.cpp b/openmp/libomptarget/tools/kernelreplay/llvm-omp-kernel-replay.cpp
index 5041173d21eba51..fc3ff078a81fb93 100644
--- a/openmp/libomptarget/tools/kernelreplay/llvm-omp-kernel-replay.cpp
+++ b/openmp/libomptarget/tools/kernelreplay/llvm-omp-kernel-replay.cpp
@@ -12,7 +12,9 @@
//===----------------------------------------------------------------------===//
#include "omptarget.h"
-#include "omptargetplugin.h"
+
+#include "Shared/PluginAPI.h"
+
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/JSON.h"
#include "llvm/Support/MemoryBuffer.h"
More information about the Openmp-commits
mailing list