2010-10-06 26 views
1

J'ai eu du mal à mettre en place une expérience où j'alloue de la mémoire avec CUDA sur l'appareil, prend ce pointeur en mémoire sur l'appareil, l'utilise dans OpenCL, et renvoie les résultats. Je veux voir si c'est possible. J'ai eu du mal à faire fonctionner un projet CUDA, alors j'ai simplement utilisé le modèle de projet de Nvidia dans leur SDK. Dans le makefile j'ai ajouté -lOpenCL à la section libs du common.mk. Tout va bien quand je fais cela, mais quand j'ajoute #include <CL/cl.h> à template.cu pour que je puisse commencer à faire des appels OpenCL, je reçois plus de 100 erreurs. Tous ressemblent à cela, mais avec des noms de fonctions à la fin:Essayer de mixer dans OpenCL avec CUDA dans le template SDK de NVIDIA

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

je vais avoir du mal à comprendre pourquoi. S'il vous plait aidez si vous le pouvez. De plus, s'il existe un moyen plus simple de configurer un projet capable d'appeler les API CUDA et OpenCL, faites-le moi savoir.

+0

Pourquoi mélanger CUDA et OpenCL? –

+0

Je travaille sur un projet OpenCL (doit être OpenCL) dans Ubuntu et j'ai besoin d'une bibliothèque comme cufft, qui n'est disponible que dans CUDA. Je prévois d'utiliser cette solution à court terme jusqu'à ce que quelque chose comme la bibliothèque OpenCL FFT d'Apple soit porté sur Ubuntu ou qu'une autre bibliothèque fft soit disponible pour OpenCL sur Ubuntu. – smuggledPancakes

Répondre

1

Je n'ai pas vraiment travaillé avec cuda, donc je ne sais pas à quel point ma réponse est utile. D'après ce que je comprends, vous essayez d'utiliser opencl directement à partir de votre code d'hôte cuda, ce qui est si je me souviens bien compilé en utilisant un compilateur de nvidia au lieu du gcc standard. Donc, le problème est probablement que ce compilateur n'implémente pas les builtins nécessaires pour fonctionner avec les en-têtes mentionnés. Regardez ici pour un problème similaire et il est la solution: http://forums.nvidia.com/lofiversion/index.php?t88573.html

Il semble que vous devez mettre tout ce qui a besoin de l'api OpenCL dans une autre unité de compilation (non cuda) de sorte qu'il sera compilé par le compilateur non nvidia.

Cependant je ne compterais pas sur ce travail (puisque les tampons opencl ne sont pas seulement des pointeurs vers la mémoire mais devraient contenir des métainformations à), simplement parce qu'il n'y a aucune raison réelle que cela fonctionne et si c'est le cas garantir qu'il continue à le faire. Ce que vous pouvez essayer si vous voulez vraiment utiliser opengl pour l'interop, puisque opencl et cuda ont des extensions pour permettre de créer des tampons à partir de buffers opengl.

Cependant pourquoi avez-vous besoin de faire cela? Ce qui vous empêche d'utiliser l'implémentation à court terme d'Apple, puisque l'IIRC est open source et que la plupart d'entre eux (les composants opencl) devraient être indépendants de la plate-forme de toute façon.

+0

J'aime votre idée d'utiliser des tampons OpenGL, je crois que j'en ai déjà entendu parler. Cela semble être une façon beaucoup plus sûre de le faire. J'ai regardé le lien que vous avez posté, il semble que les emballages fonctionnent et je vais essayer car je ne peux pas penser à autre chose. Nous utilisons actuellement cufft parce que nous pouvons y accéder via JCUDA et ensuite depuis Java, nous pouvons exécuter notre programme sur une machine Linux, Mac ou Windows. Avec la bibliothèque FFT d'Apple, nous devions la porter nous-mêmes pour la rendre accessible via JOCL, ce que le mainteneur a déjà exprimé son intérêt à faire lui-même. – smuggledPancakes