2015-10-14 36 views
7

Vorrei definire un set di sequenze di ottimizzazione per un programma C in ingresso per studiare l'impatto delle mie sequenze applicate sulle prestazioni del codice.Ordine di flag di ottimizzazione GCC

esempio:

gcc -fauto-inc-dec -fbranch-count-reg -fcombine-stack-adjustments ... test.c -o out.o 

Fa l'ordine di queste opzioni influenzano l'efficacia del codice prodotto?

Inoltre, l'applicazione di un'opzione di ottimizzazione due volte ha un impatto?

Esiste un modo migliore per testare migliaia di sequenze di ottimizzazione? Come in -02 (che comprende circa 20 opzioni), vorrei definire le mie bandiere

risposta

5
  • Ha l'ordine di queste opzioni influenzano l'efficacia del codice prodotto?

    • No, l'ordine di queste opzioni passate come argomenti della riga di comando per il compilatore non influisce sull'efficacia del codice prodotto.
  • C'è un modo migliore per testare migliaia di sequenze di ottimizzazione?

    • Dal momento che non abbiamo una sequenza di ottimizzazione w.r.t i flag di ottimizzazione vengono passati al compilatore, non abbiamo un modo per testare. Ma, come saprai, abbiamo livelli di ottimizzazione che puoi sperimentare.
  • I livelli di ottimizzazione più elevati eseguono più trasformazioni globali sul programma e applicano algoritmi di analisi più costosi per generare codice più veloce e più compatto. Il prezzo in fase di compilazione e il conseguente miglioramento dei tempi di esecuzione dipendono entrambi dalla particolare applicazione e dall'ambiente hardware. Dovresti provare a trovare il miglior livello per la tua applicazione. Si prega di fare riferimento al Optimization Levels for GCC

  • Vorrei definire le mie bandiere

  • Attualmente, gcc supporta molte bandiere che è possibile fare riferimento a Optimize Options. Se si desidera definire un flag, il compilatore deve comprenderlo e potrebbe essere necessario modificare il codice del compilatore per gcc in modo che possa comprendere un nuovo flag. Si prega di fare riferimento al codice su github, opts.c, opts.c si occupa di bandiere e livelli di ottimizzazione.

  • Inoltre, l'applicazione di un'opzione di ottimizzazione due volte ha un impatto?

    • No, l'applicazione stessa opzione di ottimizzazione per due volte non avrà impatto. Ad esempio: l'esecuzione di gcc -fauto-inc-dec -fauto-inc-dec test.c avrebbe lo stesso impatto di Esecuzione gcc -fauto-inc-dec test.c.

(Aggiunta da commenti ottimizzazione ulteriore passa - È possibile scrivere un plugin di ottimizzazione gcc a fare passaggi ulteriori prega di fare riferimento a questo articolo: An introduction to creating GCC plugins L'articolo aiuta a creare plugin per fare ulteriore ottimizzazione.. passare, trasformare il codice o analizzare le informazioni.)

+0

hai detto NO. Tuttavia, nel documento scientifico ho trovato questa affermazione: "Nell'ottimizzare i compilatori, è prassi standard applicare lo stesso insieme di fasi di ottimizzazione in un ordine fisso su ogni metodo di un programma. Tuttavia, diversi ricercatori hanno dimostrato che il migliore ordinamento di ottimizzazioni varia all'interno di un programma, per esempio, è specifica funzione. Quindi, vorremmo una tecnica che seleziona il meglio di ordinazione di ottimizzazioni per singole porzioni del programma, piuttosto di applicare lo stesso insieme fisso di ottimizzazioni per l'intero programma . " https://www.eecis.udel.edu/~cavazos/oopsla-2012.pdf – staticx

+5

@staticx: Sì, è corretto che l'ordine di ottimizzazione passi le cose. Tuttavia, l'ordine in cui vengono forniti gli argomenti della riga di comando non influisce sull'ordinamento del passaggio di ottimizzazione in gcc. – janneb

+0

@janneb Non ho molta familiarità con il problema di ordinazione delle fasi di gcc e di ottimizzazione. Ok, diciamo che ho un dato programma C e un elenco di sequenze di ottimizzazione. Come posso eseguire passaggi che influiscono sulla trasformazione del codice? – staticx