К сожалению, большинство графических процессоров не поддерживают одновременное выполнение нескольких задач, и поэтому нет способа назначить приоритет.Это означает, что когда ваше ядро OpenCL работает, это единственная задача, выполняемая графическим процессором, и это будет иметь место до завершения работы ядра.
Если вы хотите, чтобы компьютер работал во время работы ядра(обычная активность на рабочем столе, просмотр, видео, игры) каждая итерация ядра должна быть очень быстрой.Таким образом, если вы можете сократить время, затрачиваемое на каждый набор запусков ядра (т.е. на каждое задание, поставленное в очередь с clEnqueueNDRangeKernel), вы можете получить то, что ищете.Это может быть достигнуто либо уменьшением NDRange, хотя оно должно быть достаточно большим, чтобы быть эффективным на GPU.Что-то вроде 5120 рабочих элементов - это то, что я нашел минимальным для Radeon HD 5870. Или вы можете уменьшить объем работы в каждом ядре.
Если вы можете получить время выполнения каждого задания в очередипримерно до 1/60 секунды, есть большая вероятность, что компьютер будет работать.Мне удалось запустить программы OpenCL, где каждая постановка занимает около 1/120 секунды во время игры, ничего не замечая.