У меня есть алгоритм, использующий шаблоны. Он хорошо работал с распараллеливанием OpenMP, но теперь объем данных вырос, и единственный способ его обработать — переписать его для использования OpenCL.
Я могу легко использовать MPI для создания кластера, но графический процессор, подобный Tesla, гораздо сложнее. дешевле кластера
Есть ли способ использовать шаблоны C++ в ядре OpenCL?
Возможно ли это как-то расширить шаблоны с помощью компилятора C++ или какого-либо инструмента и после которые используют измененную функцию ядра?
EDIT. Идея обходного пути состоит в том, чтобы каким-то образом сгенерировать C99-совместимый код из кода C++ из шаблона.
Я нашел следующее о Comeau:
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: это почти всегда бесполезно, и процесс компиляции , включая его генерацию, следует рассматривать как внутренние этапы трансляции.
Подробнее здесь: https://stackoverflow.com/questions/446 ... cl-kernels
Мобильная версия