mirror of
https://github.com/KhronosGroup/OpenCL-CTS.git
synced 2026-03-25 16:29:03 +00:00
This commit is contained in:
@@ -635,6 +635,24 @@ size_t TestNonUniformWorkGroup::adjustLocalArraySize (size_t localArraySize) {
|
|||||||
return localArraySize;
|
return localArraySize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t TestNonUniformWorkGroup::adjustGlobalBufferSize(size_t globalBufferSize) {
|
||||||
|
// In case if global buffer size is too big, sometimes we can not run kernel because of lack
|
||||||
|
// of resources due to kernel itself requires some global memory to run
|
||||||
|
int err;
|
||||||
|
|
||||||
|
cl_ulong deviceMaxAllocObjSize = 0;
|
||||||
|
err = clGetDeviceInfo(_device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(deviceMaxAllocObjSize), &deviceMaxAllocObjSize, NULL);
|
||||||
|
test_error(err, "clGetDeviceInfo failed");
|
||||||
|
|
||||||
|
size_t adjustedGlobalBufferSize = globalBufferSize;
|
||||||
|
if (deviceMaxAllocObjSize < globalBufferSize) {
|
||||||
|
adjustedGlobalBufferSize = deviceMaxAllocObjSize;
|
||||||
|
log_info("globalBufferSize was adjusted from %lu to %lu\n", globalBufferSize, adjustedGlobalBufferSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
return adjustedGlobalBufferSize;
|
||||||
|
}
|
||||||
|
|
||||||
int TestNonUniformWorkGroup::runKernel () {
|
int TestNonUniformWorkGroup::runKernel () {
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
@@ -656,7 +674,8 @@ int TestNonUniformWorkGroup::runKernel () {
|
|||||||
err = clSetKernelArg(_testKernel, 1, localArraySize, NULL);
|
err = clSetKernelArg(_testKernel, 1, localArraySize, NULL);
|
||||||
test_error(err, "clSetKernelArg failed");
|
test_error(err, "clSetKernelArg failed");
|
||||||
|
|
||||||
clMemWrapper testGlobalArray = clCreateBuffer(_context, CL_MEM_READ_WRITE, _numOfGlobalWorkItems*sizeof(cl_uint), NULL, &err);
|
size_t globalBufferSize = adjustGlobalBufferSize(_numOfGlobalWorkItems*sizeof(cl_uint));
|
||||||
|
clMemWrapper testGlobalArray = clCreateBuffer(_context, CL_MEM_READ_WRITE, globalBufferSize, NULL, &err);
|
||||||
test_error(err, "clCreateBuffer failed");
|
test_error(err, "clCreateBuffer failed");
|
||||||
|
|
||||||
err = clSetKernelArg(_testKernel, 2, sizeof(testGlobalArray), &testGlobalArray);
|
err = clSetKernelArg(_testKernel, 2, sizeof(testGlobalArray), &testGlobalArray);
|
||||||
@@ -780,3 +799,4 @@ int SubTestExecutor::status() {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -117,6 +117,7 @@ private:
|
|||||||
void calculateExpectedValues ();
|
void calculateExpectedValues ();
|
||||||
void showTestInfo ();
|
void showTestInfo ();
|
||||||
size_t adjustLocalArraySize(size_t localArraySize);
|
size_t adjustLocalArraySize(size_t localArraySize);
|
||||||
|
size_t adjustGlobalBufferSize(size_t globalBufferSize);
|
||||||
};
|
};
|
||||||
|
|
||||||
// Class responsible for running subtest scenarios in test function
|
// Class responsible for running subtest scenarios in test function
|
||||||
@@ -145,3 +146,4 @@ private:
|
|||||||
};
|
};
|
||||||
|
|
||||||
#endif // _TESTNONUNIFORMWORKGROUP_H
|
#endif // _TESTNONUNIFORMWORKGROUP_H
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user