2012-01-09 3 views
2

Clang может переводить CUDA (не полный) или OpenCL на llvm. Как он может сохранить «общее» ключевое слово, чтобы он знал разницу между общей и глобальной памятью?Компиляция CUDA или OpenCL до llvm IR

+0

Привет, Я потратил три дня на то, чтобы скомпилировать ядро ​​CUDA в llvm IR, и я не мог этого сделать. Я попытался изменить langoptions.cpp и добавил CUDA = 1; там, но все же clang дает мне сообщения об ошибках для синтаксиса cuda (например, вызов _synchthreads()). любая помощь/примечание/советы о том, как вы это сделали, очень помогут. благодарит заранее. –

ответ

0

Я не знаком с CUDA или OpenCL, но могу посоветовать вам посмотреть на полученный LLVM IR, который генерируется интерфейсом и посмотреть, какой код генерируется. Также вы можете посмотреть соответствующий LLVM-сервер, чтобы узнать, как он использует общую/глобальную память.

+0

Из сгенерированного llvm IR я не вижу никакой разницы в использовании __global и __local. – dalibocai

+0

Похоже, что решение принимается в бэкэнд. Возможно, вы можете найти дополнительную информацию по адресу http://llvm.org/devmtg/2011-11/. Есть несколько презентаций о LLVM OpenCL. –

+0

Было бы странно, что программисту необходимо явно управлять локальной памятью, но на самом деле он управляется бэкэндом. В любом случае, спасибо за ссылку. – dalibocai