P4 to Git Change 1306133 by gandryey@gera-w8 on 2016/08/23 14:00:09
SWDEV-79445 - OCL generic changes and code clean-up - Update staging copy path with a flush so CPU copy and SDMA transfer could run asynchronously. - Tune chunk size for transfers Affected files ... ... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.cpp#121 edit ... //depot/stg/opencl/drivers/opencl/runtime/device/pal/palblit.cpp#6 edit
This commit is contained in:
@@ -57,10 +57,12 @@ DmaBlitManager::readMemoryStaged(
|
||||
if (dev().xferRead().bufSize() < 128 * Ki) {
|
||||
chunkSize = dev().xferRead().bufSize();
|
||||
}
|
||||
else {
|
||||
else if (xferSize > 256 * Ki) {
|
||||
chunkSize = std::min(amd::alignUp(xferSize / 4, 256),
|
||||
dev().xferRead().bufSize());
|
||||
chunkSize = std::max(chunkSize, 128 * Ki);
|
||||
}
|
||||
else {
|
||||
chunkSize = xferSize;
|
||||
}
|
||||
|
||||
// Find the partial transfer size
|
||||
@@ -112,6 +114,7 @@ DmaBlitManager::readMemoryStaged(
|
||||
reinterpret_cast<char*>(dstHost) + offset - copySizeLast[0], dst, copySizeLast)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -314,14 +317,19 @@ DmaBlitManager::writeMemoryStaged(
|
||||
amd::Coord3D src(0, 0, 0);
|
||||
size_t tmpSize;
|
||||
size_t chunkSize;
|
||||
static const bool CopyRect = false;
|
||||
// Flush DMA for ASYNC copy
|
||||
static const bool FlushDMA = true;
|
||||
|
||||
if (dev().xferRead().bufSize() < 128 * Ki) {
|
||||
chunkSize = dev().xferRead().bufSize();
|
||||
chunkSize = dev().xferWrite().bufSize();
|
||||
}
|
||||
else if (xferSize > 256 * Ki) {
|
||||
chunkSize = std::min(amd::alignUp(xferSize / 4, 256),
|
||||
dev().xferWrite().bufSize());
|
||||
}
|
||||
else {
|
||||
chunkSize = std::min(amd::alignUp(xferSize / 4, 256),
|
||||
dev().xferRead().bufSize());
|
||||
chunkSize = std::max(chunkSize, 128 * Ki);
|
||||
chunkSize = xferSize;
|
||||
}
|
||||
|
||||
while (xferSize != 0) {
|
||||
@@ -339,7 +347,7 @@ DmaBlitManager::writeMemoryStaged(
|
||||
|
||||
// Copy data into the original destination memory
|
||||
if (!xferBuf.partialMemCopyTo(
|
||||
gpu(), src, dst, copySize, dstMemory)) {
|
||||
gpu(), src, dst, copySize, dstMemory, CopyRect, FlushDMA)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -347,6 +355,7 @@ DmaBlitManager::writeMemoryStaged(
|
||||
offset += tmpSize;
|
||||
xferSize -= tmpSize;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -366,6 +375,7 @@ DmaBlitManager::writeBuffer(
|
||||
srcHost, dstMemory, origin, size, entire);
|
||||
}
|
||||
else {
|
||||
|
||||
size_t dstSize = size[0];
|
||||
size_t tmpSize = 0;
|
||||
size_t offset = 0;
|
||||
@@ -432,6 +442,7 @@ DmaBlitManager::writeBuffer(
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (dstSize != 0) {
|
||||
Memory& xferBuf = dev().xferWrite().acquire();
|
||||
|
||||
@@ -2247,6 +2258,7 @@ KernelBlitManager::writeBuffer(
|
||||
|
||||
synchronize();
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -2723,7 +2735,6 @@ DmaBlitManager::pinHostMemory(
|
||||
|
||||
amdMemory = new(*context_)
|
||||
amd::Buffer(*context_, CL_MEM_USE_HOST_PTR, pinAllocSize);
|
||||
|
||||
if ((amdMemory != NULL) && !amdMemory->create(tmpHost, SysMem)) {
|
||||
amdMemory->release();
|
||||
return NULL;
|
||||
|
||||
@@ -56,10 +56,12 @@ DmaBlitManager::readMemoryStaged(
|
||||
if (dev().xferRead().bufSize() < 128 * Ki) {
|
||||
chunkSize = dev().xferRead().bufSize();
|
||||
}
|
||||
else {
|
||||
else if (xferSize > 256 * Ki) {
|
||||
chunkSize = std::min(amd::alignUp(xferSize / 4, 256),
|
||||
dev().xferRead().bufSize());
|
||||
chunkSize = std::max(chunkSize, 128 * Ki);
|
||||
}
|
||||
else {
|
||||
chunkSize = xferSize;
|
||||
}
|
||||
|
||||
// Find the partial transfer size
|
||||
@@ -313,14 +315,19 @@ DmaBlitManager::writeMemoryStaged(
|
||||
amd::Coord3D src(0, 0, 0);
|
||||
size_t tmpSize;
|
||||
size_t chunkSize;
|
||||
static const bool CopyRect = false;
|
||||
// Flush DMA for ASYNC copy
|
||||
static const bool FlushDMA = true;
|
||||
|
||||
if (dev().xferRead().bufSize() < 128 * Ki) {
|
||||
chunkSize = dev().xferRead().bufSize();
|
||||
chunkSize = dev().xferWrite().bufSize();
|
||||
}
|
||||
else if (xferSize > 256 * Ki) {
|
||||
chunkSize = std::min(amd::alignUp(xferSize / 4, 256),
|
||||
dev().xferWrite().bufSize());
|
||||
}
|
||||
else {
|
||||
chunkSize = std::min(amd::alignUp(xferSize / 4, 256),
|
||||
dev().xferRead().bufSize());
|
||||
chunkSize = std::max(chunkSize, 128 * Ki);
|
||||
chunkSize = xferSize;
|
||||
}
|
||||
|
||||
while (xferSize != 0) {
|
||||
@@ -338,7 +345,7 @@ DmaBlitManager::writeMemoryStaged(
|
||||
|
||||
// Copy data into the original destination memory
|
||||
if (!xferBuf.partialMemCopyTo(
|
||||
gpu(), src, dst, copySize, dstMemory)) {
|
||||
gpu(), src, dst, copySize, dstMemory, CopyRect, FlushDMA)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -2761,7 +2768,7 @@ KernelBlitManager::createView(
|
||||
const Memory& gpuMem = static_cast<const Memory&>(parent);
|
||||
|
||||
params.owner_ = parent.owner();
|
||||
params.level_ = 0;
|
||||
params.level_ = parent.desc().baseLevel_;
|
||||
params.layer_ = 0;
|
||||
params.resource_ = &gpuMem;
|
||||
params.memory_ = &gpuMem;
|
||||
|
||||
Fai riferimento in un nuovo problema
Block a user