Попытка смешивать в Opencl с CUDA в шаблоне SDK NVIDIA
Вопрос
У меня трудное время настроило эксперимент, в котором я выделяю память с CUDA на устройстве, возьмите этот указатель на память на устройстве, используйте его в OpenCL и вернуть результаты. Я хочу посмотреть, возможно ли это. У меня было трудное время, чтобы заставить проект Куда на работу, поэтому я только что использовал проект шаблона NVIDIA в их SDK. В Makefile я добавил -lopencl в секции libs об общем.mk. Все в порядке, когда я делаю это, но когда я добавляю #include <CL/cl.h>
Для Template.CU Так что я могу начать делать вызовы OpenCL, я получаю более 100 ошибок. Все они выглядят похожи на это, но с разными именами функций в конце:
/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334): Ошибка: идентификатор "__buittin_ia32_cmpeqps" не определен
Мне трудно выяснить, почему. Пожалуйста, помоги, если можешь. Кроме того, если есть более простым способом настроить проект, который сможет позвонить в CUDA и OpenCL APIS, дайте мне знать.
Решение
Я действительно не работал с Куда, поэтому я не знаю, насколько полезно мой ответ.
От того, что я понимаю, вы пытаетесь использовать OpenCL непосредственно с вашего HostCode Cuda, который, если я помню правильно скомпилированным с помощью некоторого компилятора из NVIDIA вместо стандартных GCC. Таким образом, проблема, вероятно, в том, что этот компилятор не реализует необходимые сочинения для работы с упомянутыми заголовками. Посмотрите здесь для аналогичной проблемы, и это решение:http://forums.nvidia.com/lofversion/index.php?t88573.html.
Похоже, вам нужно поставить все, что нуждается в API OpenCL в другой (некуда) компиляционный блок, чтобы он был составлен компилятором Novidia.
Однако я бы не рассчитывал на эту работу (так как буферы OpenCL не просто указатели на память, но должны содержать некоторые метаинформации), просто потому, что нет никакой настоящей причины, по которой она должна работать, и если она не может быть гарантии, что она продолжается сделать это.
То, что вы можете попробовать, если вы действительно хотите использовать OpenGL для Interop, поскольку оба OpenCL и CUDA имеют расширения для создания буферов из буферов OpenGL.
Однако почему вам нужно сделать это? Что за то, что удерживает вас с использованием краткости реализации Apple, поскольку IIRC это открытый источник и большинство из них (детали OpenCL) должны быть независимыми платформой.