Hi there,
can anyone tell me, why intels openCL implementation can’t be reinitializied? A Sample for clarification first:
for (int run = 0; run < 10; run++)
{
cl_int iError;
cl_uint uiPlatformCount;
clGetPlatformIDs(0, nullptr, &uiPlatformCount);
cl_platform_id* pPlatformIDs = new cl_platform_id[uiPlatformCount];
clGetPlatformIDs(uiPlatformCount, pPlatformIDs, nullptr);
for (int i = 0; i < (int)uiPlatformCount; i++)
{
//für alle Plattformen schauen, was wir an Infos bekommen
cl_platform_id pID = pPlatformIDs[i];
char cPlatformInfo[1024];
iError = clGetPlatformInfo(pID, CL_PLATFORM_NAME, sizeof(cPlatformInfo), cPlatformInfo, nullptr);
std::wcout << " Plattform Name: " << cPlatformInfo << std::endl;
cl_uint uiDeviceCount;
iError = clGetDeviceIDs(pID, CL_DEVICE_TYPE_ALL, 0, nullptr, &uiDeviceCount);
cl_device_id* pDeviceIDs = new cl_device_id[uiDeviceCount];
iError = clGetDeviceIDs(pID, CL_DEVICE_TYPE_ALL, uiDeviceCount, pDeviceIDs, &uiDeviceCount);
cl_context ctx;
cl_context_properties pContextProperties[3] = {CL_CONTEXT_PLATFORM, (cl_context_properties)pID, 0};
ctx = clCreateContext(pContextProperties, uiDeviceCount, pDeviceIDs,
nullptr, nullptr, &iError);
for (int j = 0; j < (int)uiDeviceCount; j++)
{
cl_device_id dID = pDeviceIDs[j];
cl_command_queue queue = clCreateCommandQueue(ctx, dID, CL_QUEUE_PROFILING_ENABLE, &iError);
clReleaseCommandQueue(queue);
}
clReleaseContext(ctx);
}
}
In the loop, all OpenCL Devices will be initialized multiple times and will be destructed in the end. So it will take some time to run that loop, because intialization on intel will take some time but it should work in my oppinion. Or do i miss anything here?
After the first loop, the intel platform can’t be initialized.
Can anyone proof that?
Regards,
clint3112