P4 to Git Change 1257532 by gandryey@gera-ocl on 2016/04/13 13:18:22
SWDEV-92049 - Forum [2712399]: clEnqueueMapBuffer in parallel
- Handle multiple unmapInfo structures of multiple simultaneous maps of the same buffer
- The change didn't affect images path, since it requires extra handling
Affected files ...
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_memobj.cpp#79 edit
... //depot/stg/opencl/drivers/opencl/api/opencl/amdocl/cl_svm.cpp#16 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.cpp#194 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/device.hpp#271 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpumemory.cpp#126 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#399 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hsa_foundation/hsamemory.cpp#25 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hsa_foundation/hsamemory.hpp#10 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/hsa_foundation/hsavirtual.cpp#64 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palmemory.cpp#2 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palvirtual.cpp#4 edit
... //depot/stg/opencl/drivers/opencl/runtime/platform/command.hpp#82 edit
[ROCm/clr commit: 8874f1f4d6]
このコミットが含まれているのは:
@@ -3314,6 +3314,14 @@ RUNTIME_ENTRY_RET(void *, clEnqueueMapBuffer, (
|
||||
return (void*) 0;
|
||||
}
|
||||
|
||||
// Attempt to allocate the map target now (whether blocking or non-blocking)
|
||||
void* mapPtr = hostQueue.device().allocMapTarget(
|
||||
*srcBuffer, srcOffset, srcSize, map_flags);
|
||||
if (NULL == mapPtr) {
|
||||
*not_null(errcode_ret) = CL_MAP_FAILURE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Allocate a map command for the queue thread
|
||||
amd::MapMemoryCommand *command = new amd::MapMemoryCommand(
|
||||
hostQueue,
|
||||
@@ -3323,7 +3331,10 @@ RUNTIME_ENTRY_RET(void *, clEnqueueMapBuffer, (
|
||||
map_flags,
|
||||
blocking_map ? true : false,
|
||||
srcOffset,
|
||||
srcSize);
|
||||
srcSize,
|
||||
nullptr,
|
||||
nullptr,
|
||||
mapPtr);
|
||||
if (command == NULL) {
|
||||
*not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY;
|
||||
return NULL;
|
||||
@@ -3343,15 +3354,6 @@ RUNTIME_ENTRY_RET(void *, clEnqueueMapBuffer, (
|
||||
hostQueue.finish();
|
||||
}
|
||||
|
||||
// Attempt to allocate the map target now (whether blocking or non-blocking)
|
||||
void* mapPtr = hostQueue.device().allocMapTarget(
|
||||
*srcBuffer, srcOffset, srcSize, map_flags);
|
||||
if (NULL == mapPtr) {
|
||||
delete command;
|
||||
*not_null(errcode_ret) = CL_MAP_FAILURE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Send the map command for processing
|
||||
command->enqueue();
|
||||
|
||||
@@ -3598,6 +3600,14 @@ RUNTIME_ENTRY_RET(void *, clEnqueueMapImage, (
|
||||
return (void*) 0;
|
||||
}
|
||||
|
||||
// Attempt to allocate the map target now (whether blocking or non-blocking)
|
||||
void *mapPtr = hostQueue.device().allocMapTarget(
|
||||
*srcImage, srcOrigin, srcRegion, map_flags, image_row_pitch, image_slice_pitch);
|
||||
if (NULL == mapPtr) {
|
||||
*not_null(errcode_ret) = CL_MAP_FAILURE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Allocate a map command for the queue thread
|
||||
amd::MapMemoryCommand *command = new amd::MapMemoryCommand(
|
||||
hostQueue,
|
||||
@@ -3607,7 +3617,10 @@ RUNTIME_ENTRY_RET(void *, clEnqueueMapImage, (
|
||||
map_flags,
|
||||
blocking_map ? true : false,
|
||||
srcOrigin,
|
||||
srcRegion);
|
||||
srcRegion,
|
||||
nullptr,
|
||||
nullptr,
|
||||
mapPtr);
|
||||
if (command == NULL) {
|
||||
*not_null(errcode_ret) = CL_OUT_OF_HOST_MEMORY;
|
||||
return NULL;
|
||||
@@ -3627,15 +3640,6 @@ RUNTIME_ENTRY_RET(void *, clEnqueueMapImage, (
|
||||
hostQueue.finish();
|
||||
}
|
||||
|
||||
// Attempt to allocate the map target now (whether blocking or non-blocking)
|
||||
void *mapPtr = hostQueue.device().allocMapTarget(
|
||||
*srcImage, srcOrigin, srcRegion, map_flags, image_row_pitch, image_slice_pitch);
|
||||
if (NULL == mapPtr) {
|
||||
delete command;
|
||||
*not_null(errcode_ret) = CL_MAP_FAILURE;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
// Send the map command for processing
|
||||
command->enqueue();
|
||||
|
||||
|
||||
@@ -797,7 +797,7 @@ RUNTIME_ENTRY(cl_int, clEnqueueSVMMap, (
|
||||
}
|
||||
|
||||
amd::Command* command = new amd::SvmMapMemoryCommand(
|
||||
hostQueue, eventWaitList, svmMem, size, offset, map_flags);
|
||||
hostQueue, eventWaitList, svmMem, size, offset, map_flags, svm_ptr);
|
||||
if (command == NULL) {
|
||||
return CL_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
@@ -910,7 +910,7 @@ RUNTIME_ENTRY(cl_int, clEnqueueSVMUnmap, (
|
||||
}
|
||||
|
||||
amd::Command* command = new amd::SvmUnmapMemoryCommand(
|
||||
hostQueue, eventWaitList, svmMem);
|
||||
hostQueue, eventWaitList, svmMem, svm_ptr);
|
||||
if (command == NULL) {
|
||||
return CL_OUT_OF_HOST_MEMORY;
|
||||
}
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする