2014-05-14 2 views
1

Je n'ai jamais utilisé CUDA ou C++ auparavant, mais j'essaie d'obtenir le GPU de Ramses (http://www.maisondelasimulation.fr/projects/RAMSES-GPU/html/download.html en cours d'exécution.) En raison d'une erreur dans le fichier autogen.sh j'ai utilisé ./ configurer et a obtenu celui-ci travaille Ainsi, le makefile produit contient les drapeaux FPUNV suivants NVCCFLAGS = -gencode=arch=compute_10,code=sm_10 -gencode=arch=compute_11,code=sm_11 -gencode=arch=compute_13,code=sm_13 -gencode=arch=compute_20,code=sm_20 -gencode=arch=compute_20,code=compute_20 -use_fast_math -O3 Mais lorsque je tente de compiler le programme à l'aide faire, je reçois plusieurs erreurs: ptxas.CUDA ptxas Erreur "la fonction utilise trop de données partagées"

Entry function '_Z30kernel_viscosity_forces_3d_oldPfS_S_S_iiiiiffff' uses too much shared data (0x70d0 bytes + 0x10 bytes system, 0x4000 max) Entry function '_Z26kernel_viscosity_forces_3dPfS_S_S_iiiiiffff' uses too much shared data (0x70d0 bytes + 0x10 bytes system, 0x4000 max) Entry function '_Z32kernel_viscosity_forces_3d_zslabPfS_S_S_iiiiiffff9ZslabInfo' uses too much shared data (0x70e0 bytes + 0x10 bytes system, 0x4000 max) Je suis en train de compiler ce code sur Linux avec Kernel 2.6 et CUDA 4.2 (j'essaie de le faire dans mon université et ils ne mettent pas à niveau régulièrement) sur deux NVIDIDA C1060. sm_10, sm_11 et sm_13 par sm_20, (j'ai vu cette correction ici: Entry function uses too much shared data (0x8020 bytes + 0x10 bytes system, 0x4000 max) - CUDA error) mais cela n'a pas résolu mon problème. Avez-vous des suggestions? Je peux télécharger le Makefile ainsi que tout le reste, si vous en avez besoin. Nous vous remercions de votre aide!

+1

Peut-être que le message d'erreur est correct et que vous essayez d'utiliser trop de mémoire partagée pour la carte GPU que vous avez installée? –

Répondre

5

Le code que vous compilez requiert une allocation statique de 28880 octets (0x70d0) de mémoire partagée par bloc. Pour la capacité de calcul 2.x et les nouveaux GPU, ce n'est pas un problème car ils prennent en charge jusqu'à 48 Ko de mémoire partagée. Cependant, pour les périphériques de capacité de calcul 1.x, la limite de mémoire partagée est de 16 Ko (et jusqu'à 256 octets de cela peuvent être consommés par les arguments du noyau). Pour cette raison, le code ne peut pas être compilé pour les périphériques de calcul 1.x et le compilateur génère une erreur vous indiquant cela. Donc l'erreur vient de spécifier sm_13/compute_13 au compilateur. Vous pouvez supprimer cela et la construction devrait fonctionner.

Cependant, cela devient pire. Le Tesla C1060 est un périphérique de capacité de calcul 1.3. Par conséquent, vous ne pourrez pas compiler et exécuter ces noyaux sur vos GPU. Il n'y a pas de solution à moins d'omettre ces noyaux de la construction (si vous n'en avez pas besoin), ou de reporter le portage du code sur l'architecture de calcul 1.x. Je n'ai aucune idée si c'est faisable ou non. Ou trouver du matériel plus moderne pour exécuter le code.