Я новичок в OpenCL.
У меня есть алгоритм, использующий шаблоны. Он хорошо работал с распараллеливанием OpenMP, но теперь объем данных вырос, и единственный способ их обработать - это переписать их для использования OpenCL. Я легко могу использовать MPI для создания кластера, но GPU в стиле Tesla намного дешевле кластера :)
Есть ли способ использовать шаблоны C ++ в ядре OpenCL?
Можно ли как-то расширить шаблоны компилятором C ++ или каким-либо инструментом и после этого использовать так измененную функцию ядра?
РЕДАКТИРОВАТЬ. Идея обходного пути состоит в том, чтобы каким-то образом сгенерировать C99-совместимый код из кода C ++ из шаблона.
Я нашел следующее о Комо:
Comeau C ++ 4.3.3 - это полноценный и полноценный компилятор, который выполняет полную проверку синтаксиса, полную семантическую проверку, полную проверку ошибок и все другие обязанности компилятора. Входной код C ++ транслируется во внутренние деревья компилятора и таблицы символов, не похожие на C ++ или C. Кроме того, он генерирует внутреннюю частную промежуточную форму. Но вместо использования проприетарного генератора внутреннего кода Comeau C ++ 4.3.3 генерирует C-код в качестве своего вывода. Помимо технических преимуществ C ++, аспекты создания C продуктов, таких как Comeau C ++ 4.3.3, рекламировались как причина успеха C ++, поскольку его можно было использовать на большом количестве платформ благодаря общедоступности компиляторов C.
Компилятор C используется только и только для генерации собственного кода. Это означает, что Comeau C ++ адаптирован для использования с конкретными компиляторами C на каждой соответствующей платформе. Обращаем ваше внимание на то, что пошив одежды должен выполняться компанией Comeau. В противном случае сгенерированный код C не имеет смысла, поскольку он привязан к конкретной платформе (где платформа включает в себя как минимум ЦП, ОС и компилятор C), и, кроме того, сгенерированный код C не является автономным. Следовательно, он не может использоваться сам по себе (обратите внимание, что это является как техническим, так и юридическим требованием при использовании Comeau C ++), и именно поэтому обычно нет возможности увидеть сгенерированный код C: он почти всегда бесполезен и процесс компиляции , включая его создание, следует рассматривать как внутренние фазы перевода.