ammoh
ammoh

Reputation: 183

What is `MAIN` ? (ghc profiling)

I build an old big project, Pugs, with ghc 7.10.1 using stack build (I wrote my own stack.yaml). Then I run stack build --library-profiling --executable-profiling and .stack-work/install/x86_64-osx/nightly-2015-06-26/7.10.1/bin/pugs -e 'my $i=0; for (1..100_000) { $i++ }; say $i' +RTS -pa and output the following pugs.prof file.


        Fri Jul 10 00:10 2015 Time and Allocation Profiling Report  (Final)

           pugs +RTS -P -RTS -e my $i=0; for (1..10_000) { $i++ }; say $i

        total time  =        0.60 secs   (604 ticks @ 1000 us, 1 processor)
        total alloc = 426,495,472 bytes  (excludes profiling overheads)

COST CENTRE MODULE   %time %alloc  ticks     bytes

MAIN        MAIN      92.2   90.6    557 386532168
CAF         Pugs.Run   2.8    5.2     17  22191000


                                                                                  individual     inherited
COST CENTRE                 MODULE                              no.     entries  %time %alloc   %time %alloc  ticks     bytes

MAIN                        MAIN                                287           0   92.2   90.6   100.0  100.0    557 386532168
 listAssocOp                Pugs.Parser.Operator                841          24    0.0    0.0     0.0    0.0      0       768
 nassocOp                   Pugs.Parser.Operator                840          24    0.0    0.0     0.0    0.0      0       768
 lassocOp                   Pugs.Parser.Operator                839          24    0.0    0.0     0.0    0.0      0       768
 rassocOp                   Pugs.Parser.Operator                838          24    0.0    0.0     0.0    0.0      0       768
 postfixOp                  Pugs.Parser.Operator                837          24    0.0    0.0     0.0    0.0      0       768
 termOp                     Pugs.Parser.Operator                824          24    0.0    0.5     0.7    1.2      0   2062768
  insert                    Data.HashTable.ST.Basic             874           1    0.0    0.0     0.0    0.0      0       152
   checkOverflow            Data.HashTable.ST.Basic             890           1    0.0    0.0     0.0    0.0      0        80
    readDelLoad             Data.HashTable.ST.Basic             893           0    0.0    0.0     0.0    0.0      0       184
    writeLoad               Data.HashTable.ST.Basic             892           0    0.0    0.0     0.0    0.0      0       224
    readLoad                Data.HashTable.ST.Basic             891           0    0.0    0.0     0.0    0.0      0       184
   _values                  Data.HashTable.ST.Basic             889           1    0.0    0.0     0.0    0.0      0         0
   _keys                    Data.HashTable.ST.Basic             888           1    0.0    0.0     0.0    0.0      0         0
.. snip ..

MAIN costs 92.2% of time, however, I don't know what MAIN means. What does MAIN label mean?

Upvotes: 2

Views: 122

Answers (1)

dsign
dsign

Reputation: 12700

I was in the same spot a few days ago. What I deduced is the same thing, MAIN is expressions without anotations. It's counts shrink significantly if you add "-fprof-auto" and "-caf-all". Those options will also let you find a lot of interesting things happening in your code.

Upvotes: 1

Related Questions