Типичный пример рабочего процесса для программирования OpenCL, по-видимому, ориентирован на исходный код в строках, передается компилятору JIT, а затем завершен (с указанием конкретного имени ядра); и результаты компиляции могут быть кэшированы - но это остается для вас программистом, которому нужно позаботиться.CUDA-подобный рабочий процесс для OpenCL
В CUDA код скомпилирован в виде объектов, отличных от JIT, для объектных файлов (наряду с кодом на стороне хоста, но забудьте об этом на секунду), а затем просто ссылается на функции на стороне устройства в контексте enqueue или аргументы и т. д.
Теперь я хотел бы иметь второй вид рабочего процесса, но с источниками OpenCL. То есть предположим, что у меня есть код на стороне хоста my_app.c
и некоторый код ядра OpenCL в отдельном файле my_kernel.cl
(который для обсуждения является автономным). Я хотел бы иметь возможность запускать магическую команду на my_kernel.cl
, получить my_kernel.whatever
, ссылку или фальшивую ссылку, которая вместе с my_app.o
, и получить двоичный файл. Теперь, в my_app.c
Я хочу иметь возможность как-то ссылаться на ядро, даже если это не символ extern, как скомпилированная программа OpenCL (или программа + имя ядра) - и не получить ошибки компиляции.
Поддерживается ли это как-то? С ICD nVIDIA или с одним из других ICD? Если нет, то, по крайней мере, этого поддерживаемого, скажем, магического ядра компилятора + генерация дополнительного заголовка или заглушки источника для использования при компиляции my_app.c
?
Разве это не преуменьшение? Кажется, что требуется еще не стандартная функциональность C++ (материал C++ 17?) Кроме того, это спецификация/стандарт; существуют ли соответствующие реализации SYCL? – einpoklum
Да, возможно, преуменьшение; Я не использую SYCL, поэтому я не был уверен в его доступности. – Dithermaster
Тогда, может быть, через 3 года я могу принять этот ответ :-) У вас есть мой +1. – einpoklum