2009-12-24 6 views
2

Je suis assez nouveau pour OpenCL alors s'il vous plaît, supportez-moi.OpenCL Texture Memory

Lors de la première itération de mon code, j'ai utilisé des tampons de mémoire de base pour les grands ensembles de données et les ai déclarés globaux. Cependant maintenant que je cherche à améliorer le timing, je voulais utiliser la mémoire de texture pour cela. Dans la version CUDA, nous utilisons cudaBindTexture et tex1Dfetch pour obtenir les données d'un grand tableau flottant 1D. De ma compréhension de la spécification, la mémoire de texture est la même chose que la mémoire d'image. Cependant, comme il n'y a que des objets image 2D et 3D avec des hauteurs et des largeurs maximales, je rencontre quelques problèmes. Mon tableau est plus grand que la hauteur/largeur maximale, mais pas la hauteur maximale * largeur maximale. Dois-je convertir mon tableau 1D en 2D? Ou y a-t-il une meilleure façon de le faire?

Ou suis-je complètement éteint? J'ai lu http://forums.nvidia.com/index.php?showtopic=151743 et http://forums.nvidia.com/index.php?showtopic=150454 mais ils n'étaient pas exactement concluants si la mémoire de texture référencée dans le Guide des meilleures pratiques et de la programmation était en fait des objets image.

Merci et toute aide/suggestions sont les bienvenues!

Répondre

3

J'ai trouvé la meilleure réponse en réponse à mon post sur le forum NVidia here. OpenCL 1.2 prend en charge les textures 1D.

+0

Oui, ça l'a bien expliqué. – goger

1

Mon tableau est plus grand que la hauteur maximale/largeur, mais pas la hauteur maximale * largeur maximale. Dois-je convertir mon tableau 1D en 2D?

Oui, le matériel de texture a des contraintes sur les valeurs d'index maximales. Si vous dépassez ces valeurs, vous devrez convertir en utilisant plusieurs valeurs d'index. Cela dit, je ne dis pas que la conversion en accès par texture va accélérer votre programme.

+0

En utilisant la mémoire globale, read_only la mémoire de texture de l'image fournira généralement de meilleures performances en fonction du noyau car elle est mise en cache. J'ai eu un très bon boost de performance. – achinda99

+0

Des pensées sur cette question? http://forums.nvidia.com/index.php?showtopic=154686 – achinda99

1

Le problème est que NVIDIA supporte seulement OpenCL 1.1 contrairement à AMD ou Intel ...