P4 to Git Change 1544061 by skudchad@skudchad_test2_win_opencl on 2018/04/19 18:24:45

SWDEV-145570 - [HIP] - Add some hip_mem* APIs

	ReviewBoardURL = http://ocltc.amd.com/reviews/r/14647/diff/

Affected files ...

... //depot/stg/opencl/drivers/opencl/api/hip/hip_memory.cpp#10 edit
This commit is contained in:
foreman
2018-04-19 18:35:00 -04:00
förälder 63babe9e66
incheckning 3ce752065a
+108 -17
Visa fil
@@ -21,8 +21,10 @@ THE SOFTWARE.
*/
#include <hip/hip_runtime.h>
#include "hip_internal.hpp"
#include "platform/context.hpp"
#include "platform/command.hpp"
#include "platform/memory.hpp"
hipError_t ihipMalloc(void** ptr, size_t sizeBytes, unsigned int flags)
{
@@ -119,7 +121,7 @@ hipError_t hipMemcpy(void* dst, const void* src, size_t sizeBytes, hipMemcpyKind
return hipSuccess;
}
hipError_t hipMemsetAsync(void* dst, int value, size_t sizeBytes, hipStream_t stream) {
hipError_t hipMemsetAsync(void* dst, int value, size_t sizeBytes, hipStream_t stream) {
HIP_INIT_API(dst, value, sizeBytes, stream);
assert(0 && "Unimplemented");
@@ -130,9 +132,36 @@ hipError_t hipMemsetAsync(void* dst, int value, size_t sizeBytes, hipStream_t s
hipError_t hipMemset(void* dst, int value, size_t sizeBytes) {
HIP_INIT_API(dst, value, sizeBytes);
assert(0 && "Unimplemented");
amd::Device* device = g_context->devices()[0];
return hipErrorUnknown;
amd::HostQueue* queue = new amd::HostQueue(*g_context, *device, 0,
amd::CommandQueue::RealTimeDisabled,
amd::CommandQueue::Priority::Normal);
if (!queue) {
return hipErrorOutOfMemory;
}
amd::Command::EventWaitList waitList;
amd::Memory* memory = amd::SvmManager::FindSvmBuffer(dst);
amd::Coord3D fillOffset(0, 0, 0);
amd::Coord3D fillSize(sizeBytes, 1, 1);
amd::FillMemoryCommand* command =
new amd::FillMemoryCommand(*queue, CL_COMMAND_FILL_BUFFER, waitList, *memory->asBuffer(),
&value, sizeof(int), fillOffset, fillSize);
if (!command) {
return hipErrorOutOfMemory;
}
command->enqueue();
command->awaitCompletion();
command->release();
queue->release();
return hipSuccess;
}
hipError_t hipMemPtrGetInfo(void *ptr, size_t *size) {
@@ -146,17 +175,21 @@ hipError_t hipMemPtrGetInfo(void *ptr, size_t *size) {
hipError_t hipHostFree(void* ptr) {
HIP_INIT_API(ptr);
assert(0 && "Unimplemented");
return hipErrorUnknown;
if (amd::SvmBuffer::malloced(ptr)) {
amd::SvmBuffer::free(*g_context, ptr);
return hipSuccess;
}
return hipErrorInvalidValue;
}
hipError_t hipFreeArray(hipArray* array) {
HIP_INIT_API(array);
assert(0 && "Unimplemented");
return hipErrorUnknown;
if (amd::SvmBuffer::malloced(array->data)) {
amd::SvmBuffer::free(*g_context, array->data);
return hipSuccess;
}
return hipErrorInvalidValue;
}
hipError_t hipMemGetAddressRange(hipDeviceptr_t* pbase, size_t* psize, hipDeviceptr_t dptr) {
@@ -170,25 +203,83 @@ hipError_t hipMemGetAddressRange(hipDeviceptr_t* pbase, size_t* psize, hipDevice
hipError_t hipMemGetInfo(size_t* free, size_t* total) {
HIP_INIT_API(free, total);
assert(0 && "Unimplemented");
size_t freeMemory[2];
amd::Device* device = g_context->devices()[0];
if(!device) {
return hipErrorInvalidDevice;
}
return hipErrorUnknown;
if(!device->globalFreeMemory(freeMemory)) {
return hipErrorInvalidValue;
}
*free = freeMemory[0];
*total = device->info().globalMemSize_;
return hipSuccess;
}
hipError_t ihipMallocPitch(void** ptr, size_t* pitch, size_t width, size_t height, size_t depth,
cl_mem_object_type imageType) {
amd::Device* device = g_context->devices()[0];
if ((width == 0) || (height == 0)) {
*ptr = nullptr;
return hipSuccess;
}
else if (!(device->info().image2DMaxWidth_ >= width &&
device->info().image2DMaxHeight_ >= height ) || (ptr == nullptr)) {
return hipErrorInvalidValue;
}
if (g_context->devices()[0]->info().maxMemAllocSize_ < (width * height)) {
return hipErrorOutOfMemory;
}
const cl_image_format image_format = { CL_R, CL_UNSIGNED_INT8 };
const amd::Image::Format imageFormat(image_format);
*pitch = width * imageFormat.getElementSize();
size_t sizeBytes = *pitch * height;
*ptr = amd::SvmBuffer::malloc(*g_context, CL_MEM_SVM_FINE_GRAIN_BUFFER, sizeBytes,
g_context->devices()[0]->info().memBaseAddrAlign_);
if (!*ptr) {
return hipErrorOutOfMemory;
}
return hipSuccess;
}
hipError_t hipMallocPitch(void** ptr, size_t* pitch, size_t width, size_t height) {
HIP_INIT_API(ptr, pitch, width, height);
assert(0 && "Unimplemented");
return hipErrorUnknown;
return ihipMallocPitch(ptr, pitch, width, height, 1, CL_MEM_OBJECT_IMAGE2D);
}
hipError_t hipMalloc3D(hipPitchedPtr* pitchedDevPtr, hipExtent extent) {
HIP_INIT_API(pitchedDevPtr, &extent);
assert(0 && "Unimplemented");
size_t pitch = 0;
return hipErrorUnknown;
if (pitchedDevPtr == nullptr) {
return hipErrorInvalidValue;
}
hipError_t status = hipSuccess;
status = ihipMallocPitch(&pitchedDevPtr->ptr, &pitch, extent.width, extent.height, extent.depth,
CL_MEM_OBJECT_IMAGE3D);
if (status == hipSuccess) {
pitchedDevPtr->pitch = pitch;
pitchedDevPtr->xsize = extent.width;
pitchedDevPtr->ysize = extent.height;
}
return status;
}
hipError_t hipArrayCreate(hipArray** array, const HIP_ARRAY_DESCRIPTOR* pAllocateArray) {