usare sia ghci -fobject-code -O Test.hs
o cabal repl --ghc-options="-fobject-code -O"
. In dettaglio:
ghci deve essere richiamato con il -fobject-code
flag. deve essere dato
bandiera Optimization (s) dopo-fobject-code
sulla linea di comando, o in un pragma OPTIONS_GHC nella parte superiore del modulo. Provare ghc --interactive -O -fobject-code
produce un avviso che "-O è in conflitto con --interactive; -O ignorato." Questo è forse un bug.
Se stai lavorando su un progetto cabalized e utilizzando cabal repl
, è necessario passare le bandiere sia sulla linea di comando (cioè cabal repl --ghc-options="-fobject-code -O"
) o in un pragma. Cabal (al momento) scarta i flag di ottimizzazione impostati nel file .cabal con ghc-options
quando si richiama ghci; infatti, imposta esplicitamente -O0
. Questo è forse un bug.
Nota in ogni caso a volte è necessario forzare la ricompilazione manualmente quando si passa dalla modalità ottimizzata a quella non ottimizzata. Gli artefatti di build, per qualche motivo, non vengono invalidati quando i flag di ottimizzazione cambiano fino a quando rimane attivo -fobject-code
. Se, partendo da una tabula rasa, hai impostato -fobject-code
nel tuo file .cabal, esegui cabal repl
che compila il modulo, e poi ricorda che è necessario impostare -O sulla riga di comando ed eseguire cabal repl --ghc-options=-O
, ghc caricherà felicemente la compilazione precedente , modulo non ottimizzato. Anche questo è forse un bug.
Lo scenario più affidabile per testare un singolo modulo sembra essere quello di inserire {-# OPTIONS_GHC -fobject-code -O #-}
nella parte superiore del modulo. Otterrai un codice ottimizzato indipendentemente da come invochi ghci. Non ho indagato su cosa succede in situazioni multi-modulo dove alcuni ma non tutti i moduli hanno il pragma.
Per inciso, notare che solo il codice nel modulo è ottimizzato. Anche con l'ottimizzazione attivata, la valutazione di g
nel repl produce sempre False
, poiché l'input repl non è soggetto alle regole di riscrittura.
fonte
2015-01-10 22:07:09
Quindi mi sembra che questo potrebbe essere un modo per svolgere effettivamente le funzioni temporali e misurare approssimativamente le prestazioni tramite GHCi. Tu o qualcuno può approvare o disapprovare? – MasterMastic
@ChristianConkle hai visto questo argomento? http://stackoverflow.com/questions/27541609/difference-in-performance-of-compiled-accelerate-code-ran-from-ghci-and-shell –
@WojciechDanilo - Sì. Ho appena postato un commento lì. (Non credo di poterti notificare in quell'argomento perché non hai ancora commentato.) –