Dans mon application CUDA, je copie des données de la mémoire de l'appareil vers la mémoire partagée. Est-ce que ces données sont également mises en cache dans L1?La mémoire partagée CUDA est également mise en cache
Répondre
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.
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.
- 1. Mémoire partagée CUDA
- 2. Comment est organisée la mémoire partagée 2D en CUDA
- 3. CUDA: opération atomique sur la mémoire partagée
- 4. Écrasement de mémoire partagée cuda?
- 5. CUDA: Tableaux Shift dans la mémoire partagée
- 6. mémoire partagée cuda - résultats incohérents
- 7. Bogue de mémoire partagée Cuda
- 8. CUDA: Attribution de mémoire partagée
- 9. Mémoire partagée gratuite dans CUDA
- 10. mémoire globale vs mémoire partagée dans CUDA
- 11. Utilisation de la mémoire partagée dans Cuda
- 12. Adressage de la mémoire partagée CUDA
- 13. Réallocation de la mémoire partagée dans CUDA
- 14. Problèmes de compréhension de la mémoire partagée CUDA
- 15. Mémoire Cuda partagée dans tous les sujets
- 16. Quelle taille de mémoire partagée CUDA signifie
- 17. CUDA mémoire partagée sous le capot questions
- 18. page Cache pour la mémoire partagée
- 19. Performances CUDA: ramification et mémoire partagée
- 20. Cache de mémoire partagée C#
- 21. CUDA erreur de mémoire partagée atomique
- 22. cuda global et temps d'accès à la mémoire partagée
- 23. Comportement étrange concernant CUDA mémoire partagée
- 24. Simulation cuda nbody - problème de mémoire partagée
- 25. CUDA Simple Array Search - Mémoire partagée
- 26. CUDA Accès mémoire illégal avec une mémoire partagée éventuellement "insuffisante"
- 27. CUDA trouve la valeur maximale dans la mémoire partagée
- 28. Transposition de la matrice CUDA avec la mémoire partagée
- 29. Cuda global à mémoire partagée et mémoire constante
- 30. calculer l'amplitude d'un pixel en cuda avec mémoire partagée
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