P4 to Git Change 1097200 by gandryey@gera-dev-w7 on 2014/11/14 13:59:46

ECR #304775 - Optimize oclBandwidthTest from nVidia SDK
	- Cache pinned memory, since the benchmark sends the same transfer in a single batch. Thus we could avoid pin/unpin
	- Swap SDMA engine allocation order. Blit manager allocates a queue on device, thus the first app queue was getting the paging second SDMA.

Affected files ...

... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.cpp#112 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpublit.hpp#37 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.cpp#339 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpuvirtual.hpp#121 edit


[ROCm/clr commit: dc8a3205ce]
Этот коммит содержится в:
foreman
2014-11-14 14:07:55 -05:00
родитель f80e78e32a
Коммит f7d489a445
4 изменённых файлов: 64 добавлений и 90 удалений
+23 -12
Просмотреть файл
@@ -229,9 +229,8 @@ VirtualGPU::addXferWrite(Resource& resource)
void
VirtualGPU::releaseXferWrite()
{
for (std::list<Resource*>::iterator it = xferWriteBuffers_.begin();
it != xferWriteBuffers_.end(); ++it) {
dev().xferWrite().release(*this, *(*it));
for (auto& resource : xferWriteBuffers_) {
dev().xferWrite().release(*this, *resource);
}
xferWriteBuffers_.clear();
}
@@ -244,23 +243,35 @@ VirtualGPU::addPinnedMem(amd::Memory* mem)
pinnedMems_.pop_front();
}
// Start operation, since we should release mem object
flushDMA(getGpuEvent(dev().getGpuMemory(mem))->engineId_);
if (NULL == findPinnedMem(mem->getHostMem(), mem->getSize())) {
// Start operation, since we should release mem object
flushDMA(getGpuEvent(dev().getGpuMemory(mem))->engineId_);
// Delay destruction
pinnedMems_.push_back(mem);
// Delay destruction
pinnedMems_.push_back(mem);
}
}
void
VirtualGPU::releasePinnedMem()
{
for (std::list<amd::Memory*>::iterator it = pinnedMems_.begin();
it != pinnedMems_.end(); ++it) {
(*it)->release();
for (auto& amdMemory : pinnedMems_) {
amdMemory->release();
}
pinnedMems_.clear();
}
amd::Memory*
VirtualGPU::findPinnedMem(void* addr, size_t size)
{
for (auto& amdMemory : pinnedMems_) {
if ((amdMemory->getHostMem() == addr) && (size <= amdMemory->getSize())) {
return amdMemory;
}
}
return NULL;
}
bool
VirtualGPU::createVirtualQueue(uint deviceQueueSize)
{
@@ -486,10 +497,10 @@ VirtualGPU::create(
engineMask = dev().engines().getMask((gslEngineID)(GSL_ENGINEID_COMPUTE0 + idx));
if (dev().canDMA()) {
if (idx & 0x1) {
engineMask |= dev().engines().getMask(GSL_ENGINEID_DRMDMA1);
engineMask |= dev().engines().getMask(GSL_ENGINEID_DRMDMA0);
}
else {
engineMask |= dev().engines().getMask(GSL_ENGINEID_DRMDMA0);
engineMask |= dev().engines().getMask(GSL_ENGINEID_DRMDMA1);
}
}
}