P4 to Git Change 1579735 by gandryey@gera-w8 on 2018/07/12 14:22:40

SWDEV-158730 - [CQE OCL][ocltst][WIN] OCLMemoryInfo[1] a sub-test of ocltst oclruntime module is failed
	- Update free memory calculation for APU systems. There is still an issue in GSL with multiple alloc/free passes

Affected files ...

... //depot/stg/opencl/drivers/opencl/runtime/device/gpu/gpudevice.cpp#595 edit
... //depot/stg/opencl/drivers/opencl/runtime/device/pal/paldevice.cpp#96 edit
This commit is contained in:
foreman
2018-07-12 14:31:30 -04:00
rodzic 96d0ddb728
commit 0b08fa4a4e
2 zmienionych plików z 29 dodań i 34 usunięć
+18 -24
Wyświetl plik
@@ -1678,35 +1678,29 @@ bool Device::globalFreeMemory(size_t* freeMemory) const {
Pal::gpusize local = allocedMem[Pal::GpuHeapLocal];
Pal::gpusize invisible = allocedMem[Pal::GpuHeapInvisible] - resourceCache().lclCacheSize();
// Calculate free memory
if (local >= heaps_[Pal::GpuHeapLocal].heapSize) {
local = 0;
} else {
local = heaps_[Pal::GpuHeapLocal].heapSize - local;
}
if (invisible >= info().maxMemAllocSize_) {
invisible = 0;
} else {
invisible = info().maxMemAllocSize_ - invisible;
}
// Fill free memory info
freeMemory[TotalFreeMemory] = static_cast<size_t>((local + invisible) / Ki);
freeMemory[LargestFreeBlock] = static_cast<size_t>(std::max(local, invisible) / Ki);
freeMemory[TotalFreeMemory] = static_cast<size_t>((info().globalMemSize_ -
(local + invisible)) / Ki);
if (invisible >= heaps_[Pal::GpuHeapInvisible].heapSize) {
invisible = 0;
}
else {
invisible = heaps_[Pal::GpuHeapInvisible].heapSize - invisible;
}
freeMemory[LargestFreeBlock] = static_cast<size_t>(invisible) / Ki;
if (settings().apuSystem_) {
Pal::GpuHeap heap = settings().viPlus_ ? Pal::GpuHeapGartCacheable: Pal::GpuHeapGartUswc;
Pal::gpusize sysMem = allocedMem[heap];
if (sysMem >= heaps_[heap].heapSize) {
sysMem = 0;
} else {
sysMem = heaps_[heap].heapSize - sysMem +
resourceCache().cacheSize() - resourceCache().lclCacheSize();
}
Pal::gpusize sysMem = allocedMem[Pal::GpuHeapGartCacheable] + allocedMem[Pal::GpuHeapGartUswc] -
resourceCache().cacheSize() + resourceCache().lclCacheSize();
sysMem /= Ki;
freeMemory[TotalFreeMemory] += static_cast<size_t>(sysMem);
if (freeMemory[LargestFreeBlock] < sysMem) {
freeMemory[LargestFreeBlock] = static_cast<size_t>(sysMem);
if (sysMem >= freeMemory[TotalFreeMemory]) {
freeMemory[TotalFreeMemory] = 0;
} else {
freeMemory[TotalFreeMemory] -= sysMem;
}
if (freeMemory[LargestFreeBlock] < freeMemory[TotalFreeMemory]) {
freeMemory[LargestFreeBlock] = freeMemory[TotalFreeMemory];
}
}