2010-08-06 6 views
0

Une erreur très étrange: si j'ajoute du code spécifique à mon projet, toutes les textures que j'utilise ne contiennent rien d'autre que 0. Même si je ne suis pas en train d'exécuter le code ajouté.Compilation du code spécifique NULLs mes textures

Le code spécifique est ici les noyaux d'un échantillon nVidia CUDA [1], l'exemple Bicubic Texture Filtering, dans le noyau spécifique CatMulRom. Je l'ai tracé jusqu'à l'une des sous-fonctions. Si je réinitialise une variable, tout redevient normal. C'est vraiment, vraiment étrange et je n'ai plus aucune idée de ce que ça pourrait être. L'ajout et l'utilisation du noyau bicubique ne posent aucun problème.

Voici le changement qui « fixe » le problème:

__host__ __device__ 
float catrom_w1(float a) 
{ 
    a = 1; // Fix 
    return 1.0f + a*a*(-2.5f + 1.5f*a); 
} 

Si je réinitialiser la variable, il fonctionne si je ne suis pas en utilisant CatMulRom. Si j'essaie de l'utiliser, les textures sont à zéro. Les textures en question sont définies comme suit:

texture<uchar1, 2, cudaReadModeNormalizedFloat> tex; 

J'ai édité loin le modèle, en espérant qu'il résoudrait le problème, mais il persiste.

[1] http://developer.download.nvidia.com/compute/cuda/sdk/website/samples.html

+0

Quelle version de CUDA et quel système d'exploitation utilisez-vous? – karlphillip

+0

J'utilise Windows 7 64bit et CUDA 2.2 –

Répondre

3

Vous avez Busted votre pile.

+0

Cela a du sens. Des astuces pour savoir où et pourquoi? –

+1

@David Verhasselt: Malheureusement, je ne suis pas un expert en piles cassées puisque je ne l'ai jamais fait et n'ai jamais utilisé CUDA. Cependant, votre code est un cas classique. Je regarderais d'abord la fonction qui court juste avant celle-ci, ou les fonctions qu'elle appelle. Ensuite, voyez si vous pouvez télécharger un outil pour cela. – Puppy