2010-10-06 7 views
1

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

/usr/lib/gcc/x86_64-linux-gnu/4.4.1/include/xmmintrin.h(334): error: identifier "__builtin_ia32_cmpeqps" is undefined

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

+0

Зачем смешивать CUDA и OpenCL? –

+0

Я работаю над проектом OpenCL (должен быть OpenCL) в Ubuntu, и мне нужна библиотека, например, cufft, которая доступна только в CUDA. Я планирую использовать это в качестве краткосрочного решения, пока что-то, что Apple OpenCL FFT-библиотека портируется на Ubuntu, или какая-либо другая библиотека fft доступна для OpenCL на Ubuntu. – smuggledPancakes

ответ

1

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

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

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

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

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

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

+0

Мне нравится ваша идея использования буферов OpenGL, я думаю, что слышал об этом раньше. Это похоже на гораздо более безопасный способ сделать это. Я посмотрел ссылку, которую вы разместили, похоже, что обертки будут работать, и я попробую, потому что я не могу придумать ничего другого. В настоящее время мы используем cufft, потому что мы можем получить к нему доступ через JCUDA, а затем, начиная с его на Java, мы можем запускать нашу программу на Linux, Mac или Windows. С помощью библиотеки FFT от Apple нам придется перенести ее самостоятельно, чтобы сделать ее доступной через JOCL, которую сопровождающий уже проявил к себе. – smuggledPancakes