P4 to Git Change 1591041 by vsytchen@vsytchen-win10 on 2018/08/08 18:46:17
SWDEV-159881 - [OCL][ROCm] Add SVM coarse-grain buffer support with device memory (Part 1) 1. Implement submitSvmFree/Copy/FillMemory. 2. Add macro IS_HIP that determines if the client is HIP. 3. Add setting enableCoarseGrainSVM that allows the use of device memory for coarse grain SVM allocations. 4. Set enableCoarseGrainSVM to be true only for HIP. ReviewBoardURL = http://ocltc.amd.com/reviews/r/15597/diff/ Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocdevice.cpp#93 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocmemory.cpp#37 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocsettings.cpp#35 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocsettings.hpp#15 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.cpp#61 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/rocm/rocvirtual.hpp#18 edit ... //depot/stg/opencl/drivers/opencl/runtime/utils/flags.hpp#294 edit ... //depot/stg/opencl/drivers/opencl/runtime/utils/macros.hpp#10 edit
Este commit está contenido en:
@@ -581,7 +581,27 @@ void Buffer::destroy() {
|
||||
return;
|
||||
}
|
||||
|
||||
const cl_mem_flags memFlags = owner()->getMemFlags();
|
||||
cl_mem_flags memFlags = owner()->getMemFlags();
|
||||
|
||||
if (owner()->getSvmPtr() != nullptr) {
|
||||
if (!dev().settings().enableCoarseGrainSVM_) {
|
||||
memFlags |= CL_MEM_SVM_FINE_GRAIN_BUFFER;
|
||||
}
|
||||
const bool isFineGrain = memFlags & CL_MEM_SVM_FINE_GRAIN_BUFFER;
|
||||
|
||||
if (isFineGrain) {
|
||||
dev().hostFree(deviceMemory_, size());
|
||||
} else {
|
||||
dev().memFree(deviceMemory_, size());
|
||||
}
|
||||
|
||||
if (dev().settings().apuSystem_ || !isFineGrain) {
|
||||
const_cast<Device&>(dev()).updateFreeMemory(size(), true);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#ifdef WITH_AMDGPU_PRO
|
||||
if ((memFlags & CL_MEM_USE_PERSISTENT_MEM_AMD) && dev().ProEna()) {
|
||||
dev().iPro().FreeDmaBuffer(deviceMemory_);
|
||||
@@ -628,6 +648,34 @@ bool Buffer::create() {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Allocate backing storage in device local memory unless UHP or AHP are set
|
||||
cl_mem_flags memFlags = owner()->getMemFlags();
|
||||
|
||||
if (owner()->getSvmPtr() != nullptr) {
|
||||
if (!dev().settings().enableCoarseGrainSVM_) {
|
||||
memFlags |= CL_MEM_SVM_FINE_GRAIN_BUFFER;
|
||||
flags_ |= HostMemoryDirectAccess;
|
||||
}
|
||||
const bool isFineGrain = memFlags & CL_MEM_SVM_FINE_GRAIN_BUFFER;
|
||||
|
||||
if (owner()->getSvmPtr() == reinterpret_cast<void*>(1)) {
|
||||
if (isFineGrain) {
|
||||
deviceMemory_ = dev().hostAlloc(size(), 1, false);
|
||||
} else {
|
||||
deviceMemory_ = dev().deviceLocalAlloc(size());
|
||||
}
|
||||
owner()->setSvmPtr(deviceMemory_);
|
||||
} else {
|
||||
deviceMemory_ = owner()->getSvmPtr();
|
||||
}
|
||||
|
||||
if (dev().settings().apuSystem_ || !isFineGrain) {
|
||||
const_cast<Device&>(dev()).updateFreeMemory(size(), false);
|
||||
}
|
||||
|
||||
return deviceMemory_ != nullptr;
|
||||
}
|
||||
|
||||
// Interop buffer
|
||||
if (owner()->isInterop()) return createInteropBuffer(GL_ARRAY_BUFFER, 0);
|
||||
|
||||
@@ -658,9 +706,6 @@ bool Buffer::create() {
|
||||
return true;
|
||||
}
|
||||
|
||||
// Allocate backing storage in device local memory unless UHP or AHP are set
|
||||
const cl_mem_flags memFlags = owner()->getMemFlags();
|
||||
|
||||
#ifdef WITH_AMDGPU_PRO
|
||||
if ((memFlags & CL_MEM_USE_PERSISTENT_MEM_AMD) && dev().ProEna()) {
|
||||
void* host_ptr = nullptr;
|
||||
|
||||
Referencia en una nueva incidencia
Block a user