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]
このコミットが含まれているのは:
foreman
2016-04-13 13:27:37 -04:00
コミット 2c62ce5544
2個のファイルの変更26行の追加22行の削除
+24 -20
ファイルの表示
@@ -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();
+2 -2
ファイルの表示
@@ -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;
}