Acovea

Software screenshot:
Acovea
Software informatie:
Versie: 1.0.1
Upload datum: 3 Jun 15
Ontwikkelaar: Scott Robert Ladd
Licentie: Gratis
Populariteit: 76

Rating: 3.0/5 (Total Votes: 2)

Acovea implementeert een genetisch algoritme voor het vinden van de "best" opties voor het opstellen van programma's met de GCC C en C ++ compilers.
ACOVEA (Analyse van de Compiler Opties via Evolutionary Algorithm) implementeert een genetisch algoritme om de "beste" opties voor het opstellen van programma's met de GNU Compiler Collection (GCC), C en C ++ compilers vinden.
"Best", in deze context gedefinieerd als de opties die het snelste uitvoerbare programma vanaf een bepaalde bron code produceren. Acovea een C ++ raamwerk dat kan worden uitgebreid tot andere programmeertalen en non-GCC compilers testen.
Ik zie Acovea als een optimalisatie tool, vergelijkbaar doel profilering. Traditionele functie-niveau profilering identificeert de algoritmen meest invloedrijke in de prestaties van een programma; Acovea wordt dan toegevoerd aan de algoritmen voor de compiler vlaggen en opties die het snelste te genereren.
Acovea is ook nuttig voor het testen van combinaties van vlaggen voor pessimistische interacties en voor het testen van de betrouwbaarheid van de compiler.
Moderne software is moeilijk te begrijpen en te controleren door de traditionele middelen. Miljoenen regels code te produceren toepassingen die ingewikkelde interacties, tarten eenvoudige beschrijving of brute-force onderzoek.
Een begeleide, deterministische benadering van testen is gebaseerd op de menselijke testers om elke mogelijke combinatie van acties voor ogen - een onrealistische propositie gegeven software complexiteit. Toch, ondanks dat de complexiteit, moeten we antwoorden op belangrijke vragen over de moderne, grootschalige software.
Wat voor soort belangrijke vragen? Denk aan de GNU Compiler Collection. Ik schrijf artikelen die benchmark-code generatie, een taak beladen met moeilijkheden als gevolg van de talloze opties die door verschillende compilers. Voor mijn benchmarks enige betekenis hebben, moet ik weten welke combinatie van opties de snelste code produceert voor een bepaalde toepassing.
Het vinden van de "beste" set opties klinkt als een eenvoudige taak, gezien de omvang van de GCC documentatie en de conventionele wijsheid van de GCC gemeenschap van ontwikkelaars. Ach, als het maar zo makkelijk! De GCC documentatie, terwijl uitgebreid, is ook eerlijk gezegd onnauwkeurig.
Ik waardeer deze stijl van documentatie; In tegenstelling tot vele commerciële leveranciers, die maken absolute uitspraken over de "kwaliteit" van hun producten, GCC documenteerders toegeven onzekerheden in hoe de verschillende opties te veranderen code generatie. Inderdaad, codegeneratie volledig afhankelijk van het soort toepassing wordt gecompileerd en doelplatform. Een optie die snel uitvoerbare code produceert één source code kan nadelig zijn voor de werking van een ander programma.
"Conventionele wijsheid" komt in mijn inbox wanneer ik een nieuwe artikel. Variërend van het beleefd om de aanhoudende naar de onbeleefd, deze e-mails bevatten tegenstrijdige suggesties voor het produceren van een snelle code.
In de overgrote meerderheid van de gevallen, zoals anekdotische beweringen hebben geen enkel formeel bewijs van hun geldigheid en, vaker wel dan niet, de voorgestelde "verbetering" is ineffectief of schadelijk zijn. Weet precies hoe al deze GCC opties werken samen in het genereren van programmacode - Het is steeds duidelijker dat niemand --myself opgenomen worden.
Ik zoek de Heilige Graal van Optimization - maar wat is optimalisatie? Het probleem begrijpen is de eerste stap tot een oplossing.
Optimalisatie probeert de "beste" machine code vanuit de broncode te produceren. "Best" betekent verschillende dingen voor verschillende toepassingen; een database schoppen brokken van informatie, terwijl een wetenschappelijke toepassing heeft betrekking op een snelle en accurate resultaten; de eerste zorg voor een embedded systeem kan code grootte.
En het is goed mogelijk dat kleine code snel of fast code accuraat. Optimalisatie is verre van een exacte wetenschap, gezien de diversiteit van de hardware en software configuraties.
Een optimalisatie algoritme kan zo simpel zijn als het verwijderen van een lusinvariant, of complex onderzoek van een volledig programma op wereldwijde gemeenschappelijke sub-uitdrukkingen heffen. Veel optimalisaties veranderen wat de programmeur schreef in een meer efficiënte vorm, het produceren van hetzelfde resultaat, terwijl het veranderen van de onderliggende gegevens voor efficiëntie; andere "optimalisatie" produceren code die specifieke kenmerken van de onderliggende hardware, zoals speciale instructiesets gebruikt.
Memory architecturen, pijpleidingen, on- en off-chip caches - allemaal van invloed code prestaties op manieren die niet voor de hand om programmeurs met behulp van een high-level taal zijn. Een optimalisatie die lijkt misschien sneller code te produceren kan, in feite, maken grote code die meer cache misses veroorzaakt, waardoor vernederende prestaties.
Zelfs de beste hand-tuned C-code bevat gebieden van interpretatie; Er is geen absolute, één-op-één relatie tussen C staten en machine-instructies. Bijna elke volgorde van de source code kan worden gecompileerd in verschillende - maar functioneel gelijkwaardige - machine instructie beken met verschillende maten en prestatie-eigenschappen.
Inline functies is een klassiek voorbeeld van dit fenomeen: een oproep te vervangen om een ​​functie met de functie code zelf kan een snellere programma te produceren, maar kan ook toenemen grootte programma. Toegenomen programmagrootte, kunnen op hun beurt, verhinderen dat een algoritme vorm passend in high-speed cachegeheugen, waardoor een programma vertragen vanwege cache misses.
Let op mijn gebruik van de wezel woord "kan" - inline kleine functies laat soms ook andere optimalisatie algoritmes een kans om verder te verbeteren code voor de lokale omstandigheden, de productie van snellere en kleinere code.
Optimalisatie is niet eenvoudig of voor de hand liggende, en combinaties van algoritmes kan leiden tot onverwachte resultaten. Dat brengt me terug naar de vraag: voor een bepaalde toepassing, wat zijn de meest effectieve optimalisatie opties?
Wat is er nieuw in deze release:
· Kleine veranderingen in de niet-vrije licentie.
· Er is ondersteuning toegevoegd voor de nieuwste versies van libcoyotl en libevocosm.

Vergelijkbare software

testosterone
testosterone

14 Apr 15

dingus
dingus

14 Apr 15

pycdep
pycdep

11 May 15

lava-serial
lava-serial

15 Apr 15

Andere software van ontwikkelaar Scott Robert Ladd

Acovea/GTK
Acovea/GTK

3 Jun 15

Reacties op Acovea

Reacties niet gevonden
Commentaar toe te voegen
Zet op de beelden!