2010-08-16 10 views
1

Après avoir appris que de nombreuses fonctionnalités cpp (y compris la classe de vecteur stl) ne fonctionnent pas dans les fichiers cu. Même en les utilisant dans le code hôte.CUDA et STL vector

Puisque je dois utiliser une classe C++ qui utilise STL, je ne peux pas compiler mon fichier CU qui invoque le noyau. (Je n'utiliser les fonctions STL dans le fichier CU, mais je pense que le comprennent est le problème.)

J'ai essayé de construire ce en utilisant CMake avec

cuda_add_executable(
Blah 
Blah.cu 
BlahKernel.cu 
HostCodeWithVector.cpp 
) 

qui ne fonctionne évidemment pas . La question se pose maintenant s'il est possible de construire HostCodeWithVector.cpp avec gcc au lieu de nvcc et le lien en quelque sorte ..?

+0

Oui, je connais la poussée, mais je ne veux pas réécrire le code existant. – Nils

Répondre

2

depuis __host__ est exactement ce qui fonctionne sur votre CPU, vous pouvez compiler cette partie en utilisant n'importe quel compilateur (MSVC, gcc), puis lier avec le résultat nvcc. Donc, vous devriez juste laisser seulement GPU interop dans les fichiers CU, tout le reste mis dans le CPP.

+0

Ok .. et comment puis-je dire ce cmake ..? – Nils

+0

@Nils lit la documentation de gcc et nvcc. faites-les produire des fichiers objets. puis prenez l'éditeur de liens de gcc et reliez-les ensemble. – Andrey

+0

Thx pour votre réponse, le problème était d'essayer de construire 64 bits qui (encore!) Ne fonctionne pas avec CUDA sur un Mac et non avec STL. Je l'ai fait correct je pense. "Tous les fichiers C non CUDA sont compilés en utilisant les règles de construction standard spécifiées par CMAKE et les fichiers cuda sont compilés pour traiter les fichiers en utilisant nvcc et le compilateur hôte." Dit http://cmake.org/cmake/help/cmake-2-8-docs.html – Nils