Quand est-CUDA de l' __shared__ la mémoire est utile?
Quelqu'un peut-il m'aider avec un exemple très simple sur la façon d'utiliser la mémoire partagée? L'exemple inclus dans le Cuda C guide de programmation semble encombré par des informations non pertinentes.
Par exemple, si je copie un grand tableau à l'appareil de mémoire globale et souhaitez carré chaque élément, comment peut-mémoire partagée être utilisé pour accélérer le processus? Ou n'est-il pas utile dans ce cas?
Vous devez vous connecter pour publier un commentaire.
Dans le cas que vous mentionnez, la mémoire partagée n'est pas utile, pour la raison suivante: chaque élément de données est utilisé qu'une seule fois. Pour la mémoire partagée pour etre utile, vous devez utiliser les données transférées vers la mémoire partagée à plusieurs reprises, en utilisant les bons modèles d'accès, pour l'avoir aider. La raison pour cela est simple: il suffit de lecture de la mémoire globale nécessite 1 mondial de lire la mémoire et le zéro de la mémoire partagée lit; la lecture en mémoire partagée première demanderait 1 mondial de lecture de la mémoire et 1 mémoire partagée lecture, qui prend plus de temps.
Voici un exemple simple, où chaque fil dans le bloc calcule la valeur correspondante, au carré, plus la moyenne des deux sa gauche et droit voisins, au carré:
Noter que ce qui est envisagé, travailler à l'aide d'un seul bloc. L'extension à plus de blocs doit être simple. Suppose bloc de dimension (1024, 1, 1) et de la grille de dimension (1, 1, 1).
Pense de mémoire partagée comme un explicitement géré cache - il est seulement utile si vous avez besoin d'accéder à des données plus d'une fois, soit dans le même thread ou à partir de plusieurs threads dans le même bloc. Si vous êtes seulement l'accès aux données à la fois, puis de la mémoire partagée ne va pas vous aider.