2009-08-11 7 views
3

Je veux utiliser la mémoire __constant__ qui sera accessible par tous les threads dans tous mes noyaux.cudaMemcpyToSymbol ne pas copier les données

La déclaration est quelque chose comme ça

extern __constant__ float smooth [8 * 1024]; 

Je copie des données à cette variable en utilisant

cudaMemcpyToSymbol("smooth", smooth_local, smooth_size, 0, cudaMemcpyHostToDevice); 

smooth_size = 7K octets

Il me donnait une sortie incorrecte

mais quand je l'ai exécuté en mode -deviceemu et essayé pour imprimer le contenu de ces deux variables à l'intérieur du noyau, j'obtenais tous les zéros pour smooth et smooth_local était correct.

J'ai essayé d'imprimer la sortie juste après cudaMemcpyToSymbol encore il me donnait des 0.

Pouvez-vous éclairer quelqu'un sur mon problème?

+0

@Nishu, avez-vous résolu? – elect

Répondre

6

Pour mémoire constante CUDA déclarer, il ressemblerait à ceci:

__constant__ float smooth[8 * 1024]; 

Notez que la mémoire constante CUDA est locale à son unité de traduction (à-dire qu'elle est implicitement déclarée statique). C'est l'une des limitations gênantes de CUDA, donc si vous avez besoin de partager ces valeurs entre des fichiers .cpp/.cu séparés, vous devrez redéclairer la mémoire dans chaque fichier .cpp/.cu dans lequel il est nécessaire. Vous aurez également appeler à nouveau cudaMemCopyToSymbol. Et enfin, vous êtes limité à un total de 64k de mémoire constante dans tout votre programme CUDA.

Questions connexes