[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
Mon Jun 3 12:43:02 PDT 2019
lildmh updated this revision to Diff 202777.
lildmh edited the summary of this revision.
lildmh added a comment.
Implement the new mapper scheme.
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 __kmpc_mapper_num_components(void *rt_mapper_handle) {
+ auto *MapperComponentsPtr = (struct MapperComponentsTy *)rt_mapper_handle;
+ int64_t size = MapperComponentsPtr->Components.size();
+ DP("__kmpc_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 __kmpc_push_mapper_component(void *rt_mapper_handle, void *base,
+ void *begin, int64_t size,
+ int64_t type) {
+ DP("__kmpc_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
@@ -22,6 +22,8 @@
omp_target_memcpy_rect;
omp_target_associate_ptr;
omp_target_disassociate_ptr;
+ __kmpc_mapper_num_components;
+ __kmpc_push_mapper_component;
__kmpc_push_target_tripcount;
local:
*;
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D60972.202777.patch
Type: text/x-patch
Size: 2999 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/openmp-commits/attachments/20190603/a11502d3/attachment.bin>
More information about the Openmp-commits
mailing list