opencl — можно ли запустить кусок чистого кода C ++ в графическом процессоре

Я не очень хорошо знаю OpenCL, но я знаю, что C / C ++ API требует, чтобы программист предоставлял код OpenCL в виде строки. Но в последнее время я обнаружил ArrayFire библиотека, которая не требует строкового кода для вызова некоторых вычислений. Мне было интересно, как это работает (это с открытым исходным кодом, но код немного сбивает с толку). Можно ли было бы написать параллель для бэкэнда OpenCL, который вызывает любой фрагмент скомпилированного кода (например, x86), как показано ниже:

template <typename F>
void parallel_for(int starts, int ends, F task) //API
{ /*some OpenCL magic */ }
//...
parallel_for(0, 255, [&tab](int i){ tab[i] *= 0.7; } ); //using

PS: я знаю, что я на 99% слишком оптимистичен

1

Решение

Вы не можете действительно вызывать код C ++ Host с устройства, используя стандартный OpenCL.
Ты можешь использовать SYCL, стандарт Khronos для программирования на C ++ из одного источника. SYCL позволяет компилировать C ++ непосредственно в код устройства, не требуя строк OpenCL. Вы можете вызывать любую функцию C ++ из ядра SYCL (если доступен исходный код). SYCL.tech имеет больше ссылок и обновленной информации.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector