2010-10-19 5 views
0

disons que je veux charger un tableau de court de mémoire globale à la mémoire partagée. Je ne suis pas sûr de savoir comment fonctionne la coalescence ici. Dans le guide des meilleures pratiques, il est indiqué que sur le dispositif de capacité de calcul 1.0 ou 1.1, le kième filet d'une demi-chaîne doit accéder au k-ième mot dans un segment aligné sur 16 fois la taille des éléments accédés.coalesced lire short integer cuda

Si je comprends bien, dans le cas où je casse mes données en segments de 32 octets (16 courts métrages), l'identifiant de thread 0, 16, 32 ... doit accéder au premier élément de chaque segment? dois-je considérer l'alignement de 64 octets ou l'alignement de 128 octets aussi? J'ai un GS 250, donc je suppose que c'est important. Les conseils sont les bienvenus. Merci.

Répondre

2

Selon l'article G.3.2.1 du CUDA Programming Guideshort ne sera pas s'unir sur Compute capacité 1.0 et 1.1 sous toutes circonstances. Plus précisément, il est écrit:

La taille des mots accessibles par les fils doit être de 4, 8 ou 16 octets

Vous pouvez cependant utiliser des types de vecteurs tels que short2, short4, ou même short8 pour obtenir l'accès coalescé. Les règles de coalescence pour ces types sont également décrites dans la section G.3.2.1. Cependant, en ce qui concerne la coalescence, un short2 est juste comme un 32 bits int.

FWIW, les périphériques avec une capacité de calcul de 1,3 ou plus de types de poignée comme char et short beaucoup mieux. La lecture de char s sur un périphérique 1.3 peut vous donner jusqu'à ~ 60% de la bande passante mémoire maximale contre ~ 10% de la bande passante mémoire maximale sur un périphérique 1.0 ou 1.1.