[Openmp-commits] [PATCH] D60972: [OpenMP 5.0] libomptarget interface for declare mapper functions
Lingda Li via Phabricator via Openmp-commits
openmp-commits at lists.llvm.org
Thu Jun 6 13:13:17 PDT 2019
lildmh updated this revision to Diff 203430.
lildmh added a comment.
Use __tgt instead of __kmpc
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D60972/new/
https://reviews.llvm.org/D60972
Files:
libomptarget/src/exports
libomptarget/src/interface.cpp
libomptarget/src/private.h
Index: libomptarget/src/private.h
===================================================================
--- libomptarget/src/private.h
+++ libomptarget/src/private.h
@@ -41,6 +41,24 @@
typedef enum kmp_target_offload_kind kmp_target_offload_kind_t;
extern kmp_target_offload_kind_t TargetOffloadPolicy;
+// This structure stores information of a mapped memory region.
+struct MapComponentInfoTy {
+ void *Base;
+ void *Begin;
+ int64_t Size;
+ int64_t Type;
+ MapComponentInfoTy() = default;
+ MapComponentInfoTy(void *Base, void *Begin, int64_t Size, int64_t Type)
+ : Base(Base), Begin(Begin), Size(Size), Type(Type) {}
+};
+
+// This structure stores all components of a user-defined mapper. The number of
+// components are dynamically decided, so we utilize C++ STL vector
+// implementation here.
+struct MapperComponentsTy {
+ std::vector<MapComponentInfoTy> Components;
+};
+
////////////////////////////////////////////////////////////////////////////////
// implemtation for fatal messages
////////////////////////////////////////////////////////////////////////////////
Index: libomptarget/src/interface.cpp
===================================================================
--- libomptarget/src/interface.cpp
+++ libomptarget/src/interface.cpp
@@ -304,6 +304,27 @@
arg_sizes, arg_types, team_num, thread_limit);
}
+// Get the current number of components for a user-defined mapper.
+EXTERN int64_t __tgt_mapper_num_components(void *rt_mapper_handle) {
+ auto *MapperComponentsPtr = (struct MapperComponentsTy *)rt_mapper_handle;
+ int64_t size = MapperComponentsPtr->Components.size();
+ DP("__tgt_mapper_num_components(Handle=" DPxMOD ") returns %" PRId64 "\n",
+ DPxPTR(rt_mapper_handle), size);
+ return size;
+}
+
+// Push back one component for a user-defined mapper.
+EXTERN void __tgt_push_mapper_component(void *rt_mapper_handle, void *base,
+ void *begin, int64_t size,
+ int64_t type) {
+ DP("__tgt_push_mapper_component(Handle=" DPxMOD
+ ") adds an entry (Base=" DPxMOD ", Begin=" DPxMOD ", Size=%" PRId64
+ ", Type=0x%" PRIx64 ").\n",
+ DPxPTR(rt_mapper_handle), DPxPTR(base), DPxPTR(begin), size, type);
+ auto *MapperComponentsPtr = (struct MapperComponentsTy *)rt_mapper_handle;
+ MapperComponentsPtr->Components.push_back(
+ MapComponentInfoTy(base, begin, size, type));
+}
// The trip count mechanism will be revised - this scheme is not thread-safe.
EXTERN void __kmpc_push_target_tripcount(int64_t device_id,
Index: libomptarget/src/exports
===================================================================
--- libomptarget/src/exports
+++ libomptarget/src/exports
@@ -13,6 +13,8 @@
__tgt_target_data_update_nowait;
__tgt_target_nowait;
__tgt_target_teams_nowait;
+ __tgt_mapper_num_components;
+ __tgt_push_mapper_component;
omp_get_num_devices;
omp_get_initial_device;
omp_target_alloc;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60972.203430.patch
Type: text/x-patch
Size: 3018 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20190606/3e8f8627/attachment.bin>
More information about the Openmp-commits
mailing list