2012-06-30 2 views

Répondre

2

Par défaut, toutes les charges de mémoire de la mémoire globale sont mises en cache dans L1. L'emplacement cible pour la charge de mémoire globale n'a aucun effet sur la mise en cache L1 (qu'il s'agisse d'un registre, d'une mémoire partagée ou d'une mémoire locale de thread). La mémoire partagée elle-même n'est évidemment pas mise en cache.

1

Ceci est juste pour développer ce que dit @talonmies.

Une copie est deux opérations distinctes à un niveau bas, une charge et une mémoire. Le chargement et le stockage peuvent être mis en cache dans L1 et L2 s'ils accèdent à la mémoire globale. Comme la partie de chargement de votre copie provient de la mémoire globale, elle sera mise en cache par défaut dans L1 et L2. Ainsi, à moins que le compilateur ne détecte la situation particulière de copie de la mémoire globale vers la mémoire partagée et utilise une charge non attachée, vous obtenez deux copies de vos données accessibles à la même latence car la mémoire partagée et le cache L1 sont implémentés avec même mémoire physique sur puce.

du guide de programmation CUDA C 4.2:

Il y a un cache L1 pour chaque multiprocesseur et un cache L2 partagée par tous multiprocesseurs, qui sont tous deux utilisés pour mettre en cache les accès à la mémoire locale ou globale , y compris les déversements temporaires de registres. Le comportement du cache (par exemple si les lectures sont mises en cache à la fois dans L1 et L2 ou dans L2 uniquement) peut être partiellement configuré par accès en utilisant des modificateurs de l'instruction de chargement ou de stockage.

Je ne pouvais pas trouver quoi que ce soit sur la façon dont ce comportement peut être modifié de CUDA C.

+3

Il ne peut pas être modifié dans le code utilisateur, mais pour les appareils et Kepler de Fermi, il peut être modifié par les options du compilateur . Utiliser '-Xptxas =" - dlcm = cg "' forcera l'assembleur à générer des transactions de 32 octets plutôt que de 128 octets qui contourneront le cache L1. – talonmies

Questions connexes