albo stosować ghci -fobject-code -O Test.hs
lub cabal repl --ghc-options="-fobject-code -O"
. Bardziej szczegółowo:
ghci należy wywołać za pomocą -fobject-code
flag.
Optymalizacja flag (y) musi być podana po-fobject-code
na linii polecenia lub w pragmie OPTIONS_GHC w górnej części modułu. Próbowanie ghc --interactive -O -fobject-code
generuje ostrzeżenie, że "-O koliduje z --interaktywnym; -O ignorowane." To prawdopodobnie błąd.
Jeśli pracujesz na cabalized projektu i stosując cabal repl
, trzeba przekazać flagi albo w linii poleceń (tj cabal repl --ghc-options="-fobject-code -O"
) lub w Pragma. Cabal (obecnie) odrzuca flagi optymalizacyjne ustawione w pliku .cabal z ghc-options
podczas wywoływania ghci; w rzeczywistości zamiast tego wyraźnie ustawia -O0
. To prawdopodobnie błąd.
Należy pamiętać, że czasami trzeba ręcznie wymusić ponowną kompilację podczas przełączania między trybem zoptymalizowanym i nieoptymalizowanym. Zbuduj artefakty z jakiegoś powodu nie są unieważniane, gdy flagi optymalizacji zmieniają się tak długo, jak długo pozostaje -fobject-code
. Jeśli, zaczynając od czystej karty, masz -fobject-code
ustawiony w pliku .cabal, uruchom cabal repl
, który kompiluje moduł, a następnie pamiętaj, że musisz ustawić -O w wierszu poleceń i uruchomić cabal repl --ghc-options=-O
, ghc z przyjemnością załaduje wcześniej skompilowane , nieoptymalizowany moduł. Jest to prawdopodobnie również błąd.
Najbardziej wiarygodnym scenariuszem testowania pojedynczego modułu wydaje się być umieszczenie {-# OPTIONS_GHC -fobject-code -O #-}
u góry modułu. Otrzymasz zoptymalizowany kod bez względu na to, w jaki sposób powołujesz się na ghci. Nie badałem, co dzieje się w wielomodułowych sytuacjach, w których niektóre, ale nie wszystkie moduły mają pragmę.
Nawiasem mówiąc, zoptymalizowano tylko kod w module. Nawet przy włączonej optymalizacji ocena g
w replice zawsze będzie generować False
, ponieważ dane wejściowe replik nie podlegają przepisywaniu od nowa.
Wydaje mi się, że może to być sposób na sprawdzenie czasu funkcji i przybliżenie wyników przez GHCi. Czy ty lub ktokolwiek możesz zatwierdzić lub odrzucić? – MasterMastic
@ChristianConkle widziałeś ten temat? http://stackoverflow.com/questions/27541609/difference-in-performance-of-compiled-accelerate-code-ran-from-ghci-and-shell –
@WojciechDanilo - Tak. Właśnie napisałem komentarz. (Nie sądzę, że mogę @ powiadomić Cię w tym temacie, ponieważ nie skomentowałeś jeszcze.) –