Je recherche un compilateur JIT ou une petite bibliothèque de compilation pouvant être intégrée à mon programme. Je tire à l'utiliser pour compiler un code généré de manière dynamique qui effectue des arithmétiques numériques complexes. Le code généré est très simple dans la structure: pas de boucles, pas de conditionnels, mais ils peuvent être assez longs (quelques MB lorsqu'ils sont compilés par GCC). Les performances du code de machine résultant sont importantes, alors que je ne me soucie pas vraiment de la vitesse de compilation elle-même. Quel compilateur JIT est le meilleur pour mon objectif? Merci! P>
Exigences détaillées p>
3 Réponses :
On dirait que vous souhaitez pouvoir compiler à la volée, puis chargez de manière dynamique la bibliothèque compilée (.dll ou .so). Cela vous donnerait la meilleure performance, avec une interface ANSI-C ou C ++. Alors, oubliez le jiting et envisager de frayer un compilateur C / C ++ pour faire la compilation. P>
Cela suppose bien sûr qu'un compilateur peut être installé au point où le code généré de manière dynamique est réellement généré. P>
C'est bien ce que je fais maintenant. Le compilateur GCC ou Intel C est utilisé pour compiler le code et le fichier .SO résultant est chargé de manière dynamique. Le problème, cependant, est que je trouve difficile à emballer un compilateur à part entière dans mon programme. Des problèmes de licence de côté, juste la partie technique peut être trop de travail.
CINT est un C ++ ( ISH ) Environnement qui offre la possibilité de mélanger le code compilé et le code interprété. Il existe un ensemble de Outils d'optimisation pour l'interprète . root prolonge cela encore plus loin en soutenant la compilation et le lien à l'heure d'exécution au moment de l'exécution (voir le dernier Section de http://root.cern.ch/drupal/content/cint-promptight a>), bien qu'il semble utiliser le compilateur système et peut donc ne pas aider. Tout le code est open source. P>
Je fais une utilisation régulière de toutes ces caractéristiques dans le cadre de mon travail. P>
Je ne sais pas si cela utilise activement les instructions de SIMD, mais il semble de répondre à toutes vos autres exigences. P>
Comme je vois que vous utilisez actuellement la compilée de la bibliothèque dynamique au lien sur la Fly Methond, vous pourriez envisager TCC < / a>, bien que je ne croyais pas que cela optimise beaucoup et soupçonne qu'il ne prend pas en charge la SIMD. p>
Je ne savais pas que la CINT compilait le code dans le code d'octet à la volée. Bon à savoir. Mais j'ai essayé quelques exemples et la performance est décevante. Le code qu'il génère est généralement plusieurs fois plus lent que ceux de GCC, parfois des ordres de grossitude plus lentement.
J'ai toujours déménagé au code compilé du système dès que raisonnable et que je n'ai jamais annoncé l'environnement de reply. Cependant, j'ai trouvé une page qui décrit les niveaux d'optimisation disponibles dans le compilateur byTecode . Je ne sais pas si vous avez vu ça. Et mon enquête a montré que l'une des caractéristiques que je pensais appartient réellement à la racine, modifiera.