diff --git a/opm/simulators/linalg/bda/openclSolverBackend.cpp b/opm/simulators/linalg/bda/openclSolverBackend.cpp index 5e10ad8ec..43ba050e2 100644 --- a/opm/simulators/linalg/bda/openclSolverBackend.cpp +++ b/opm/simulators/linalg/bda/openclSolverBackend.cpp @@ -89,10 +89,8 @@ openclSolverBackend::openclSolverBackend(int verbosity_, int maxit_, out.clear(); } - cl_context_properties properties[] = {CL_CONTEXT_PLATFORM, (cl_context_properties)(platforms[platformID])(), 0}; - context.reset(new cl::Context(CL_DEVICE_TYPE_GPU, properties)); + platforms[platformID].getDevices(CL_DEVICE_TYPE_ALL, &devices); - devices = context->getInfo(); if (devices.size() == 0){ OPM_THROW(std::logic_error, "Error openclSolver is selected but no OpenCL devices are found"); } @@ -168,8 +166,15 @@ openclSolverBackend::openclSolverBackend(int verbosity_, int maxit_, out.clear(); } - cl::Event event; - queue.reset(new cl::CommandQueue(*context, devices[deviceID], 0, &err)); + // removed all unused devices + if (deviceID != 0) + { + devices[0] = devices[deviceID]; + } + devices.resize(1); + + context = std::make_shared(devices[0]); + queue.reset(new cl::CommandQueue(*context, devices[0], 0, &err)); } catch (const cl::Error& error) { std::ostringstream oss;