P4 to Git Change 1309866 by gandryey@gera-w8 on 2016/09/01 13:50:12
SWDEV-79445 - OCL generic changes and code clean-up - Improve image fill performance with multiple writes in a single thread. The current split has 3 regions Affected files ... ... //depot/stg/opencl/drivers/opencl/library/common.hsa/src/blitKernels.cl#4 edit ... //depot/stg/opencl/drivers/opencl/library/common/src/blitKernels.cl#4 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.cpp#123 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.hpp#40 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palblit.cpp#8 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palblit.hpp#4 edit
このコミットが含まれているのは:
@@ -2592,23 +2592,25 @@ KernelBlitManager::fillImage(
|
||||
}
|
||||
}
|
||||
|
||||
// Perform workload split to allow multiple operations in a single thread
|
||||
globalWorkSize[0] = (size[0] + TransferSplitSize - 1) / TransferSplitSize;
|
||||
// Find the current blit type
|
||||
if (memView->cal()->dimSize_ == 1) {
|
||||
globalWorkSize[0] = amd::alignUp(size[0], 256);
|
||||
globalWorkSize[0] = amd::alignUp(globalWorkSize[0], 256);
|
||||
globalWorkSize[1] = amd::alignUp(size[1], 1);
|
||||
globalWorkSize[2] = amd::alignUp(size[2], 1);
|
||||
localWorkSize[0] = 256;
|
||||
localWorkSize[1] = localWorkSize[2] = 1;
|
||||
}
|
||||
else if (memView->cal()->dimSize_ == 2) {
|
||||
globalWorkSize[0] = amd::alignUp(size[0], 16);
|
||||
globalWorkSize[0] = amd::alignUp(globalWorkSize[0], 16);
|
||||
globalWorkSize[1] = amd::alignUp(size[1], 16);
|
||||
globalWorkSize[2] = amd::alignUp(size[2], 1);
|
||||
localWorkSize[0] = localWorkSize[1] = 16;
|
||||
localWorkSize[2] = 1;
|
||||
}
|
||||
else {
|
||||
globalWorkSize[0] = amd::alignUp(size[0], 8);
|
||||
globalWorkSize[0] = amd::alignUp(globalWorkSize[0], 8);
|
||||
globalWorkSize[1] = amd::alignUp(size[1], 8);
|
||||
globalWorkSize[2] = amd::alignUp(size[2], 4);
|
||||
localWorkSize[0] = localWorkSize[1] = 8;
|
||||
|
||||
@@ -383,6 +383,7 @@ public:
|
||||
|
||||
private:
|
||||
static const size_t MaxXferBuffers = 2;
|
||||
static const uint TransferSplitSize = 3;
|
||||
|
||||
//! Copies a buffer object to an image object
|
||||
bool copyBufferToImageKernel(
|
||||
|
||||
@@ -2564,23 +2564,25 @@ KernelBlitManager::fillImage(
|
||||
}
|
||||
}
|
||||
|
||||
// Perform workload split to allow multiple operations in a single thread
|
||||
globalWorkSize[0] = (size[0] + TransferSplitSize - 1) / TransferSplitSize;
|
||||
// Find the current blit type
|
||||
if (memView->desc().dimSize_ == 1) {
|
||||
globalWorkSize[0] = amd::alignUp(size[0], 256);
|
||||
globalWorkSize[0] = amd::alignUp(globalWorkSize[0], 256);
|
||||
globalWorkSize[1] = amd::alignUp(size[1], 1);
|
||||
globalWorkSize[2] = amd::alignUp(size[2], 1);
|
||||
localWorkSize[0] = 256;
|
||||
localWorkSize[1] = localWorkSize[2] = 1;
|
||||
}
|
||||
else if (memView->desc().dimSize_ == 2) {
|
||||
globalWorkSize[0] = amd::alignUp(size[0], 16);
|
||||
globalWorkSize[0] = amd::alignUp(globalWorkSize[0], 16);
|
||||
globalWorkSize[1] = amd::alignUp(size[1], 16);
|
||||
globalWorkSize[2] = amd::alignUp(size[2], 1);
|
||||
localWorkSize[0] = localWorkSize[1] = 16;
|
||||
localWorkSize[2] = 1;
|
||||
}
|
||||
else {
|
||||
globalWorkSize[0] = amd::alignUp(size[0], 8);
|
||||
globalWorkSize[0] = amd::alignUp(globalWorkSize[0], 8);
|
||||
globalWorkSize[1] = amd::alignUp(size[1], 8);
|
||||
globalWorkSize[2] = amd::alignUp(size[2], 4);
|
||||
localWorkSize[0] = localWorkSize[1] = 8;
|
||||
|
||||
@@ -388,6 +388,7 @@ public:
|
||||
|
||||
private:
|
||||
static const size_t MaxXferBuffers = 2;
|
||||
static const uint TransferSplitSize = 3;
|
||||
|
||||
//! Copies a buffer object to an image object
|
||||
bool copyBufferToImageKernel(
|
||||
|
||||
新しいイシューから参照
ユーザーをブロックする