Aujourd'hui j'ai ajouté quatre autres Je n'ai pas encore essayé d'ajouter l'une des deux variables plus petites. Si j'ajoute qu'un seul d'entre eux, cela fonctionne, mais si je les ajoute tous deux, il tombe en panne. P>
Ce comportement peut-il vouloir dire que je pourrais vouloir dire que j'ai alloué à beaucoup __ local code> variables sur mon noyau pour décharger des résultats intermédiaires. Mais il suffit d'ajouter les quatre autres variables à la signature du noyau et que l'ajout des arguments du noyau correspondant rend toutes les sorties du noyau à "0" S. Aucune des fonctions CL ne renvoie un code d'erreur. p>
__ local code> la mémoire? Comment puis-je savoir combien __ local code> est utilisable par moi? P>
3 Réponses :
Je ne suis pas sûr, mais je sentais que cela doit être vu. p>
Juste passer par les liens suivants. Lisez-le. P>
Une excellente lecture: opencl - espaces mémoire . p>
Un peu connexe: P>
La quantité de mémoire locale que propose un périphérique sur chacune de ses unités de calcul peut être interrogée à l'aide du drapeau cl_device_local_mem_size_local_mem_size_local_mem_size_local_mem_size_local_mem_size_local_mem_size CODE> CLGETDEviceInfo code> Fonction: cl_ulong size;
clGetDeviceInfo(deviceID, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(cl_ulong), &size, 0);
@Einpoklum Stackoverflow.com/questions / 31197564 / ...
@Cirosantilli 烏坎 事件 2016 六四 事件 事件: Mise à jour de cette réponse en conséquence, merci. S'il vous plaît envisager de supprimer le commentaire maintenant.
Ceci est signalé comme "taille de la mémoire locale" par clinfo code>.
Bien sûr, il y a, puisque la mémoire locale est Nous sommes utilisés, de travailler avec un espace d'adressage virtuel sur les processeurs, à la théorie autant que nous voulons - éventuellement échouer à de très grandes tailles en raison d'une partition de fichier de pagination / échange de la partition d'échange, ou peut-être même pas que Nous essayons effectivement d'utiliser trop de mémoire de sorte qu'il ne puisse pas être mappé sur la bélier physique et le disque. P>
Ce n'est pas le cas pour des choses comme le noyau d'un ordinateur d'un ordinateur (ou des parties de niveau inférieur de celui-ci) qui doivent accéder à des zones spécifiques dans la RAM réelle. P>
Ce n'est pas non plus le cas pour la mémoire globale et locale GPU. Il n'y a pas de pagination de mémoire * sup> (remappage des adresses de fil perçues aux adresses de mémoire physique); et aucun échange. Spécifiquement en ce qui concerne la mémoire locale, chaque unité de calcul (= chaque multiropesseur symétrique sur un GPU) a un tas de RAM utilisée comme mémoire locale; Les dalles vertes ici: p>
La taille de chaque telle dalle est ce que vous obtenez avec p>
Illustrer, sur NVIDIA Kepler GPU, la taille de la mémoire locale est 16 kbytes ou 48 kbytes (et le complément à 64 kbytes est utilisé pour la mise en cache d'accès à la mémoire mondiale). Donc, à compter d'aujourd'hui, La mémoire locale GPU est très faible par rapport à la mémoire de l'appareil globale forte>. P>
1 sup> - sur NVIDIA GPU commençant par l'architecture Pascal, la pagination est prise en charge; Mais ce n'est pas le moyen courant d'utiliser la mémoire de l'appareil. P>
p>
clgerdeviceinfo (·, cl_device_local_mem_size, ·, ·) code>. P>