Par Défaut Épinglé Mémoire Vs Zéro-Copie De La Mémoire
Dans CUDA nous pouvons utiliser épinglé mémoire plus efficacement copier les données à partir de l'Hôte de GPU que la valeur par défaut de la mémoire allouée par malloc à l'hôte. Cependant, il existe deux types de épinglé mémoires de la épinglé par défaut de la mémoire et la zéro-copie épinglé mémoire.
La valeur par défaut épinglé mémoire de copier les données à partir de l'Hôte de GPU deux fois plus rapide que la normale transferts, donc il y a certainement un avantage (si nous avons assez de mémoire hôte à la page-lock)
Dans la version différente de épinglé la mémoire, c'est à dire zéro-copie de la mémoire, nous n'avons pas besoin de copier les données à partir de l'hôte de GPU DRAM tout à fait. Les grains de lire les données directement à partir de l'Hôte de la mémoire.
Ma question est: Lequel de ces épinglé-type de mémoire est une meilleure programmation de la pratique.
Vous devez vous connecter pour publier un commentaire.
Je pense que cela dépend de votre application (sinon, pourquoi seraient-ils fournir à la fois les moyens?)
Mappé, épinglé mémoire (zéro-copie) est utile lorsque:
Le GPU n'a pas de mémoire sur son propre et utilise de la RAM de toute façon
Vous chargez les données une seule fois, mais vous avez beaucoup de calcul à effectuer et vous souhaitez masquer la mémoire de transfert des latences à travers elle.
L'hôte veut modifier/ajouter des données supplémentaires, ou de lire les résultats, tandis que le noyau est toujours en cours d'exécution (par ex. la communication)
Les données ne rentre pas dans la mémoire GPU
Notez que vous pouvez également utiliser de multiples flux de copier les données et d'exécuter des noyaux en parallèle.
Épinglé, mais qui n'est pas mappé en mémoire, c'est mieux:
Lorsque vous chargez ou de stocker les données plusieurs fois. Par exemple: vous avez plusieurs subséquente de noyaux, d'exécuter les travaux dans les étapes - il n'est pas nécessaire pour charger les données à partir de l'hôte à chaque fois.
Il n'y a pas beaucoup de calculs à effectuer et le chargement des latences ne sont pas va être bien caché
Mappé épinglé mémoire est identique à d'autres types de épinglé mémoire à tous égards, sauf qu'il est mappée dans le CUDA de l'espace d'adresse, donc peut être lu et écrit par les noyaux CUDA ainsi que celle utilisée pour les transferts DMA par les Moteurs de Copie.
L'avantage de ne pas cartographie épinglé mémoire était double: il vous a sauvé une adresse de l'espace, qui peut être un précieux réifier dans un monde de plates-formes 32 bits avec les Gpu qui peut contenir 3-4G de RAM. Aussi, la mémoire qui n'est pas mappé ne peut pas être endommagé accidentellement par des voyous noyaux. Mais cette préoccupation est assez ésotérique que l'unité de l'adresse de l'espace de fonctionnalité dans CUDA 4.0 sera la cause de tous les épinglé allocations d'être adressée par défaut.
Outre les points soulevés par l'Sanders/Kandrot livre, d'autres choses à garder à l'esprit:
écrit à la mémoire hôte à partir d'un noyau (par exemple, pour afficher les résultats pour le CPU) est agréable en ce que le GPU n'a pas de temps de latence à couvrir dans ce cas, et
il est TRÈS IMPORTANT que les opérations de mémoire ne font - sinon, même SM 2.x et plus tard Gpu prendre un gros hit de la bande passante.