Change max mem alloc size deduction.

- make it half of global mem
- change buffer input validation, look for hw limitations instead of
computed value of max mem alloc size.

Change-Id: Ibbe7eb16d01299b02cef3b1e7234efefbced2197
Signed-off-by: Mrozek, Michal <michal.mrozek@intel.com>
This commit is contained in:
Mrozek, Michal 2019-07-16 11:42:31 +02:00 committed by sys_ocldev
parent 6a51f1fad9
commit 5dc20f50d1
4 changed files with 5 additions and 5 deletions

View File

@ -235,7 +235,7 @@ void Device::initializeCaps() {
deviceInfo.preferredInteropUserSync = 1u;
// OpenCL 1.2 requires 128MB minimum
deviceInfo.maxMemAllocSize = std::min(std::max(deviceInfo.globalMemSize, static_cast<uint64_t>(128llu * MB)), this->hardwareCapabilities.maxMemAllocSize);
deviceInfo.maxMemAllocSize = std::min(std::max(deviceInfo.globalMemSize / 2, static_cast<uint64_t>(128llu * MB)), this->hardwareCapabilities.maxMemAllocSize);
deviceInfo.maxConstantBufferSize = deviceInfo.maxMemAllocSize;

View File

@ -90,7 +90,7 @@ void Buffer::validateInputAndCreateBuffer(cl_context &context,
}
auto pDevice = pContext->getDevice(0);
if (size == 0 || size > pDevice->getDeviceInfo().maxMemAllocSize) {
if (size == 0 || size > pDevice->getHardwareCapabilities().maxMemAllocSize) {
retVal = CL_INVALID_BUFFER_SIZE;
return;
}

View File

@ -210,7 +210,7 @@ TEST_F(clCreateBufferTests, GivenMemWriteOnlyFlagAndMemReadWriteFlagWhenCreating
TEST_F(clCreateBufferTests, GivenBufferSizeOverMaxMemAllocSizeWhenCreatingBufferThenInvalidBufferSizeErrorIsReturned) {
auto pDevice = pContext->getDevice(0);
size_t size = static_cast<size_t>(pDevice->getDeviceInfo().maxMemAllocSize) + 1;
size_t size = static_cast<size_t>(pDevice->getHardwareCapabilities().maxMemAllocSize) + 1;
auto buffer = clCreateBuffer(pContext, CL_MEM_ALLOC_HOST_PTR, size, nullptr, &retVal);
EXPECT_EQ(CL_INVALID_BUFFER_SIZE, retVal);
@ -219,7 +219,7 @@ TEST_F(clCreateBufferTests, GivenBufferSizeOverMaxMemAllocSizeWhenCreatingBuffer
TEST_F(clCreateBufferTests, GivenBufferSizeOverMaxMemAllocSizeWhenCreateBufferWithPropertiesINTELThenInvalidBufferSizeErrorIsReturned) {
auto pDevice = pContext->getDevice(0);
size_t size = static_cast<size_t>(pDevice->getDeviceInfo().maxMemAllocSize) + 1;
size_t size = static_cast<size_t>(pDevice->getHardwareCapabilities().maxMemAllocSize) + 1;
auto buffer = clCreateBufferWithPropertiesINTEL(pContext, nullptr, size, nullptr, &retVal);
EXPECT_EQ(CL_INVALID_BUFFER_SIZE, retVal);

View File

@ -341,7 +341,7 @@ TEST(Device_GetCaps, givenGlobalMemSizeWhenCalculatingMaxAllocSizeThenAdjustToHW
auto &hwHelper = HwHelper::get(platformDevices[0]->platform.eRenderCoreFamily);
hwHelper.setupHardwareCapabilities(&hwCaps, *platformDevices[0]);
uint64_t expectedSize = std::max((caps.globalMemSize), static_cast<uint64_t>(128ULL * MemoryConstants::megaByte));
uint64_t expectedSize = std::max((caps.globalMemSize / 2), static_cast<uint64_t>(128ULL * MemoryConstants::megaByte));
expectedSize = std::min(expectedSize, hwCaps.maxMemAllocSize);
EXPECT_EQ(caps.maxMemAllocSize, expectedSize);