Est-il une limite à la prise en charge d'OpenCL mémoire locale?
Aujourd'hui, j'ai ajouté quatre autres __local
variables à mon noyau pour le vidage des résultats intermédiaires. Mais juste l'ajout de ces quatre variables au noyau de la signature et de l'ajout de l'correspondant arguments du Noyau rend toutes les sorties du noyau à "0". Aucun des cl fonctions renvoie un code d'erreur.
J'ai par la suite essayé d'ajouter l'un des deux plus petits variables. Si j'ajoute un seul d'entre eux, cela fonctionne, mais si j'ajoute les deux d'entre eux, il se décompose.
Donc ce comportement pourrait-il d'OpenCL veux dire, que j'ai attribué à beaucoup __local
de la mémoire? Comment puis-je savoir, combien __local
mémoire utilisable par moi?
OriginalL'auteur Framester | 2011-03-08
Vous devez vous connecter pour publier un commentaire.
La quantité de mémoire locale, un dispositif offre à chacun de ses unités de calcul peuvent être interrogés à l'aide de la
CL_DEVICE_LOCAL_MEM_SIZE
drapeau avec laclGetDeviceInfo
fonction:La taille donnée est exprimée en octets. Chaque groupe de travail peut allouer beaucoup de mémoire strictement pour lui-même. Notez, cependant, que si elle ne allouer au maximum, cela peut empêcher la planification d'autres workgrups simultanément sur la même unité de calcul.
Mise à jour de cette réponse en conséquence, merci. Veuillez envisager de supprimer le commentaire maintenant.
OriginalL'auteur Kyle Lutz
Bien sûr, il est, depuis la mémoire locale est physique plutôt que virtuel.
Nous sommes habitués, de travailler avec un espace d'adressage virtuel sur les Processeurs, théoriquement avoir autant de mémoire que nous voulons, peut - être défaut à de très grandes tailles en raison de fichier d'échange de la partition /swap en cours d'exécution, ou peut-être même pas que, jusqu'à ce que nous avons réellement essayez d'utiliser trop de mémoire, de sorte qu'il ne peut pas être mappé à la RAM et le disque.
Ce n'est pas le cas pour des choses comme un ordinateur du noyau de système d'exploitation (de niveau inférieur ou de parties de celui-ci) qui ont besoin d'accéder à des zones spécifiques dans la RAM.
Il n'est pas le cas pour les GPU mémoire globales et locales. Il n'y a pas de* de pagination de la mémoire (reconfiguration de la perception fil des adresses des adresses de mémoire physique); et sans échange. En ce qui concerne spécifiquement la mémoire locale, chaque unité de calcul (= chaque multiprocesseur symétrique sur un GPU) a un tas de RAM utilisée comme mémoire locale; le vert dalles ici:
la taille de chaque dalle est ce que vous obtenez avec
clGetDeviceInfo( · , CL_DEVICE_LOCAL_MEM_SIZE, · , ·)
.Pour illustrer, sur nVIDIA Kepler Gpu, la mémoire locale de la taille est de 16 Ko ou 48 Ko (et le complément à 64 kilo-octets est utilisé pour mettre en cache les accès à la Mémoire Globale). Donc, à compter d'aujourd'hui, GPU, de la mémoire locale est très faible par rapport global à la mémoire de l'appareil.
1 - nVIDIA Gpu début avec le Pascal architecture, la pagination est pris en charge; mais ce n'est pas la façon la plus courante de l'utilisation de la mémoire de l'appareil.
OriginalL'auteur einpoklum
Je ne suis pas sûr, mais je sentais que cela doit être vu.
Suffit de passer par les liens ci-dessous. Lire.
Une excellente lecture : OpenCL – Espaces De Mémoire.
Un peu les choses liées :
OriginalL'auteur sgokhales