Return 0 when Program Scope Global Variables are not supported

clGetDeviceInfo and clGetProgramBuildInfo may return 0 when Program
Scope Global Variables are not supported

Related-To: NEO-4368

Change-Id: I2c319c53ffa2e02eeb370775023f5d73219cb39e
Signed-off-by: Andrzej Swierczynski <andrzej.swierczynski@intel.com>
This commit is contained in:
Andrzej Swierczynski
2020-04-10 14:45:04 +02:00
committed by sys_ocldev
parent 853d870d1c
commit 42810f4690
5 changed files with 51 additions and 7 deletions

View File

@@ -303,8 +303,8 @@ void ClDevice::initializeCaps() {
} }
deviceInfo.preemptionSupported = false; deviceInfo.preemptionSupported = false;
deviceInfo.maxGlobalVariableSize = 64 * KB; deviceInfo.maxGlobalVariableSize = enabledClVersion >= 20 ? 64 * KB : 0;
deviceInfo.globalVariablePreferredTotalSize = static_cast<size_t>(sharedDeviceInfo.maxMemAllocSize); deviceInfo.globalVariablePreferredTotalSize = enabledClVersion >= 20 ? static_cast<size_t>(sharedDeviceInfo.maxMemAllocSize) : 0;
deviceInfo.planarYuvMaxWidth = 16384; deviceInfo.planarYuvMaxWidth = 16384;
deviceInfo.planarYuvMaxHeight = 16352; deviceInfo.planarYuvMaxHeight = 16352;

View File

@@ -180,13 +180,16 @@ cl_int Program::processProgramInfo(ProgramInfo &src) {
this->constantSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalConstants.size, true, linkerInput.get(), src.globalConstants.initData); this->constantSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalConstants.size, true, linkerInput.get(), src.globalConstants.initData);
} }
this->globalVarTotalSize = src.globalVariables.size;
if (src.globalVariables.size != 0) { if (src.globalVariables.size != 0) {
UNRECOVERABLE_IF(nullptr == pDevice); UNRECOVERABLE_IF(nullptr == pDevice);
this->globalSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalVariables.size, false, linkerInput.get(), src.globalVariables.initData); this->globalSurface = allocateGlobalsSurface(svmAllocsManager, *pDevice, src.globalVariables.size, false, linkerInput.get(), src.globalVariables.initData);
if (pDevice->getSpecializedDevice<ClDevice>()->getEnabledClVersion() < 20) {
this->globalVarTotalSize = 0u;
}
} }
this->globalVarTotalSize = src.globalVariables.size;
for (auto &kernelInfo : this->kernelInfoArray) { for (auto &kernelInfo : this->kernelInfoArray) {
cl_int retVal = CL_SUCCESS; cl_int retVal = CL_SUCCESS;
if (kernelInfo->heapInfo.pKernelHeader->KernelHeapSize && this->pDevice) { if (kernelInfo->heapInfo.pKernelHeader->KernelHeapSize && this->pDevice) {

View File

@@ -478,6 +478,38 @@ TEST(GetDeviceInfo, GivenSimultaneousInteropsWhenGettingDeviceInfoThenCorrectVal
EXPECT_TRUE(memcmp(value, &device->simultaneousInterops[0], 4u * sizeof(cl_uint)) == 0); EXPECT_TRUE(memcmp(value, &device->simultaneousInterops[0], 4u * sizeof(cl_uint)) == 0);
} }
TEST(GetDeviceInfo, GivenMaxGlobalVariableSizeWhenGettingDeviceInfoThenCorrectValueIsReturned) {
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
size_t value = 0;
size_t size = 0;
auto retVal = device->getDeviceInfo(CL_DEVICE_MAX_GLOBAL_VARIABLE_SIZE, sizeof(size_t), &value, &size);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(sizeof(size_t), size);
if (device->getEnabledClVersion() >= 20) {
EXPECT_EQ(value, 65536u);
} else {
EXPECT_EQ(value, 0u);
}
}
TEST(GetDeviceInfo, GivenGlobalVariablePreferredTotalSizeWhenGettingDeviceInfoThenCorrectValueIsReturned) {
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));
size_t value = 0;
size_t size = 0;
auto retVal = device->getDeviceInfo(CL_DEVICE_GLOBAL_VARIABLE_PREFERRED_TOTAL_SIZE, sizeof(size_t), &value, &size);
EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(sizeof(size_t), size);
if (device->getEnabledClVersion() >= 20) {
EXPECT_EQ(value, static_cast<size_t>(device->getSharedDeviceInfo().maxMemAllocSize));
} else {
EXPECT_EQ(value, 0u);
}
}
TEST(GetDeviceInfo, GivenPreferredInteropsWhenGettingDeviceInfoThenCorrectValueIsReturned) { TEST(GetDeviceInfo, GivenPreferredInteropsWhenGettingDeviceInfoThenCorrectValueIsReturned) {
auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr)); auto device = std::make_unique<MockClDevice>(MockDevice::createWithNewExecutionEnvironment<MockDevice>(nullptr));

View File

@@ -108,7 +108,6 @@ class MockProgram : public Program {
void ClearOptions() { options = ""; } void ClearOptions() { options = ""; }
void SetCreatedFromBinary(bool createdFromBin) { isCreatedFromBinary = createdFromBin; } void SetCreatedFromBinary(bool createdFromBin) { isCreatedFromBinary = createdFromBin; }
void ClearLog() { buildLog.clear(); } void ClearLog() { buildLog.clear(); }
void SetGlobalVariableTotalSize(size_t globalVarSize) { globalVarTotalSize = globalVarSize; }
void SetDevice(Device *pDev) { pDevice = pDev; } void SetDevice(Device *pDev) { pDevice = pDev; }
void SetIrBinary(char *ptr, bool isSpirv) { void SetIrBinary(char *ptr, bool isSpirv) {

View File

@@ -550,6 +550,7 @@ TEST_P(ProgramFromBinaryTest, GivenGlobalVariableTotalSizeSetWhenGettingBuildGlo
paramValueSize, paramValueSize,
paramValue, paramValue,
&paramValueSizeRet); &paramValueSizeRet);
EXPECT_EQ(CL_SUCCESS, retVal); EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize)); EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize));
EXPECT_EQ(globalVarSize, 0u); EXPECT_EQ(globalVarSize, 0u);
@@ -557,7 +558,12 @@ TEST_P(ProgramFromBinaryTest, GivenGlobalVariableTotalSizeSetWhenGettingBuildGlo
// Set GlobalVariableTotalSize as 1024 // Set GlobalVariableTotalSize as 1024
CreateProgramFromBinary(pContext, &device, BinaryFileName); CreateProgramFromBinary(pContext, &device, BinaryFileName);
MockProgram *p = pProgram; MockProgram *p = pProgram;
p->SetGlobalVariableTotalSize(1024u); ProgramInfo programInfo;
char constantData[1024] = {};
programInfo.globalVariables.initData = constantData;
programInfo.globalVariables.size = sizeof(constantData);
p->processProgramInfo(programInfo);
// get build info once again // get build info once again
retVal = pProgram->getBuildInfo( retVal = pProgram->getBuildInfo(
@@ -568,7 +574,11 @@ TEST_P(ProgramFromBinaryTest, GivenGlobalVariableTotalSizeSetWhenGettingBuildGlo
&paramValueSizeRet); &paramValueSizeRet);
EXPECT_EQ(CL_SUCCESS, retVal); EXPECT_EQ(CL_SUCCESS, retVal);
EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize)); EXPECT_EQ(paramValueSizeRet, sizeof(globalVarSize));
EXPECT_EQ(globalVarSize, 1024u); if (castToObject<ClDevice>(pClDevice)->getEnabledClVersion() >= 20) {
EXPECT_EQ(globalVarSize, 1024u);
} else {
EXPECT_EQ(globalVarSize, 0u);
}
} }
TEST_P(ProgramFromBinaryTest, givenProgramWhenItIsBeingBuildThenItContainsGraphicsAllocationInKernelInfo) { TEST_P(ProgramFromBinaryTest, givenProgramWhenItIsBeingBuildThenItContainsGraphicsAllocationInKernelInfo) {