mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 06:06:34 +08:00
[OpenMP] Add omp_target_is_accessible() to header files
-- Added omp_target_is_accessible to the header files -- Added missing const qualifier to device memory routines Differential Revision: https://reviews.llvm.org/D100420
This commit is contained in:
@@ -184,18 +184,19 @@ 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 omp_target_is_present(const void *ptr, int device_num);
|
||||
int omp_target_memcpy(void *dst, const 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, const 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);
|
||||
int omp_target_associate_ptr(const void *host_ptr, const void *device_ptr,
|
||||
size_t size, size_t device_offset, int device_num);
|
||||
int omp_target_disassociate_ptr(const void *host_ptr, int device_num);
|
||||
|
||||
/// Explicit target memory allocators
|
||||
/// Using the llvm_ prefix until they become part of the OpenMP standard.
|
||||
|
||||
@@ -78,7 +78,7 @@ EXTERN void omp_target_free(void *device_ptr, int device_num) {
|
||||
DP("omp_target_free deallocated device ptr\n");
|
||||
}
|
||||
|
||||
EXTERN int omp_target_is_present(void *ptr, int device_num) {
|
||||
EXTERN int omp_target_is_present(const void *ptr, int device_num) {
|
||||
TIMESCOPE();
|
||||
DP("Call to omp_target_is_present for device %d and address " DPxMOD "\n",
|
||||
device_num, DPxPTR(ptr));
|
||||
@@ -105,7 +105,8 @@ EXTERN int omp_target_is_present(void *ptr, int device_num) {
|
||||
DeviceTy &Device = PM->Devices[device_num];
|
||||
bool IsLast; // not used
|
||||
bool IsHostPtr;
|
||||
void *TgtPtr = Device.getTgtPtrBegin(ptr, 0, IsLast, false, IsHostPtr);
|
||||
void *TgtPtr = Device.getTgtPtrBegin(const_cast<void *>(ptr), 0, IsLast,
|
||||
false, IsHostPtr);
|
||||
int rc = (TgtPtr != NULL);
|
||||
// Under unified memory the host pointer can be returned by the
|
||||
// getTgtPtrBegin() function which means that there is no device
|
||||
@@ -117,7 +118,7 @@ EXTERN int omp_target_is_present(void *ptr, int device_num) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
EXTERN int omp_target_memcpy(void *dst, void *src, size_t length,
|
||||
EXTERN int omp_target_memcpy(void *dst, const void *src, size_t length,
|
||||
size_t dst_offset, size_t src_offset,
|
||||
int dst_device, int src_device) {
|
||||
TIMESCOPE();
|
||||
@@ -148,7 +149,7 @@ EXTERN int omp_target_memcpy(void *dst, void *src, size_t length,
|
||||
}
|
||||
|
||||
int rc = OFFLOAD_SUCCESS;
|
||||
void *srcAddr = (char *)src + src_offset;
|
||||
void *srcAddr = (char *)const_cast<void *>(src) + src_offset;
|
||||
void *dstAddr = (char *)dst + dst_offset;
|
||||
|
||||
if (src_device == omp_get_initial_device() &&
|
||||
@@ -196,13 +197,11 @@ EXTERN int omp_target_memcpy(void *dst, void *src, size_t length,
|
||||
return rc;
|
||||
}
|
||||
|
||||
EXTERN 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) {
|
||||
EXTERN int omp_target_memcpy_rect(
|
||||
void *dst, const 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) {
|
||||
TIMESCOPE();
|
||||
DP("Call to omp_target_memcpy_rect, dst device %d, src device %d, "
|
||||
"dst addr " DPxMOD ", src addr " DPxMOD ", dst offsets " DPxMOD ", "
|
||||
@@ -242,9 +241,10 @@ EXTERN int omp_target_memcpy_rect(void *dst, void *src, size_t element_size,
|
||||
for (size_t i = 0; i < volume[0]; ++i) {
|
||||
rc = omp_target_memcpy_rect(
|
||||
(char *)dst + dst_off + dst_slice_size * i,
|
||||
(char *)src + src_off + src_slice_size * i, element_size,
|
||||
num_dims - 1, volume + 1, dst_offsets + 1, src_offsets + 1,
|
||||
dst_dimensions + 1, src_dimensions + 1, dst_device, src_device);
|
||||
(char *)const_cast<void *>(src) + src_off + src_slice_size * i,
|
||||
element_size, num_dims - 1, volume + 1, dst_offsets + 1,
|
||||
src_offsets + 1, dst_dimensions + 1, src_dimensions + 1, dst_device,
|
||||
src_device);
|
||||
|
||||
if (rc) {
|
||||
DP("Recursive call to omp_target_memcpy_rect returns unsuccessfully\n");
|
||||
@@ -257,9 +257,9 @@ EXTERN int omp_target_memcpy_rect(void *dst, void *src, size_t element_size,
|
||||
return rc;
|
||||
}
|
||||
|
||||
EXTERN int omp_target_associate_ptr(void *host_ptr, void *device_ptr,
|
||||
size_t size, size_t device_offset,
|
||||
int device_num) {
|
||||
EXTERN int omp_target_associate_ptr(const void *host_ptr,
|
||||
const void *device_ptr, size_t size,
|
||||
size_t device_offset, int device_num) {
|
||||
TIMESCOPE();
|
||||
DP("Call to omp_target_associate_ptr with host_ptr " DPxMOD ", "
|
||||
"device_ptr " DPxMOD ", size %zu, device_offset %zu, device_num %d\n",
|
||||
@@ -282,12 +282,13 @@ EXTERN int omp_target_associate_ptr(void *host_ptr, void *device_ptr,
|
||||
|
||||
DeviceTy &Device = PM->Devices[device_num];
|
||||
void *device_addr = (void *)((uint64_t)device_ptr + (uint64_t)device_offset);
|
||||
int rc = Device.associatePtr(host_ptr, device_addr, size);
|
||||
int rc = Device.associatePtr(const_cast<void *>(host_ptr),
|
||||
const_cast<void *>(device_addr), size);
|
||||
DP("omp_target_associate_ptr returns %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
EXTERN int omp_target_disassociate_ptr(void *host_ptr, int device_num) {
|
||||
EXTERN int omp_target_disassociate_ptr(const void *host_ptr, int device_num) {
|
||||
TIMESCOPE();
|
||||
DP("Call to omp_target_disassociate_ptr with host_ptr " DPxMOD ", "
|
||||
"device_num %d\n",
|
||||
@@ -310,7 +311,7 @@ EXTERN int omp_target_disassociate_ptr(void *host_ptr, int device_num) {
|
||||
}
|
||||
|
||||
DeviceTy &Device = PM->Devices[device_num];
|
||||
int rc = Device.disassociatePtr(host_ptr);
|
||||
int rc = Device.disassociatePtr(const_cast<void *>(host_ptr));
|
||||
DP("omp_target_disassociate_ptr returns %d\n", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
@@ -141,12 +141,12 @@
|
||||
extern int __KAI_KMPC_CONVENTION omp_get_initial_device (void);
|
||||
extern void* __KAI_KMPC_CONVENTION omp_target_alloc(size_t, int);
|
||||
extern void __KAI_KMPC_CONVENTION omp_target_free(void *, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_is_present(void *, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_memcpy(void *, void *, size_t, size_t, size_t, int, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect(void *, void *, size_t, int, const size_t *,
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_is_present(const void *, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_memcpy(void *, const void *, size_t, size_t, size_t, int, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_memcpy_rect(void *, const void *, size_t, int, const size_t *,
|
||||
const size_t *, const size_t *, const size_t *, const size_t *, int, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(void *, void *, size_t, size_t, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(void *, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_associate_ptr(const void *, const void *, size_t, size_t, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_disassociate_ptr(const void *, int);
|
||||
|
||||
/* OpenMP 5.0 */
|
||||
extern int __KAI_KMPC_CONVENTION omp_get_device_num (void);
|
||||
@@ -230,6 +230,7 @@
|
||||
* The `omp_get_mapped_ptr` routine returns the device pointer that is associated with a host pointer for a given device.
|
||||
*/
|
||||
extern void * __KAI_KMPC_CONVENTION omp_get_mapped_ptr(const void *, int);
|
||||
extern int __KAI_KMPC_CONVENTION omp_target_is_accessible(const void *, size_t, int);
|
||||
|
||||
/* kmp API functions */
|
||||
extern int __KAI_KMPC_CONVENTION kmp_get_stacksize (void);
|
||||
|
||||
@@ -629,6 +629,15 @@
|
||||
integer(c_int), value :: device_num
|
||||
end function omp_target_disassociate_ptr
|
||||
|
||||
function omp_target_is_accessible(ptr, size, device_num) bind(c)
|
||||
use omp_lib_kinds
|
||||
use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
|
||||
integer(c_int) omp_target_is_accessible
|
||||
type(c_ptr), value :: ptr
|
||||
integer(c_size_t), value :: size
|
||||
integer(c_int), value :: device_num
|
||||
end function omp_target_is_accessible
|
||||
|
||||
! ***
|
||||
! *** kmp_* entry points
|
||||
! ***
|
||||
|
||||
@@ -715,6 +715,14 @@
|
||||
integer(c_int), value :: device_num
|
||||
end function omp_target_disassociate_ptr
|
||||
|
||||
function omp_target_is_accessible(ptr, size, device_num) bind(c)
|
||||
use, intrinsic :: iso_c_binding, only : c_ptr, c_size_t, c_int
|
||||
integer(c_int) omp_target_is_accessible
|
||||
type(c_ptr), value :: ptr
|
||||
integer(c_size_t), value :: size
|
||||
integer(c_int), value :: device_num
|
||||
end function omp_target_is_accessible
|
||||
|
||||
! ***
|
||||
! *** kmp_* entry points
|
||||
! ***
|
||||
|
||||
Reference in New Issue
Block a user