什么是“MAIN”? (ghc剖析)

时间:2015-07-09 23:36:54

标签: haskell ghc

我使用stack build(我编写了自己的stack.yaml)使用ghc 7.10.1构建了一个旧的大项目Pugs。然后我运行stack build --library-profiling --executable-profiling.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并输出以下pugs.prof文件。


        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花费了92.2%的时间,但是,我不知道MAIN的含义。 MAIN标签的含义是什么?

1 个答案:

答案 0 :(得分:1)

几天前我在同一个地方。我推断的是同样的事情,MAIN是没有anotations的表达式。如果添加“-fprof-auto”和“-caf-all”,它会显着缩小。这些选项还可以让您在代码中发现许多有趣的事情。