10
votes

Résolution des avertissements de poussée / Cuda "ne peut pas dire quel pointeur pointe de ..."

J'essaie de construire une application triviale à l'aide de Thrust / Cuda 4.0 et obtenez de nombreux avertissements "AVERTISSEMENT: impossible de dire quel pointe pointe, en supposant que quelqu'un d'autre ait vu cela et comment puis-je l'avoir vu Désactivez-les ou corrigez mon code?

Merci,

ADE

Voici mon code.

Hello.h < pré> xxx

hello.cu xxx

la sortie xxx

Il y a beaucoup de ces .


0 commentaires

3 Réponses :


4
votes

Alors ... le figuré et pensais que je le posterais ici. La solution est soit

n'utilisez pas le drapeau -g sur nvcc

ou

Compilez pour arch SM_20 (Fermi) si vous ciblez un tel appareil

Il s'agit d'une limitation connue de NVCC et non d'un bug de poussée. Voir:

http://groups.google.com / Groupe / Thust-Utilisateurs / Browse_thread / Fil / 1914198ABF646C6D / 8BC00E6030B0030B? # 8BC00E6030B0030B


0 commentaires

12
votes

Fermi utilise une adressage uniforme de l'espace mémoire partagé et global, tandis que les messages pré-Fermi ne le font pas.

Pour l'affaire Pre-Fermi, lorsque vous obtenez une adresse, vous ne savez pas si cela devrait être partagé ou global. Le compilateur essaie de le comprendre, mais parfois, cela ne peut pas. Lorsque cela se produit, le message apparaît - "Assumer global" est correct dans 99,999% des cas, car lorsque vous souhaitez qu'un pointeur de mémoire partagée, vous prenez explicitement une adresse d'une variable partagée et que le compilateur peut reconnaître cela.

Pour les cartes Fermi, partagée ou globale peut être déduite au moment de l'exécution (basée sur l'adresse) et aucune hypothèse ne doit être faite par le compilateur.

Suggestionnaire: ignorer ces avertissements.


0 commentaires

1
votes

Si vous utilisez Mirosoft Visual Studio: à partir du projet-> Propriétés-> Cuda C / C ++ -> Device-> Génération de code; Changer le Compute_10, SM_10 à Compute_20, SM_20


0 commentaires