Acovea

Software screenshot:
Acovea
Dettagli del software:
Versione: 1.0.1
Data di caricamento: 3 Jun 15
Sviluppatore: Scott Robert Ladd
Licenza: Libero
Popolarità: 76

Rating: 3.0/5 (Total Votes: 2)

acovea implementa un algoritmo genetico per trovare i "migliori" le opzioni per la compilazione di programmi con il CCG C e compilatori C ++.
Acovea (Analisi delle opzioni del compilatore tramite Evolutionary Algorithm) implementa un algoritmo genetico per trovare i "migliori" le opzioni per la compilazione di programmi con la C GNU Compiler Collection (GCC) e compilatori C ++.
"Migliore", in questo contesto, si intendono le opzioni che producono il più veloce programma eseguibile da un dato codice sorgente. Acovea è un framework C ++ che può essere esteso a testare altri linguaggi di programmazione e compilatori non GCC.
Mi immagino acovea come uno strumento di ottimizzazione, uno scopo simile a profiling. Tradizionale-livello di funzione profiling identifica gli algoritmi più influenti in termini di prestazioni di un programma; Acovea viene poi applicato a questi algoritmi per trovare le flag di compilazione e le opzioni che generano il codice più veloce.
Acovea è anche utile per testare combinazioni di flag per interazioni pessimistiche, e per testare l'affidabilità del compilatore.
Il software moderno è difficile da capire e verificare con i mezzi tradizionali. Milioni di linee di codice producono applicazioni contenenti interazioni complesse, sfidando descrizione semplice o forza bruta indagini.
Un guidata, approccio deterministico test si basa sui tester umani per immaginare ogni possibile combinazione di azioni - una proposta irrealistica data la complessità del software. Eppure, nonostante questa complessità, abbiamo bisogno di risposte a domande importanti circa, software moderno di grandi dimensioni.
Che tipo di domande importanti? Si consideri la GNU Compiler Collection. Scrivo articoli che di generazione di codice di riferimento, un compito irto di difficoltà a causa delle innumerevoli possibilità offerte dai diversi compilatori. Per i miei parametri di riferimento per avere un senso, ho bisogno di sapere quale combinazione di opzioni produce il codice più veloce per una data applicazione.
Trovare il set "migliore" delle opzioni suona come un compito semplice, data l'ampiezza della documentazione GCC e la saggezza convenzionale della comunità di sviluppatori di GCC. Ah, se solo fosse così semplice! La documentazione di GCC, mentre estesa, è anche onestamente imprecisa.
Apprezzo questo stile di documentazione; a differenza di molti fornitori commerciali, che fanno affermazioni assolute circa la "qualità" dei loro prodotti, scrittori di documentazione di GCC ammettono incertezze nel modo in cui le varie opzioni alterano la generazione del codice. Infatti, la generazione del codice è interamente dipendente dal tipo di applicazione in fase di compilazione e la piattaforma di destinazione. Un'opzione che produce codice eseguibile veloce per un codice sorgente può essere dannoso per le prestazioni di un altro programma.
"La saggezza convenzionale" arriva nella mia casella di posta ogni volta che pubblicare un nuovo articolo. Che vanno dalla educato alla insistente al maleducato, queste e-mail contengono suggerimenti contraddittori per la produzione di codice veloce.
Nella stragrande maggioranza dei casi, tali affermazioni aneddotici mancano di qualsiasi prova formale della loro validità, e, il più delle volte, il "miglioramento" suggerito è inefficace o dannoso. È diventato sempre più evidente che nessuno --myself inclusa - sa esattamente come tutte queste opzioni GCC lavorano insieme per generare codice di programma.
Cerco il Santo Graal della Optimization - ma esattamente che cosa è l'ottimizzazione? La comprensione del problema è il primo passo nella ricerca di una soluzione.
Ottimizzazione tenta di produrre il "migliore" codice macchina dal codice sorgente. "Migliore" significa cose diverse per diverse applicazioni; un database di pale blocchi di informazioni, mentre un'applicazione scientifica è interessato con risultati rapidi e precisi; la prima preoccupazione per un sistema embedded può essere la dimensione del codice.
Ed è molto probabile che piccolo codice è veloce, o il codice veloce e accurato. L'ottimizzazione è ben lungi dall'essere una scienza esatta, data la diversità delle configurazioni hardware e software.
Un algoritmo di ottimizzazione può essere semplice come la rimozione di un invariante di ciclo, o complesso come l'esame di un intero programma di eliminare sub-espressioni comuni globali. Molte ottimizzazioni cambiare ciò il programmatore ha scritto in una forma più efficiente, producendo lo stesso risultato alterando dettagli sottostanti di efficienza; altre "ottimizzazioni" Codice prodotti che utilizza specifiche caratteristiche del hardware sottostante, come il set di istruzioni speciali.
Architetture di memoria, condutture, cache on e off-chip - tutto influenzano le prestazioni del codice in modi che non sono evidenti a programmatori che utilizzano un linguaggio di alto livello. Un'ottimizzazione che può sembrare a produrre codice più veloce può, infatti, creare grande codice che causa più cache miss, le prestazioni in tal modo degradante.
Anche il miglior codice a mano a punto C contiene aree di interpretazione; non vi è assoluta, uno-a-uno corrispondenza tra istruzioni C e istruzioni macchina. Quasi ogni sequenza di codice sorgente può essere compilato in diversi - ma funzionalmente equivalente - istruzione macchina flussi con diverse dimensioni e caratteristiche prestazionali.
Funzioni Inlining è un classico esempio di questo fenomeno: sostituendo una chiamata a una funzione con il codice funzione stessa può produrre un programma più veloce, ma può anche aumentare la dimensione del programma. Aumento della dimensione del programma, può, a sua volta, impedisce un algoritmo di raccordo all'interno memoria cache ad alta velocità, rallentando così un programma a causa di cache miss.
Notate il mio uso della parola donnola "può" - inlining piccole funzioni a volte permette di altri algoritmi di ottimizzazione la possibilità di migliorare ulteriormente il codice per le condizioni locali, la produzione più veloce e codice più piccolo.
L'ottimizzazione non è semplice o ovvia, e combinazioni di algoritmi in grado di portare a risultati inaspettati. Il che mi riporta alla domanda: per ogni applicazione, quali sono le opzioni di ottimizzazione più efficaci?
Cosa c'è di nuovo in questo rilascio:
· Piccole modifiche della licenza non libera.
· Il supporto è stato aggiunto per le ultime versioni di libcoyotl e libevocosm.

Programmi simili

rgf
rgf

14 Apr 15

cov-core
cov-core

20 Feb 15

zope_fixtures
zope_fixtures

20 Feb 15

testosterone
testosterone

14 Apr 15

Altri software di sviluppo Scott Robert Ladd

Acovea/GTK
Acovea/GTK

3 Jun 15

Commenti a Acovea

I commenti non trovato
Aggiungi commento
Accendere le immagini!