2012-01-09 2 views
2

Clang peut traduire CUDA (non complète) ou OpenCL en llvm. Comment peut-il préserver le mot-clé "shared", de sorte qu'il connaisse la différence entre mémoire partagée et mémoire globale?Compilation CUDA ou OpenCL à llvm IR

+0

Salut, J'ai perdu trois jours à essayer de compiler un noyau CUDA dans llvm IR et je ne pouvais pas le faire. J'ai essayé de changer le langoptions.cpp et ajouté CUDA = 1; là, mais encore le clang me donne des messages d'erreur pour la syntaxe cuda (comme _synchthreads() appel). toute aide/note/conseil sur la façon dont vous l'avez fait aidera beaucoup. merci d'avance. –

Répondre

0

Je ne suis pas familier avec CUDA ou OpenCL, mais je peux vous conseiller de regarder l'IR LLVM résultant qui est généré par frontend et voir quel code est généré. Vous pouvez également regarder le backend LLVM correspondant pour voir comment il utilise la mémoire partagée/globale.

+0

A partir de llvm IR généré, je ne vois aucune différence d'utilisation de __global et __local. – dalibocai

+0

Il semble que la décision soit prise en backend. Peut-être que vous pouvez trouver plus d'informations à http://llvm.org/devmtg/2011-11/. Il y a quelques présentations sur le backend LCLVM OpenCL. –

+0

Il serait étrange que le programmeur ait besoin de gérer explicitement la mémoire locale, mais il est en fait géré par le backend. En tout cas, merci pour la référence. – dalibocai