2017-01-24 2 views
0

j'ai installé le cudaArray, et ont lié à une texture:col texture variable cuda comme argument

texture<float, 2, cudaReadModeElementType> tex; 
    cudaChannelFormatDesc channelDesc = 
     cudaCreateChannelDesc(32, 0, 0, 0, cudaChannelFormatKindFloat); 
    cudaArray *cuArray; 
    checkCudaErrors(cudaMallocArray(&cuArray, 
            &channelDesc, 
            width, 
            height)); 
    checkCudaErrors(cudaMemcpyToArray(cuArray, 
             0, 
             0, 
             hData, 
             size, 
             cudaMemcpyHostToDevice)); 

Maintenant, je me demande, si le contenu dans le cuArray et tex reste le même tout le temps pendant le calcul, puis-je passer tex et/ou cuArray à une autre fonction afin que je n'aie pas à faire la liaison à chaque fois?

Quelque chose comme ceci:

DoJobUsingTex(float* output, float* input, int size, texture tex) 
{ 
    \\ do something here 
} 
+1

https://devblogs.nvidia.com/parallelforall/cuda-pro-tip-kepler-texture-objects-improve-performance-and-flexibility/ – talonmies

+0

@talonmies Je ne l'ai pas essayé, mais il ressemble exactement Ce dont j'ai besoin. Pouvez-vous l'afficher en réponse pour que je puisse l'accepter? Merci beaucoup. –

Répondre

1

CUDA introduit des objets de texture lorsque CUDA 5 et matériel Kepler ont été libérés. Ce sont des textures dites "sans pattes" qui peuvent être transmises par valeur aux noyaux, il n'est donc pas nécessaire de relier la mémoire à chaque fois que vous voulez exécuter un noyau sur des données de texture différentes.

Vous pouvez en savoir plus sur leur utilisation here.

+0

Si vous êtes intéressé par les capacités de lecture/écriture, vous pouvez regarder les objets de surface cuda. –