SWDEV-269784 - managed memory support for HIP CUDA

Change-Id: I01f9fc64573f402031eceab24395e5cbd93007f9
Este commit está contenido en:
Satyanvesh Dittakavi
2021-01-27 09:00:28 -05:00
padre 464cad2751
commit 25cccbb60d
+88
Ver fichero
@@ -63,6 +63,22 @@ typedef enum hipMemcpyKind {
hipMemcpyDefault
} hipMemcpyKind;
typedef enum hipMemoryAdvise {
hipMemAdviseSetReadMostly,
hipMemAdviseUnsetReadMostly,
hipMemAdviseSetPreferredLocation,
hipMemAdviseUnsetPreferredLocation,
hipMemAdviseSetAccessedBy,
hipMemAdviseUnsetAccessedBy
} hipMemoryAdvise;
typedef enum hipMemRangeAttribute {
hipMemRangeAttributeReadMostly,
hipMemRangeAttributePreferredLocation,
hipMemRangeAttributeAccessedBy,
hipMemRangeAttributeLastPrefetchLocation
} hipMemRangeAttribute;
// hipDataType
#define hipDataType cudaDataType
#define HIP_R_16F CUDA_R_16F
@@ -250,6 +266,7 @@ typedef enum cudaChannelFormatKind hipChannelFormatKind;
#define hipMemAttachGlobal cudaMemAttachGlobal
#define hipMemAttachHost cudaMemAttachHost
#define hipMemAttachSingle cudaMemAttachSingle
#define hipHostRegisterDefault cudaHostRegisterDefault
#define hipHostRegisterPortable cudaHostRegisterPortable
@@ -336,6 +353,8 @@ typedef cudaSurfaceObject_t hipSurfaceObject_t;
#define hipTextureType3D cudaTextureType3D
#define hipDeviceMapHost cudaDeviceMapHost
#define hipCpuDeviceId cudaCpuDeviceId
#define hipInvalidDeviceId cudaInvalidDeviceId
typedef struct cudaExtent hipExtent;
typedef struct cudaPitchedPtr hipPitchedPtr;
#define make_hipExtent make_cudaExtent
@@ -798,6 +817,42 @@ inline static enum cudaTextureAddressMode hipTextureAddressModeToCudaTextureAddr
}
}
inline static enum cudaMemRangeAttribute hipMemRangeAttributeTocudaMemRangeAttribute(
hipMemRangeAttribute kind) {
switch (kind) {
case hipMemRangeAttributeReadMostly:
return cudaMemRangeAttributeReadMostly;
case hipMemRangeAttributePreferredLocation:
return cudaMemRangeAttributePreferredLocation;
case hipMemRangeAttributeAccessedBy:
return cudaMemRangeAttributeAccessedBy;
case hipMemRangeAttributeLastPrefetchLocation:
return cudaMemRangeAttributeLastPrefetchLocation;
default:
return cudaMemRangeAttributeReadMostly;
}
}
inline static enum cudaMemoryAdvise hipMemoryAdviseTocudaMemoryAdvise(
hipMemoryAdvise kind) {
switch (kind) {
case hipMemAdviseSetReadMostly:
return cudaMemAdviseSetReadMostly;
case hipMemAdviseUnsetReadMostly :
return cudaMemAdviseUnsetReadMostly ;
case hipMemAdviseSetPreferredLocation:
return cudaMemAdviseSetPreferredLocation;
case hipMemAdviseUnsetPreferredLocation:
return cudaMemAdviseUnsetPreferredLocation;
case hipMemAdviseSetAccessedBy:
return cudaMemAdviseSetAccessedBy;
case hipMemAdviseUnsetAccessedBy:
return cudaMemAdviseUnsetAccessedBy;
default:
return cudaMemAdviseSetReadMostly;
}
}
inline static enum cudaTextureFilterMode hipTextureFilterModeToCudaTextureFilterMode(
hipTextureFilterMode kind) {
switch (kind) {
@@ -894,6 +949,39 @@ inline static hipError_t hipHostMalloc(void** ptr, size_t size, unsigned int fla
return hipCUDAErrorTohipError(cudaHostAlloc(ptr, size, flags));
}
inline static hipError_t hipMemAdvise(const void* dev_ptr, size_t count, hipMemoryAdvise advice,
int device) {
return hipCUDAErrorTohipError(cudaMemAdvise(dev_ptr, count,
hipMemoryAdviseTocudaMemoryAdvise(advice), device));
}
inline static hipError_t hipMemPrefetchAsync(const void* dev_ptr, size_t count, int device,
hipStream_t stream __dparm(0)) {
return hipCUDAErrorTohipError(cudaMemPrefetchAsync(dev_ptr, count, device, stream));
}
inline static hipError_t hipMemRangeGetAttribute(void* data, size_t data_size,
hipMemRangeAttribute attribute,
const void* dev_ptr, size_t count) {
return hipCUDAErrorTohipError(cudaMemRangeGetAttribute(data, data_size,
hipMemRangeAttributeTocudaMemRangeAttribute(attribute), dev_ptr, count));
}
inline static hipError_t hipMemRangeGetAttributes(void** data, size_t* data_sizes,
hipMemRangeAttribute* attributes,
size_t num_attributes, const void* dev_ptr,
size_t count) {
auto attrs = hipMemRangeAttributeTocudaMemRangeAttribute(*attributes);
return hipCUDAErrorTohipError(cudaMemRangeGetAttributes(data, data_sizes, &attrs,
num_attributes, dev_ptr, count));
}
inline static hipError_t hipStreamAttachMemAsync(hipStream_t stream, hipDeviceptr_t* dev_ptr,
size_t length __dparm(0),
unsigned int flags __dparm(hipMemAttachSingle)) {
return hipCUDAErrorTohipError(cudaStreamAttachMemAsync(stream, dev_ptr, length, flags));
}
inline static hipError_t hipMallocManaged(void** ptr, size_t size, unsigned int flags) {
return hipCUDAErrorTohipError(cudaMallocManaged(ptr, size, flags));
}