[OpenMP] Adds omp_target_is_accessible routine by nicebert · Pull Request #138294 · llvm/llvm-project (original) (raw)

@llvm/pr-subscribers-clang
@llvm/pr-subscribers-backend-amdgpu

@llvm/pr-subscribers-offload

Author: None (nicebert)

Changes

Adds omp_target_is_accessible routine.
Refactors common code from omp_target_is_present to work for both routines.


Full diff: https://github.com/llvm/llvm-project/pull/138294.diff

5 Files Affected:

diff --git a/offload/include/omptarget.h b/offload/include/omptarget.h index 6971780c7bdb5..8af8c4f659b35 100644 --- a/offload/include/omptarget.h +++ b/offload/include/omptarget.h @@ -280,6 +280,7 @@ int omp_get_initial_device(void); void *omp_target_alloc(size_t Size, int DeviceNum); void omp_target_free(void *DevicePtr, int DeviceNum); int omp_target_is_present(const void *Ptr, int DeviceNum); +int omp_target_is_accessible(const void *Ptr, size_t Size, int DeviceNum); int omp_target_memcpy(void *Dst, const void *Src, size_t Length, size_t DstOffset, size_t SrcOffset, int DstDevice, int SrcDevice); diff --git a/offload/libomptarget/OpenMP/API.cpp b/offload/libomptarget/OpenMP/API.cpp index 4576f9bd06121..a0a126004d3f9 100644 --- a/offload/libomptarget/OpenMP/API.cpp +++ b/offload/libomptarget/OpenMP/API.cpp @@ -39,6 +39,8 @@ EXTERN void ompx_dump_mapping_tables() { using namespace llvm::omp:🎯:ompt; #endif +int checkTargetAddressMapping(const void *Ptr, size_t Size, int DeviceNum, const char *Name); + void *targetAllocExplicit(size_t Size, int DeviceNum, int Kind, const char *Name); void targetFreeExplicit(void *DevicePtr, int DeviceNum, int Kind, @@ -168,33 +170,25 @@ EXTERN int omp_target_is_present(const void *Ptr, int DeviceNum) { DP("Call to omp_target_is_present for device %d and address " DPxMOD "\n", DeviceNum, DPxPTR(Ptr)); - if (!Ptr) { - DP("Call to omp_target_is_present with NULL ptr, returning false\n"); - return false; - }

+EXTERN int omp_target_is_accessible(const void *Ptr, size_t Size, int DeviceNum) {

diff --git a/offload/libomptarget/exports b/offload/libomptarget/exports index 2406776c1fb5f..0b770a2f1980a 100644 --- a/offload/libomptarget/exports +++ b/offload/libomptarget/exports @@ -37,6 +37,7 @@ VERS1.0 { __kmpc_push_target_tripcount_mapper; ompx_dump_mapping_tables; omp_get_mapped_ptr;

+int checkTargetAddressMapping(const void *Ptr, size_t Size, int DeviceNum, const char *Name) {

+#include +#include <omp.h> +#include <assert.h> + +// The runtime considers unified shared memory to be always present. +#pragma omp requires unified_shared_memory + +int main() { + int size = 10;