I looked a what takes time during serial part of build.  More
precisly, during database bootstrap step (that is 'boo_db.input').
>From top-level point of view most time goes into compilation
of Spad files (about 90%) and about 10% of time is spent in
'make-databases'.  At lower level time usage of mostly spread
out into many small contibutions.  Biggest single item is
'COMPILE-FILE' (23.3%), next is pretty printer (about 15%) and
EVAl.  Also, significant time goes into parsing and scanning of
Spad sources (2.9% + 8.5%).  Surprisingly expensive is clearing
of category caches (7%).  What could be improved?  We probably
could save part of time spent in 'COMPILE-FILE', say by tweaking
optimization setting or (as Qian did) loading files in interpret
mode.  But trying

)lisp (proclaim '(optimize (speed 0) (safety 1) (compilation-speed 3)))

before database bootstrap made no differece.

I am affraid that bigger gain is possible only as sum of several
small improvements.  For example both Lisp pretty
printing and Spad syntactic processing take much more time than
they should (on my machine pretty printer spends about 880 clocks
per output charater), but speeding them up really means new
faster implementation, so nontrivial work.  Some gains may be
easy, but probably would produce only small effect, so we would
need many such improvements to have visible speedup.


Top positions (slightly abbreviated to make it clear) in profile are:

------------------------------------------------------------------------
  2750  23.3                   |compDefineLisplib| [986]
     1   0.0   2750  23.3   COMPILE-FILE [991]
------------------------------------------------------------------------
     2   0.0                   (LABELS #:BODY-NAME-2161 :IN PPRINT-FILL) [108]
  1405  11.9                   (LABELS SB-IMPL::HANDLE-IT :IN SB-KERNEL:OUTPUT-O
BJECT) [142]
    14   0.1   1852  15.7   SB-PRETTY:OUTPUT-PRETTY-OBJECT [157]
------------------------------------------------------------------------
     1   0.0                   |DomainSubstitutionFunction| [2232]
     1   0.0                   |get_database2| [134]
     1   0.0                   |compSPADSLAM| [1703]
  1104   9.3                   |eval| [96]
    21   0.2                   PRINT-AND-EVAL-DEFUN [1702]
  1176   9.9                   |npboot| [1629]
    19   0.2   2322  19.6   EVAL [124]
     2   0.0                   SB-INT:EVAL-IN-LEXENV [881]
    28   0.2                   SB-KERNEL:MAKE-NULL-LEXENV [61]
  2266  19.2                   SB-EVAL:EVAL-IN-NATIVE-ENVIRONMENT [38]
------------------------------------------------------------------------
  1176   9.9                   SB-EVAL::EVAL-TAGBODY [1665]
     0   0.0   1176   9.9   SB-EVAL::EVAL-RETURN-FROM [1664]
  1098   9.3                   |make_databases| [2968]
    78   0.7                   |processGlobals| [1663]
------------------------------------------------------------------------
   164   1.4                   |merge_info_from_nrlib1| [1769]
   665   5.6                   |compDefineLisplib| [986]
     0   0.0    830   7.0   |clearConstructorCaches| [1885]
     1   0.0                   PNAME [238]
     1   0.0                   |clearConstructorCaches| [1885]
     1   0.0                   SB-IMPL::GETHASH3 [45]
   828   7.0                   |clearCategoryCaches| [115]
------------------------------------------------------------------------
 10484  88.7                   |compilerDoit| [1540]
     0   0.0  10484  88.7   |spadCompile1| [1539]
     2   0.0                   |ncloopIncFileName| [1622]
 10482  88.7                   |handle_input_file| [1538]
------------------------------------------------------------------------
   662   5.6                   |merge_info_from_objects| [1770]
 11727  99.2                   |intloopInclude| [1548]
 10482  88.7                   |spadCompile1| [1539]
     0   0.0  11727  99.2   |handle_input_file| [1538]
     5   0.0                   (FLET #:CLEANUP-FUN-610 :IN |handle_input_file|) 
[2199]
    23   0.2                   |sayKeyedMsg| [893]
   614   5.2                   |merge_info_from_nrlib1| [1769]
    23   0.2                   OPEN [627]
     9   0.1                   SB-SYS:MAKE-FD-STREAM [490]
  1117   9.4                   |intloopInclude0| [1547]
  9937  84.0                   |fakeloopInclude0| [1537]
------------------------------------------------------------------------
 10470  88.5                   |fakeloopInclude0| [1537]
     4   0.0  10470  88.5   |fakeloopProcess| [411]
     1   0.0                   |incAppend| [630]
     2   0.0                   SB-IMPL::LIST-NREVERSE* [87]
    48   0.4                   |InterpExecuteSpadSystemCommand| [1545]
  9402  79.5                   |fakeloopProcess1| [607]
    26   0.2                   |processSymbol| [90]
   985   8.3                   |StreamNull| [139]
------------------------------------------------------------------------
  9402  79.5                   |fakeloopProcess| [411]
     2   0.0   9402  79.5   |fakeloopProcess1| [607]
     1   0.0                   |finish_comment| [617]
  9060  76.6                   |S_process| [1588]
   339   2.9                   |parse_Expr| [261]
------------------------------------------------------------------------

Notes:
- 'StreamNull' above is really Spad scanner (part responsible
  for turning Spad files into stream of tokens).
- 'make_databases' is called from EVAL, so it is counted in total
  time taken by EVAL.  One should subtract this to get time spent
  in other calls to EVAL.
- 'S_process' is Spad compilation proper.  'COMPILE-FILE', and most of
  other lower level calls is made during Spad compilation.

-- 
                              Waldek Hebisch

-- 
You received this message because you are subscribed to the Google Groups 
"FriCAS - computer algebra system" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to fricas-devel+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/fricas-devel/Zk4Su2WpTEVE-7I1%40fricas.org.

Reply via email to