Question

J'ai regardé à travers le guide le guide de programmation et les pratiques exemplaires et elle a mentionné que l'accès mondial mémoire prend 400-600 cycles. Je ne voyais pas grand-chose sur les autres types de mémoire comme le cache de texture, cache constante, la mémoire partagée. Les registres ont 0 latence de la mémoire.

Je pense que le cache constant est le même que des registres si tous les threads utilisent la même adresse dans le cache constant. Le pire des cas, je ne suis pas si sûr.

La mémoire partagée est le même que les registres tant qu'il n'y a pas de conflits bancaires? S'il y a alors comment le temps d'attente se déploient?

Qu'en est-texture cache?

Était-ce utile?

La solution

Le temps d'attente aux shared / constant / mémoires de texture est faible et dépend de l'appareil que vous avez. En général cependant GPUs sont conçus comme une architecture de débit ce qui signifie que, en créant suffisamment de threads que le temps d'attente dans les mémoires, y compris la mémoire globale, est caché.

La raison pour laquelle les guides parlent de la latence de la mémoire globale est que le temps d'attente est des ordres de grandeur supérieure à celle d'autres souvenirs, ce qui signifie qu'il est le temps d'attente dominante à considérer pour l'optimisation.

Vous avez mentionné cache constant en particulier. Vous êtes tout à fait exact que si tous les threads dans une chaîne (à savoir groupe de 32 threads) accéder à la même adresse alors il n'y a pas de pénalité, à savoir la valeur est lue à partir du cache et la diffusion à tous les threads simultanément. Toutefois, si les threads accéder à des adresses différentes alors les accès doit serialize puisque le cache ne peut fournir une valeur à la fois. Si vous utilisez le Générateur de profils CUDA, alors cela apparaîtra sous le comptoir de sérialisation.

Mémoire partagée, à la différence cache constante, peut fournir une bande passante beaucoup plus élevée. Consultez le CUDA Optimisation parler pour plus de détails et une explication de la banque les conflits et leur impact.

Autres conseils

(Kepler) Tesla K20 les latences sont comme suit:

  

mémoire globale: 440 horloges
  
mémoire constante   L1: 48 horloges
  L2: 120 horloges
  Mémoire partagée: 48 horloges
  mémoire de texture
  L1: 108 horloges
  L2: 240 horloges

Comment puis-je savoir? J'ai couru les microbenchmarks décrits par les auteurs de Démystifier GPU microarchitecture par Microbenchmarking. Ils fournissent des résultats similaires pour la GTX 280 plus.

a été mesurée sur un cluster Linux, le nœud de calcul où je courais les points de référence n'a pas été utilisé par d'autres utilisateurs ou couru tout autre processus. Il est Linux BULLX avec une paire de 8 Xeons de base et 64 Go de RAM, nvcc 06.05.12. J'ai changé le sm_20 à sm_35 pour la compilation.

Il y a aussi un opérandes coût chapitre dans PTX ISA bien qu'il est pas très utile, il rappelle tout ce que vous attendez déjà, sans donner de chiffres précis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top