Как описано в Обучающем эпизоде доктора Дэвида Гохары 6 (начиная с 43:49), графические карты не могут быть с предварительным планированием на данный момент. В результате, использование одной и той же графической карты как для интенсивного ядра OpenCL, так и для пользовательского интерфейса (или других операций с использованием графического процессора) приведет к зависанию или визуальному замораживанию. До тех пор, пока видеокарты не получат многозадачность с заранее запланированным графиком (если вообще когда-либо), невозможно сделать именно то, что вы хотите, с помощью одной видеокарты. Я вообще не верю, что это проблема конкретной платформы.
Тем не менее, эта проблема может быть решена путем разделения проблемы. Учитывая относительную скорость любого доступного отдельного графического процессора (вам придется провести тестирование, чтобы найти правильную настройку), разделите проблему OpenCL, чтобы несколько раз запустить ядро с различными частями входных данных, а затем объединить выходные данные. когда все наборы ядер завершены. Я бы порекомендовал создать наборы ядер, которые запускаются менее чем за 100 миллисекунд (на данном графическом процессоре), чтобы отставание было, если не заметно, незначительным раздражением (показатель в 100 миллисекунд является хорошим «практическим правилом» в соответствии с этот документ ).
Исходя из вашего комментария о том, что ваша программа является приложением командной строки, я предполагаю, что ваше приложение будет запускаться только один раз в любой момент времени, по сравнению с непрерывно работающим приложением с выводом в реальном времени, как это делается во многих демонстрациях OpenCL. Мой ответ выше удовлетворителен только для непостоянных приложений, так как производительность в реальном времени не является ожидаемой. Однако, если ваше приложение должно быть непрерывным, единственное доступное в настоящее время решение состоит в добавлении второй, более простой видеокарты, которая будет использоваться только для пользовательского интерфейса.