[Openmp-commits] [openmp] r319968 - [libomptarget] Move header files and CMake library definition
Jonas Hahnfeld via Openmp-commits
openmp-commits at lists.llvm.org
Wed Dec 6 13:59:04 PST 2017
Author: hahnfeld
Date: Wed Dec 6 13:59:04 2017
New Revision: 319968
URL: http://llvm.org/viewvc/llvm-project?rev=319968&view=rev
Log:
[libomptarget] Move header files and CMake library definition
Future patches will add (private) header files in src/ that should
not be visible to plugins, so move the "public" ones to a new
include/ directory. This is still internal in a sense that the
contained files won't be installed for the user.
Similarly, the target agnostic offloading library should be built
directly in src/. The parent directory is responsible for finding
dependencies and including all subdirectories.
Differential Revision: https://reviews.llvm.org/D40797
Added:
openmp/trunk/libomptarget/include/
openmp/trunk/libomptarget/include/omptarget.h
- copied, changed from r319961, openmp/trunk/libomptarget/src/omptarget.h
openmp/trunk/libomptarget/include/omptargetplugin.h
- copied, changed from r319961, openmp/trunk/libomptarget/src/omptargetplugin.h
openmp/trunk/libomptarget/src/CMakeLists.txt
openmp/trunk/libomptarget/src/exports
- copied, changed from r319961, openmp/trunk/libomptarget/exports
Removed:
openmp/trunk/libomptarget/exports
openmp/trunk/libomptarget/src/omptarget.h
openmp/trunk/libomptarget/src/omptargetplugin.h
Modified:
openmp/trunk/libomptarget/CMakeLists.txt
Modified: openmp/trunk/libomptarget/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/CMakeLists.txt?rev=319968&r1=319967&r2=319968&view=diff
==============================================================================
--- openmp/trunk/libomptarget/CMakeLists.txt (original)
+++ openmp/trunk/libomptarget/CMakeLists.txt Wed Dec 6 13:59:04 2017
@@ -7,7 +7,7 @@
#
##===----------------------------------------------------------------------===##
#
-# Build offloading library libomptarget.so.
+# Build offloading library and related plugins.
#
##===----------------------------------------------------------------------===##
@@ -44,8 +44,6 @@ set (LIBOMPTARGET_SYSTEM_TARGETS "")
set(LIBOMPTARGET_BASE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
set(LIBOMPTARGET_BINARY_DIR ${CMAKE_CURRENT_BINARY_DIR})
-libomptarget_say("Building offloading runtime library libomptarget.")
-
# If building this library in debug mode, we define a macro to enable
# dumping progress messages at runtime.
string( TOLOWER "${CMAKE_BUILD_TYPE}" LIBOMPTARGET_CMAKE_BUILD_TYPE)
@@ -55,20 +53,10 @@ if(LIBOMPTARGET_CMAKE_BUILD_TYPE MATCHES
add_definitions(-O0)
endif()
-set(src_files
- src/omptarget.cpp
-)
-
-include_directories(src/)
-
-# Build libomptarget library with libdl dependency.
-add_library(omptarget SHARED ${src_files})
-target_link_libraries(omptarget
- ${CMAKE_DL_LIBS}
- "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports")
+include_directories(include)
-# Install libomptarget under the lib destination folder.
-install(TARGETS omptarget LIBRARY DESTINATION lib${OPENMP_LIBDIR_SUFFIX})
+# Build target agnostic offloading library.
+add_subdirectory(src)
# Retrieve the path to the resulting library so that it can be used for
# testing.
Removed: openmp/trunk/libomptarget/exports
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/exports?rev=319967&view=auto
==============================================================================
--- openmp/trunk/libomptarget/exports (original)
+++ openmp/trunk/libomptarget/exports (removed)
@@ -1,28 +0,0 @@
-VERS1.0 {
- global:
- __tgt_register_lib;
- __tgt_unregister_lib;
- __tgt_target_data_begin;
- __tgt_target_data_end;
- __tgt_target_data_update;
- __tgt_target;
- __tgt_target_teams;
- __tgt_target_data_begin_nowait;
- __tgt_target_data_end_nowait;
- __tgt_target_data_update_nowait;
- __tgt_target_nowait;
- __tgt_target_teams_nowait;
- omp_get_num_devices;
- omp_get_initial_device;
- omp_target_alloc;
- omp_target_free;
- omp_target_is_present;
- omp_target_memcpy;
- omp_target_memcpy_rect;
- omp_target_associate_ptr;
- omp_target_disassociate_ptr;
- __kmpc_push_target_tripcount;
- local:
- *;
-};
-
Copied: openmp/trunk/libomptarget/include/omptarget.h (from r319961, openmp/trunk/libomptarget/src/omptarget.h)
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/include/omptarget.h?p2=openmp/trunk/libomptarget/include/omptarget.h&p1=openmp/trunk/libomptarget/src/omptarget.h&r1=319961&r2=319968&rev=319968&view=diff
==============================================================================
--- openmp/trunk/libomptarget/src/omptarget.h (original)
+++ openmp/trunk/libomptarget/include/omptarget.h Wed Dec 6 13:59:04 2017
@@ -48,7 +48,7 @@ enum tgt_map_type {
OMP_TGT_MAPTYPE_LITERAL = 0x100,
// mapping is implicit
OMP_TGT_MAPTYPE_IMPLICIT = 0x200,
- // member of struct, member given by 4 MSBs - 1
+ // member of struct, member given by 16 MSBs - 1
OMP_TGT_MAPTYPE_MEMBER_OF = 0xffff000000000000
};
Copied: openmp/trunk/libomptarget/include/omptargetplugin.h (from r319961, openmp/trunk/libomptarget/src/omptargetplugin.h)
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/include/omptargetplugin.h?p2=openmp/trunk/libomptarget/include/omptargetplugin.h&p1=openmp/trunk/libomptarget/src/omptargetplugin.h&r1=319961&r2=319968&rev=319968&view=diff
==============================================================================
(empty)
Added: openmp/trunk/libomptarget/src/CMakeLists.txt
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/src/CMakeLists.txt?rev=319968&view=auto
==============================================================================
--- openmp/trunk/libomptarget/src/CMakeLists.txt (added)
+++ openmp/trunk/libomptarget/src/CMakeLists.txt Wed Dec 6 13:59:04 2017
@@ -0,0 +1,27 @@
+##===----------------------------------------------------------------------===##
+#
+# The LLVM Compiler Infrastructure
+#
+# This file is dual licensed under the MIT and the University of Illinois Open
+# Source Licenses. See LICENSE.txt for details.
+#
+##===----------------------------------------------------------------------===##
+#
+# Build offloading library libomptarget.so.
+#
+##===----------------------------------------------------------------------===##
+
+libomptarget_say("Building offloading runtime library libomptarget.")
+
+set(src_files
+ omptarget.cpp
+)
+
+# Build libomptarget library with libdl dependency.
+add_library(omptarget SHARED ${src_files})
+target_link_libraries(omptarget
+ ${CMAKE_DL_LIBS}
+ "-Wl,--version-script=${CMAKE_CURRENT_SOURCE_DIR}/exports")
+
+# Install libomptarget under the lib destination folder.
+install(TARGETS omptarget LIBRARY DESTINATION lib${OPENMP_LIBDIR_SUFFIX})
Copied: openmp/trunk/libomptarget/src/exports (from r319961, openmp/trunk/libomptarget/exports)
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/src/exports?p2=openmp/trunk/libomptarget/src/exports&p1=openmp/trunk/libomptarget/exports&r1=319961&r2=319968&rev=319968&view=diff
==============================================================================
(empty)
Removed: openmp/trunk/libomptarget/src/omptarget.h
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/src/omptarget.h?rev=319967&view=auto
==============================================================================
--- openmp/trunk/libomptarget/src/omptarget.h (original)
+++ openmp/trunk/libomptarget/src/omptarget.h (removed)
@@ -1,237 +0,0 @@
-//===-------- omptarget.h - Target independent OpenMP target RTL -- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.txt for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// Interface to be used by Clang during the codegen of a
-// target region.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _OMPTARGET_H_
-#define _OMPTARGET_H_
-
-#include <stdint.h>
-#include <stddef.h>
-
-#define OFFLOAD_SUCCESS (0)
-#define OFFLOAD_FAIL (~0)
-
-#define OFFLOAD_DEVICE_DEFAULT -1
-#define HOST_DEVICE -10
-
-/// Data attributes for each data reference used in an OpenMP target region.
-enum tgt_map_type {
- // No flags
- OMP_TGT_MAPTYPE_NONE = 0x000,
- // copy data from host to device
- OMP_TGT_MAPTYPE_TO = 0x001,
- // copy data from device to host
- OMP_TGT_MAPTYPE_FROM = 0x002,
- // copy regardless of the reference count
- OMP_TGT_MAPTYPE_ALWAYS = 0x004,
- // force unmapping of data
- OMP_TGT_MAPTYPE_DELETE = 0x008,
- // map the pointer as well as the pointee
- OMP_TGT_MAPTYPE_PTR_AND_OBJ = 0x010,
- // pass device base address to kernel
- OMP_TGT_MAPTYPE_TARGET_PARAM = 0x020,
- // return base device address of mapped data
- OMP_TGT_MAPTYPE_RETURN_PARAM = 0x040,
- // private variable - not mapped
- OMP_TGT_MAPTYPE_PRIVATE = 0x080,
- // copy by value - not mapped
- OMP_TGT_MAPTYPE_LITERAL = 0x100,
- // mapping is implicit
- OMP_TGT_MAPTYPE_IMPLICIT = 0x200,
- // member of struct, member given by 4 MSBs - 1
- OMP_TGT_MAPTYPE_MEMBER_OF = 0xffff000000000000
-};
-
-enum OpenMPOffloadingDeclareTargetFlags {
- /// Mark the entry as having a 'link' attribute.
- OMP_DECLARE_TARGET_LINK = 0x01,
- /// Mark the entry as being a global constructor.
- OMP_DECLARE_TARGET_CTOR = 0x02,
- /// Mark the entry as being a global destructor.
- OMP_DECLARE_TARGET_DTOR = 0x04
-};
-
-/// 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 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)
-};
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Implemented in libomp, they are called from within __tgt_* functions.
-int omp_get_default_device(void) __attribute__((weak));
-int32_t __kmpc_omp_taskwait(void *loc_ref, int32_t gtid) __attribute__((weak));
-
-int omp_get_num_devices(void);
-int omp_get_initial_device(void);
-void *omp_target_alloc(size_t size, int device_num);
-void omp_target_free(void *device_ptr, int device_num);
-int omp_target_is_present(void *ptr, int device_num);
-int omp_target_memcpy(void *dst, void *src, size_t length, size_t dst_offset,
- size_t src_offset, int dst_device, int src_device);
-int omp_target_memcpy_rect(void *dst, void *src, size_t element_size,
- int num_dims, const size_t *volume, const size_t *dst_offsets,
- const size_t *src_offsets, const size_t *dst_dimensions,
- const size_t *src_dimensions, int dst_device, int src_device);
-int omp_target_associate_ptr(void *host_ptr, void *device_ptr, size_t size,
- size_t device_offset, int device_num);
-int omp_target_disassociate_ptr(void *host_ptr, int device_num);
-
-/// adds a target shared library to the target execution image
-void __tgt_register_lib(__tgt_bin_desc *desc);
-
-/// removes a target shared library from the target execution image
-void __tgt_unregister_lib(__tgt_bin_desc *desc);
-
-// creates the host to target data mapping, stores it in the
-// libomptarget.so internal structure (an entry in a stack of data maps) and
-// passes the data to the device;
-void __tgt_target_data_begin(int64_t device_id, int32_t arg_num,
- void **args_base, void **args, int64_t *arg_sizes,
- int64_t *arg_types);
-void __tgt_target_data_begin_nowait(int64_t device_id, int32_t arg_num,
- void **args_base, void **args,
- int64_t *arg_sizes, int64_t *arg_types,
- int32_t depNum, void *depList,
- int32_t noAliasDepNum,
- void *noAliasDepList);
-
-// passes data from the target, release target memory and destroys the
-// host-target mapping (top entry from the stack of data maps) created by
-// the last __tgt_target_data_begin
-void __tgt_target_data_end(int64_t device_id, int32_t arg_num, void **args_base,
- void **args, int64_t *arg_sizes, int64_t *arg_types);
-void __tgt_target_data_end_nowait(int64_t device_id, int32_t arg_num,
- void **args_base, void **args,
- int64_t *arg_sizes, int64_t *arg_types,
- int32_t depNum, void *depList,
- int32_t noAliasDepNum, void *noAliasDepList);
-
-/// passes data to/from the target
-void __tgt_target_data_update(int64_t device_id, int32_t arg_num,
- void **args_base, void **args, int64_t *arg_sizes,
- int64_t *arg_types);
-void __tgt_target_data_update_nowait(int64_t device_id, int32_t arg_num,
- void **args_base, void **args,
- int64_t *arg_sizes, int64_t *arg_types,
- int32_t depNum, void *depList,
- int32_t noAliasDepNum,
- void *noAliasDepList);
-
-// Performs the same actions as data_begin in case arg_num is non-zero
-// and initiates run of offloaded region on target platform; if arg_num
-// is non-zero after the region execution is done it also performs the
-// same action as data_end above. The following types are used; this
-// function returns 0 if it was able to transfer the execution to a
-// target and an int different from zero otherwise.
-int __tgt_target(int64_t device_id, void *host_ptr, int32_t arg_num,
- void **args_base, void **args, int64_t *arg_sizes,
- int64_t *arg_types);
-int __tgt_target_nowait(int64_t device_id, void *host_ptr, int32_t arg_num,
- void **args_base, void **args, int64_t *arg_sizes,
- int64_t *arg_types, int32_t depNum, void *depList,
- int32_t noAliasDepNum, void *noAliasDepList);
-
-int __tgt_target_teams(int64_t device_id, void *host_ptr, int32_t arg_num,
- void **args_base, void **args, int64_t *arg_sizes,
- int64_t *arg_types, int32_t num_teams,
- int32_t thread_limit);
-int __tgt_target_teams_nowait(int64_t device_id, void *host_ptr,
- int32_t arg_num, void **args_base, void **args,
- int64_t *arg_sizes, int64_t *arg_types,
- int32_t num_teams, int32_t thread_limit,
- int32_t depNum, void *depList,
- int32_t noAliasDepNum, void *noAliasDepList);
-void __kmpc_push_target_tripcount(int64_t device_id, uint64_t loop_tripcount);
-
-#ifdef __cplusplus
-}
-#endif
-
-#ifdef OMPTARGET_DEBUG
-#include <stdio.h>
-#define DEBUGP(prefix, ...) \
- { \
- fprintf(stderr, "%s --> ", prefix); \
- fprintf(stderr, __VA_ARGS__); \
- }
-
-#ifndef __STDC_FORMAT_MACROS
-#define __STDC_FORMAT_MACROS
-#endif
-
-#include <inttypes.h>
-#define DPxMOD "0x%0*" PRIxPTR
-#define DPxPTR(ptr) ((int)(2*sizeof(uintptr_t))), ((uintptr_t) (ptr))
-
-/*
- * To printf a pointer in hex with a fixed width of 16 digits and a leading 0x,
- * use printf("ptr=" DPxMOD "...\n", DPxPTR(ptr));
- *
- * DPxMOD expands to:
- * "0x%0*" PRIxPTR
- * where PRIxPTR expands to an appropriate modifier for the type uintptr_t on a
- * specific platform, e.g. "lu" if uintptr_t is typedef'd as unsigned long:
- * "0x%0*lu"
- *
- * Ultimately, the whole statement expands to:
- * printf("ptr=0x%0*lu...\n", // the 0* modifier expects an extra argument
- * // specifying the width of the output
- * (int)(2*sizeof(uintptr_t)), // the extra argument specifying the width
- * // 8 digits for 32bit systems
- * // 16 digits for 64bit
- * (uintptr_t) ptr);
- */
-#else
-#define DEBUGP(prefix, ...) \
- {}
-#endif
-
-#ifdef __cplusplus
-#define EXTERN extern "C"
-#else
-#define EXTERN extern
-#endif
-
-#endif // _OMPTARGET_H_
Removed: openmp/trunk/libomptarget/src/omptargetplugin.h
URL: http://llvm.org/viewvc/llvm-project/openmp/trunk/libomptarget/src/omptargetplugin.h?rev=319967&view=auto
==============================================================================
--- openmp/trunk/libomptarget/src/omptargetplugin.h (original)
+++ openmp/trunk/libomptarget/src/omptargetplugin.h (removed)
@@ -1,92 +0,0 @@
-//===-- omptargetplugin.h - Target dependent OpenMP Plugin API --*- C++ -*-===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is dual licensed under the MIT and the University of Illinois Open
-// Source Licenses. See LICENSE.txt for details.
-//
-//===----------------------------------------------------------------------===//
-//
-// This file defines an interface between target independent OpenMP offload
-// runtime library libomptarget and target dependent plugin.
-//
-//===----------------------------------------------------------------------===//
-
-#ifndef _OMPTARGETPLUGIN_H_
-#define _OMPTARGETPLUGIN_H_
-
-#include <omptarget.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-// Return the number of available devices of the type supported by the
-// target RTL.
-int32_t __tgt_rtl_number_of_devices(void);
-
-// Return an integer different from zero if the provided device image can be
-// supported by the runtime. The functionality is similar to comparing the
-// result of __tgt__rtl__load__binary to NULL. However, this is meant to be a
-// lightweight query to determine if the RTL is suitable for an image without
-// having to load the library, which can be expensive.
-int32_t __tgt_rtl_is_valid_binary(__tgt_device_image *Image);
-
-// Initialize the specified device. In case of success return 0; otherwise
-// return an error code.
-int32_t __tgt_rtl_init_device(int32_t ID);
-
-// Pass an executable image section described by image to the specified
-// device and prepare an address table of target entities. In case of error,
-// return NULL. Otherwise, return a pointer to the built address table.
-// Individual entries in the table may also be NULL, when the corresponding
-// offload region is not supported on the target device.
-__tgt_target_table *__tgt_rtl_load_binary(int32_t ID,
- __tgt_device_image *Image);
-
-// Allocate data on the particular target device, of the specified size.
-// HostPtr is a address of the host data the allocated target data
-// will be associated with (HostPtr may be NULL if it is not known at
-// allocation time, like for example it would be for target data that
-// is allocated by omp_target_alloc() API). Return address of the
-// allocated data on the target that will be used by libomptarget.so to
-// initialize the target data mapping structures. These addresses are
-// used to generate a table of target variables to pass to
-// __tgt_rtl_run_region(). The __tgt_rtl_data_alloc() returns NULL in
-// case an error occurred on the target device.
-void *__tgt_rtl_data_alloc(int32_t ID, int64_t Size, void *HostPtr);
-
-// Pass the data content to the target device using the target address.
-// In case of success, return zero. Otherwise, return an error code.
-int32_t __tgt_rtl_data_submit(int32_t ID, void *TargetPtr, void *HostPtr,
- int64_t Size);
-
-// Retrieve the data content from the target device using its address.
-// In case of success, return zero. Otherwise, return an error code.
-int32_t __tgt_rtl_data_retrieve(int32_t ID, void *HostPtr, void *TargetPtr,
- int64_t Size);
-
-// De-allocate the data referenced by target ptr on the device. In case of
-// success, return zero. Otherwise, return an error code.
-int32_t __tgt_rtl_data_delete(int32_t ID, void *TargetPtr);
-
-// Transfer control to the offloaded entry Entry on the target device.
-// Args and Offsets are arrays of NumArgs size of target addresses and
-// offsets. An offset should be added to the target address before passing it
-// to the outlined function on device side. In case of success, return zero.
-// Otherwise, return an error code.
-int32_t __tgt_rtl_run_target_region(int32_t ID, void *Entry, void **Args,
- ptrdiff_t *Offsets, int32_t NumArgs);
-
-// Similar to __tgt_rtl_run_target_region, but additionally specify the
-// number of teams to be created and a number of threads in each team.
-int32_t __tgt_rtl_run_target_team_region(int32_t ID, void *Entry, void **Args,
- ptrdiff_t *Offsets, int32_t NumArgs,
- int32_t NumTeams, int32_t ThreadLimit,
- uint64_t loop_tripcount);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // _OMPTARGETPLUGIN_H_
More information about the Openmp-commits
mailing list