[Agda] profiling

mechvel at scico.botik.ru mechvel at scico.botik.ru
Wed Feb 3 22:41:45 CET 2021


On 2021-02-04 00:06, Ulf Norell wrote:
> For cost centers you need to manually edit the generated Haskell code
> and recompile it with ghc.
> But those two lines should correspond to *functions* not modules, and
> you should be able to find them in the big tree view to see where they 
> are called from. Mapping
> the name of a generated Haskell function to the Agda name can be a bit 
> fiddly, but it is given
> in the generated Haskell code.


So, first to apply
     > agda -c $agdaLibOpt KTest.agda

Then go to MAlonzo/Code/...<where MM.hs resides that has suspected 
calls>,
and set cost centers to  MM.hs.
Then  `agda -c'  should not be applied because it would overwrite MM.hs.
Instead I probably need to run

   > cd  <where KTest.hs resides>                          (?)
   > ghc --make KTest  <profilig options>
                       <ghc options used by Agda after applying `agda 
-c'>
Right?
And what are        <ghc options used by Agda after applying `agda -c'>
?
where to see them?

Thanks,

--
СМ



> 
> On Wed, Feb 3, 2021 at 5:47 PM <mechvel at scico.botik.ru> wrote:
> 
>> On 2021-02-03 13:37, Ulf Norell wrote:
>>> I suggested installing ieee754 with profiling enabled. I didn't
>> say
>>> anything about setting up a
>>> .cabal file for your project (although, that is certainly a thing
>>> that one can do).
>> 
>> Now, the story is as follows.
>> 
>> I install  Agda-2.6.1.1  (+ MAlonzo, ghc-8.8.3)
>> and run
>>> agda -c $agdaLibOpt --ghc-flag=-prof  KTest.agda
>> 
>> It reports
>> ...
>> MAlonzo/RTE.hs:9:1: error: ...
>> Perhaps you haven't installed the profiling libraries for
>> package ‘ieee754-0.8.0’?
>> 
>> I run
>>> cabal v1-install ieee754 --enable-library-profiling
>> 
>> It reports "Already installed ... To reinstall use --reinstall ...".
>> I run
>>> cabal v1-install ieee754 --enable-library-profiling --reinstall
>> --force-reinstalls
>> 
>> - because only --reinstall occurs not sufficient to reinstall.
>> Then it starts to work!
>> It reinstalls Agda (because it depends on ieee754).
>> Then
>>> agda -c $agdaLibOpt --ghc-flag=-prof  KTest.agda
>> 
>> also re-compiles the Agda standard library, then  KTest  is made.
>> I run
>>> KTest +RTS -p -RTS
>> 
>> This creates KTest.prof.
>> There it is said that all the cost is taken by
>> MAlonzo.Code.KTest  <entire-module>
>> "
>> ...
>> CAF MAlonzo.Code.KTest  <entire-module> ... 0  100.0 100.0 100.0
>> 100.0
>> ...
>> ".
>> This gives nothing to me.
>> I need to find a responsible function in the Foo library
>> (written in Agda) which KTest imports.
>> 
>> Then I add  --ghc-flag=-fprof-auto  to the `agda -c'  command.
>> 
>> Now  KTest.prof  reports of thousands of functions and modules.
>> Its two head lines show
>> 
>> MAlonzo.RTE                MAlonzo/RTE.hs:59:1-13           8.0
>> 0.0
>> MAlonzo/Code/Data/Nat/Properties.hs:(146,1)-(151,39)   6.0
>> 18.2
>> 
>> So that  MAlonzo/RTE.hs          takes  8% of time,
>> Data/Nat/Properties.hs  takes  6% of time,
>> and each of the rest takes not more than 6%.
>> 
>> I cannot detect from this what function in Foo is responsible for
>> that
>> the "optimized" program in Agda runs 50 times slower than the naive
>> one.
>> 
>> But I recall that for my Haskell programs I used the _cost centers_
>> by setting  {-# SCC <name> -#}  to the suspected places in my
>> Haskell
>> program, and this was much more helpful than `-auto-all'.
>> 
>> Setting {-# SCC <name> #-} to the .agda file probably will not be
>> parsed.
>> 
>> In what way cost centers can be used with Agda?
>> 
>> Thanks,
>> 
>> ------
>> Sergei


More information about the Agda mailing list