Попытка смешать в OpenCL с CUDA в шаблоне SDK NVIDIA - PullRequest
1 голос
/ 06 октября 2010

У меня были трудности с организацией эксперимента, когда я выделяю память с помощью CUDA на устройстве, беру этот указатель на память на устройстве, использую его в OpenCL и возвращаю результаты. Я хочу посмотреть, возможно ли это. Мне было трудно заставить работать проект CUDA, поэтому я просто использовал шаблонный проект Nvidia в их SDK. В make-файле я добавил -lOpenCL в раздел libs файла common.mk. Когда я это делаю, все нормально, но когда я добавляю #include <CL/cl.h> в template.cu, чтобы я мог начать делать вызовы OpenCL, я получаю более 100 ошибок. Все они похожи на это, но с разными именами функций в конце:

/ usr / lib / gcc / x86_64-linux-gnu / 4.4.1 / include / xmmintrin.h (334): ошибка: идентификатор "__builtin_ia32_cmpeqps" не определен

Мне трудно понять, почему. Пожалуйста, помоги, если можешь. Также, если есть более простой способ настроить проект, который сможет вызывать API-интерфейсы CUDA и OpenCL, дайте мне знать.

1 Ответ

1 голос
/ 07 октября 2010

Я действительно не работал с Cuda, поэтому я не знаю, насколько полезен мой ответ.

Из того, что я понимаю, вы пытаетесь использовать opencl непосредственно из вашего хост-кода cuda, который, если я правильно помню, скомпилирован с использованием некоторого компилятора из nvidia вместо стандартного gcc. Таким образом, проблема, вероятно, в том, что этот компилятор не реализует необходимые встроенные функции для работы с упомянутыми заголовками. Посмотрите здесь для аналогичной проблемы, и это решение: http://forums.nvidia.com/lofiversion/index.php?t88573.html

Кажется, вам нужно поместить все, что нужно для API opencl, в другой (не cuda) модуль компиляции, чтобы он был скомпилирован компилятором не nvidia.

Однако я бы не рассчитывал на эту работу (поскольку буферы opencl не просто указатели на память, но должны содержать некоторые метаинформации), просто потому, что нет реальной причины, по которой это должно работать, и если это так, то нет никакой гарантии что он продолжает это делать.

Что вы можете попробовать, если действительно хотите использовать opengl для взаимодействия, так как и opencl, и cuda имеют расширения, позволяющие создавать буферы из буферов opengl.

Однако зачем вам это делать? Что мешает вам использовать кратковременную реализацию Apple, поскольку IIRC - это открытый исходный код, и большая часть его (части opencl) в любом случае должна быть независимой от платформы.

...