Acovea

Logiciel capture d'écran:
Acovea
Détails logiciels:
Version: 1.0.1
Date de transfert: 3 Jun 15
Développeur: Scott Robert Ladd
Licence: Gratuit
Popularité: 76

Rating: 3.0/5 (Total Votes: 2)

Acovea implémente un algorithme génétique pour trouver les «meilleures» options pour compiler des programmes avec le CCG C et C ++ compilateurs.
Acovea (Analyse des Options du compilateur via Evolutionary Algorithm) met en œuvre un algorithme génétique pour trouver les «meilleures» options pour compiler des programmes avec la GNU Compiler Collection (GCC) C et les compilateurs C de.
"Best", dans ce contexte, est définie comme étant les options qui produisent le meilleur programme exécutable à partir d'un code source donné. Acovea est un cadre C ++ qui peut être étendue pour tester d'autres langages de programmation et les compilateurs non-CCG.
Je envisage Acovea comme un outil d'optimisation, le même but au profilage. Traditionnel profilage au niveau de la fonction identifie les algorithmes les plus influents dans la performance d'un programme; Acovea est ensuite appliqué à ces algorithmes pour trouver les drapeaux du compilateur et les options qui génèrent le code le plus rapide.
Acovea est également utile pour tester des combinaisons de drapeaux pour les interactions pessimistes, et pour tester la fiabilité du compilateur.
Le logiciel moderne est difficile de comprendre et de vérifier par des moyens traditionnels. Des millions de lignes de code produisent des applications contenant des interactions complexes, défiant la simple description ou d'une enquête par la force brute.
Une visite, approche déterministe de test repose sur testeurs humains d'imaginer toutes les combinaisons possibles d'actions - une proposition irréaliste étant donné la complexité du logiciel. Pourtant, malgré cette complexité, nous avons besoin de réponses à des questions importantes sur, logiciel moderne à grande échelle.
Quel genre de questions importantes? Considérons la GNU Compiler Collection. Je vous écris des articles que de génération de code de référence, une tâche pleine de difficultés en raison de la myriade de possibilités offertes par différents compilateurs. Pour mes repères aient un sens, je dois savoir quelle combinaison d'options produit le code le plus rapide pour une application donnée.
Trouver le «meilleur» ensemble d'options ressemble à une tâche simple, étant donné l'ampleur de la documentation de GCC et de la sagesse conventionnelle de la communauté des développeurs de GCC. Ah, si seulement il était si facile! La documentation de GCC, tandis que vaste, est aussi honnêtement imprécise.
Je vous remercie de ce style de la documentation; contrairement à de nombreux fournisseurs commerciaux, qui font des déclarations absolues de la «qualité» de leurs produits, les documentalistes de GCC admettent incertitudes comment les différentes options modifient la génération de code. En effet, la génération de code est entièrement dépendant du type d'application en cours de compilation et de la plate-forme cible. Une option qui produit du code exécutable rapide pour un code source peut être préjudiciable à la performance d'un autre programme.
"La sagesse conventionnelle" arrive dans ma boîte de réception chaque fois que je publie un nouvel article. Allant de la politesse à l'insistante à l'grossier, ces e-mails contiennent des suggestions contradictoires pour produire du code rapide.
Dans la grande majorité des cas, de telles affirmations anecdotiques manquent aucune preuve formelle de leur validité, et, le plus souvent, «l'amélioration» suggéré est inefficace ou nuisible. Il est devenu de plus en plus évident que personne ne --myself inclus - sait précisément comment toutes ces options CCG travaillent ensemble dans la génération de code de programme.
Je cherche le Saint Graal de l'optimisation - mais exactement ce qui est l'optimisation? Comprendre le problème est la première étape pour trouver une solution.
Optimisation tente de produire le "meilleur" code machine à partir du code source. "Best" signifie différentes choses pour différentes applications; un pelles de base de données des blocs d'information, tandis qu'une application scientifique est concerné avec des résultats rapides et précis; la première préoccupation pour un système embarqué peut être la taille du code.
Et il est fort possible que petit code est rapide, ou un code rapide précise. L'optimisation est loin d'être une science exacte, étant donné la diversité des configurations matérielles et logicielles.
Un algorithme d'optimisation peut être aussi simple que la suppression d'un invariant de boucle, ou aussi complexe que l'examen de tout un programme pour éliminer les sous-expressions communes globales. De nombreuses optimisations changent ce que le programmeur a écrit dans une forme plus efficace, produisant le même résultat tout en modifiant les détails sous-jacents de l'efficacité; autre "optimisations" code de produit qui utilise les caractéristiques spécifiques du matériel sous-jacent, comme des jeux d'instructions spéciales.
les architectures de mémoire, les pipelines, les caches en ligne et hors-puce - affectent tous la performance du code d'une manière qui ne sont pas évidentes pour les programmeurs utilisant un langage de haut niveau. Une optimisation qui peut sembler à produire un code plus rapide peut, en effet, de créer un grand code qui provoque plus de défauts de cache, les performances ainsi dégradants.
Même le meilleur code à l'écoute à la main C contient des zones d'interprétation; il n'y a pas absolue, one-to-one correspondance entre C déclarations et instructions de la machine. Presque toute séquence de code source peut être compilé dans différents - mais fonctionnellement équivalent - instruction machine flux avec différentes tailles et caractéristiques de performance.
Fonctions inline est un exemple classique de ce phénomène: le remplacement d'un appel à une fonction avec le code de la fonction elle-même peut produire un programme plus rapide, mais peut également augmenter la taille du programme. Augmentation de la taille du programme, peut, à son tour, de prévenir un algorithme de montage à l'intérieur de la mémoire cache à haute vitesse, ralentissant ainsi un programme en raison de défauts de cache.
Notez mon utilisation du mot de belette «peut» - inline petites fonctions permet parfois d'autres algorithmes d'optimisation une chance d'améliorer encore le code des conditions locales, la production rapide et plus petit code.
L'optimisation est pas simple ou évidente, et les combinaisons d'algorithmes peut conduire à des résultats inattendus. Ce qui me ramène à la question: Pour une application donnée, ce sont les options les plus efficaces d'optimisation?
Quoi de neuf dans cette version:
· Des changements mineurs dans la licence non-libre.
· Support a été ajoutée pour les dernières versions de libcoyotl et libevocosm.

Logiciel similaire

UPPAAL
UPPAAL

2 Jun 15

dfuzz
dfuzz

12 May 15

D'autres logiciels de développeur Scott Robert Ladd

Acovea/GTK
Acovea/GTK

3 Jun 15

Commentaires à Acovea

Commentaires non trouvées
Ajouter un commentaire
Tourner sur les images!