Coder un nouveau compilateur C++

Coder un nouveau compilateur C++ - C++ - Programmation

Marsh Posté le 12-01-2010 à 15:29:13    

Salut à tous  :hello: ,  
 
Je vais commencer sec :
Je suis actuellement sur un projet: j'essaies de refaire un compilateur du début à la fin.
 
Je sais que il existe beaucoup de documentation pour cela, mais je vous demande vos idées, vois pistes pour débuter.
Je veux faire un compilateur qui parallèliserais automatiquement le code (sur CUDA notamment).
Le compilateur devra alors trouver les possibilités de parallèlisme du langage C++ pour les exploiter (boucles for indépendantes,calculs parallelisables ...).
 
Et pour un maximum d'adaptabilité, je voudrais qu'on puisses préciser l'architecture de l'ordinateur sur lequel le futur programme est censé s'éxécuter (nombre de coeurs, instructions supportées, traduction de ces instructions, nombre/taille des registres) dans un document.
Pour optimiser le parallèlisme d'instructions. :sleep:  :sleep: ... On se réveille !
 
Ce compilateur n'est pas pensé pour une architecture x86 banale.
 
A l'heure actuelle, je sais que un compilateur marche de la manière suivante : précompilateur, puis, génération de code intermédiaire, suivi par une optimisation sur ce premier code, et enfin, élaboration du code assembleur.
 
Pour commencer, Existe t'il un programme qui ne ferais que de précompiler ?
Et rendrais un texte contenant uniquement le code source ?
 
Je pensais a l'algorithmie suivante pour la partie optimisation:  
 
   - Identifier/Isoler les parties du codes qui peuvent s'executer Out of Order
   - Regrouper les instructions qui pour raison évidente doivent être regroupées
   - Effectuer des simulation (calcul de cycles nécessaires) pour le reste
 
Le compilo  :ange:  prendrais en entrée:  
 
   - Le code source a compiler
   - un fichier contenant les données d'architectures du processeur
   - un fichier contenant le jeu d'instructions du processeur, ses equivalents en x86 plus ou moins, et le temps éexecution
 
Qu'en pensez vous ?
 
Je sais que il existe déjà HMPP http://www.caps-entreprise.com/fr/ [...] =49&p_p=36 pour la partie de parallèliser le code, mais je ne sais pas si il existe un compilo qui optimises selon l'architecture.
 
Merci pour votre aide  :jap:

Reply

Marsh Posté le 12-01-2010 à 15:29:13   

Reply

Marsh Posté le 12-01-2010 à 15:49:19    

tous les compilos optimisent suivant l'architecture, c'est aussi leur boulot. Ensuite, préciser à la compilation le nombre de cores, ca me semble pas être une bonne idée du tout : tu compiles pour un dual core et ca fait que tous ceux qui ont des quad ne peuvent pas en tirer parti ?
Et l'efficacité de la parallélisation automatique me semble relever de la pure croyance. mieux vaut penser ses algos et les paralléliser soi-même


---------------
last.fm
Reply

Marsh Posté le 12-01-2010 à 15:58:21    

theshockwave a écrit :

tous les compilos optimisent suivant l'architecture, c'est aussi leur boulot. Ensuite, préciser à la compilation le nombre de cores, ca me semble pas être une bonne idée du tout : tu compiles pour un dual core et ca fait que tous ceux qui ont des quad ne peuvent pas en tirer parti ?
Et l'efficacité de la parallélisation automatique me semble relever de la pure croyance. mieux vaut penser ses algos et les paralléliser soi-même


 
Le principe est que j'aimerais porter du code sur autre choses que des core2duo ou core quad, je voudrais que mon compilateur compile aussi bien sur des architectures cell par exemple, ou x86, ou encore powerpc, ...
Et puis, je voudrais obtenir systématiquement le maximum de performances pour l'architecture cible. Ici, ce dont tu parles est de faire un compromis portabilité/performance. Je m'intéresse là à du code haute performance.
 
Je suis d'accord que la parallélisation passez surtout par le codeur, mais est ce si invraisemblable de détecter des codes qui soient parallèlisables dans un programme automatiquement ?
 
Sinon, si les compilos optimisent suivant l'architecture, comment en définir une nouvelle à GCC ou mingW par exemple ?
 
Tu ne connaitrais pas un précompilateur que l'on pourrais utiliser indépendamment de son compilateur ?
Et un parser/interpreter de code C++ ?


Message édité par glandingstyle le 12-01-2010 à 16:03:11
Reply

Marsh Posté le 12-01-2010 à 16:10:09    

je n'ai pas tout ce qu'il faut sous le coude pour te répondre, mais m'est avis que tu trouveras pas mal de choses à lire, par exemple, par ici : http://gcc.gnu.org/wiki/GettingStarted (notamment avec une explication détaillée sur comment écrire ton propre back end pour GCC)


---------------
last.fm
Reply

Marsh Posté le 12-01-2010 à 16:54:03    

theshockwave a écrit :

je n'ai pas tout ce qu'il faut sous le coude pour te répondre, mais m'est avis que tu trouveras pas mal de choses à lire, par exemple, par ici : http://gcc.gnu.org/wiki/GettingStarted (notamment avec une explication détaillée sur comment écrire ton propre back end pour GCC)


 
 
Merci bcp.
Je n'arrives pas à trouver un document compréhensible sur GIMPLE le language intermédiaire de GCC une idée ?

Reply

Marsh Posté le 12-01-2010 à 17:36:12    

tu sais qu'y a genre 50 equipes de chercheurs à plein la dessus ... et que bon, le pb de la compilation parallele est NP-hard :€
Je te conseillerais plutot de sauter dnas le wagon CLang//LLVM que de reinventer la roue

 

Quant à CUDA, passes au moins à oepnCL si tu veux avoir l'air crédible


Message édité par Joel F le 12-01-2010 à 17:44:20
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed