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:
foreman
2016-08-23 14:12:24 -04:00
parent 53a0c0add6
commit 862e3a1a79
2 ha cambiato i file con 34 aggiunte e 16 eliminazioni
+19 -8
Vedi File
@@ -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;
+15 -8
Vedi File
@@ -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;