guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: list vs vector


From: Olivier Dion
Subject: Re: list vs vector
Date: Wed, 28 Dec 2022 15:23:07 -0500

On Wed, 28 Dec 2022, Sascha Ziemann <ceving@gmail.com> wrote:

Here are the profling informations:
--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,profile (vxml:traverse-pre (sxml->vxml xcb) 
remove-whitespace) #:loop 10000
%     cumulative   self
time   seconds     seconds  procedure
 39.38      1.62      1.62  char-whitespace?
 11.25      0.46      0.46  /home/old/test.scm:150:0:string:whitespace?
  5.63     99.73      0.23  srfi/srfi-1.scm:584:5:map1
  5.63      2.06      0.23  ice-9/boot-9.scm:340:2:string-every
  5.00      0.21      0.21  string-every-c-code
  4.38      0.18      0.18  /home/old/test.scm:84:4:traverse
  3.13      0.28      0.13  /home/old/test.scm:58:0:sxml:call-with-element
  3.13      0.21      0.13  srfi/srfi-1.scm:580:2:map
  3.13      0.13      0.13  /home/old/test.scm:97:0:vxml:element
  3.13      0.13      0.13  /home/old/test.scm:29:0:sxml:element?
  2.50     10.36      0.10  /home/old/test.scm:134:6
  2.50      2.75      0.10  /home/old/test.scm:85:6
  1.88      0.23      0.08  /home/old/test.scm:118:0:vxml:call-with-element
  1.88      0.08      0.08  remove
  1.25      0.05      0.05  /home/old/test.scm:133:4:traverse
  1.25      0.05      0.05  procedure?
  1.25      0.05      0.05  /home/old/test.scm:106:0:vxml:element-name
  1.25      0.05      0.05  /home/old/test.scm:112:0:vxml:element-children
  1.25      0.05      0.05  vector?
  0.63      0.03      0.03  list?
  0.63      0.03      0.03  /home/old/test.scm:34:0:sxml:attributes?
  0.00      3.14      0.00  /home/old/test.scm:134:6
  0.00      2.52      0.00  remove
  0.00      1.62      0.00  string-every-c-code
  0.00      0.98      0.00  <current input>:17:9
  0.00      0.95      0.00  /home/old/test.scm:85:6
---
Sample count: 160
Total time: 4.113558516 seconds (2.070575273 seconds in GC)
scheme@(guile-user)> ,profile (sxml->vxml (sxml:traverse-pre xcb 
remove-whitespace)) #:loop 10000
%     cumulative   self
time   seconds     seconds  procedure
 44.74      1.53      1.53  char-whitespace?
 15.13      0.52      0.52  /home/old/test.scm:150:0:string:whitespace?
  5.92      1.85      0.20  ice-9/boot-9.scm:340:2:string-every
  4.61      0.20      0.16  srfi/srfi-1.scm:580:2:map
  4.61      0.16      0.16  /home/old/test.scm:84:4:traverse
  3.95      0.14      0.14  string-every-c-code
  3.29      0.11      0.11  remove
  3.29      0.11      0.11  /home/old/test.scm:29:0:sxml:element?
  2.63     68.65      0.09  srfi/srfi-1.scm:584:5:map1
  2.63     12.34      0.09  /home/old/test.scm:85:6
  1.97      0.07      0.07  /home/old/test.scm:45:0:sxml:element
  1.97      0.07      0.07  /home/old/test.scm:34:0:sxml:attributes?
  1.32      0.23      0.05  /home/old/test.scm:58:0:sxml:call-with-element
  1.32      0.05      0.05  /home/old/test.scm:154:0:remove-whitespace
  1.32      0.05      0.05  list?
  0.66      0.02      0.02  procedure?
  0.66      0.02      0.02  /home/old/test.scm:97:0:vxml:element
  0.00      3.42      0.00  /home/old/test.scm:85:6
  0.00      3.06      0.00  <current input>:19:9
  0.00      2.41      0.00  remove
  0.00      1.49      0.00  string-every-c-code
---
Sample count: 152
Total time: 3.423245678 seconds (1.440664685 seconds in GC)
--8<---------------cut here---------------end--------------->8---

We see that the difference in total time (~ 0.69 second) is close to the
GC overhead (~ 0.63 second).


If we only focus on traversing instead ($1 = (sxml->vxml xcb)):
--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> ,profile (vxml:traverse-pre $1 remove-whitespace) #:loop 
10000
%     cumulative   self
time   seconds     seconds  procedure
 53.42      1.54      1.54  char-whitespace?
 15.75      0.45      0.45  /home/old/test.scm:150:0:string:whitespace?
  8.90      0.26      0.26  string-every-c-code
  4.79      1.99      0.14  ice-9/boot-9.scm:340:2:string-every
  3.42      0.16      0.10  /home/old/test.scm:118:0:vxml:call-with-element
  2.74     54.01      0.08  srfi/srfi-1.scm:584:5:map1
  2.74      0.08      0.08  /home/old/test.scm:133:4:traverse
  2.05      0.06      0.06  procedure?
  1.37      0.06      0.04  srfi/srfi-1.scm:580:2:map
  0.68      9.25      0.02  /home/old/test.scm:134:6
  0.68      0.02      0.02  list?
  0.68      0.02      0.02  remove
  0.68      0.02      0.02  /home/old/test.scm:97:0:vxml:element
  0.68      0.02      0.02  /home/old/test.scm:106:0:vxml:element-name
  0.68      0.02      0.02  /home/old/test.scm:109:0:vxml:element-attributes
  0.68      0.02      0.02  vector?
  0.00      2.88      0.00  /home/old/test.scm:134:6
  0.00      2.45      0.00  remove
  0.00      1.54      0.00  string-every-c-code
---
Sample count: 146
Total time: 2.880217086 seconds (0.776929721 seconds in GC)
scheme@(guile-user)> ,profile (sxml:traverse-pre xcb remove-whitespace) #:loop 
10000
%     cumulative   self
time   seconds     seconds  procedure
 51.97      1.57      1.57  char-whitespace?
 19.08      0.58      0.58  /home/old/test.scm:150:0:string:whitespace?
  4.61     59.19      0.14  srfi/srfi-1.scm:584:5:map1
  4.61      0.14      0.14  string-every-c-code
  3.95      0.16      0.12  /home/old/test.scm:45:0:sxml:element
  1.97      1.81      0.06  ice-9/boot-9.scm:340:2:string-every
  1.97      0.16      0.06  /home/old/test.scm:58:0:sxml:call-with-element
  1.97      0.06      0.06  /home/old/test.scm:29:0:sxml:element?
  1.97      0.06      0.06  procedure?
  1.32     10.18      0.04  /home/old/test.scm:85:6
  1.32      0.04      0.04  srfi/srfi-1.scm:580:2:map
  1.32      0.04      0.04  /home/old/test.scm:34:0:sxml:attributes?
  1.32      0.04      0.04  %after-gc-thunk
  0.66      0.02      0.02  /home/old/test.scm:154:0:remove-whitespace
  0.66      0.02      0.02  /home/old/test.scm:84:4:traverse
  0.66      0.02      0.02  /home/old/test.scm:82:0:sxml:traverse
  0.66      0.02      0.02  remove
  0.00      3.00      0.00  /home/old/test.scm:85:6
  0.00      2.41      0.00  remove
  0.00      1.55      0.00  string-every-c-code
  0.00      0.04      0.00  anon #x4e9530
---
Sample count: 152
Total time: 3.023158042 seconds (0.897702296 seconds in GC)
--8<---------------cut here---------------end--------------->8---

The vector version seems to be faster here.

Let's look at the allocation since the GC seems to be the culprit here.
--8<---------------cut here---------------start------------->8---
scheme@(guile-user)> (use-modules (statprof))
scheme@(guile-user)> (gcprof (lambda () (vxml:traverse-pre (sxml->vxml xcb) 
remove-whitespace)) #:loop 100000)
%     cumulative   self
time   seconds     seconds  procedure
 28.58     11.31     11.31  /home/old/test.scm:133:4:traverse
 26.21     10.37     10.37  /home/old/test.scm:84:4:traverse
 19.08   1265.05      7.55  srfi/srfi-1.scm:584:5:map1
 13.10      5.18      5.18  /home/old/test.scm:150:0:string:whitespace?
 12.67      5.01      5.01  /home/old/test.scm:97:0:vxml:element
  0.29      0.11      0.11  /home/old/test.scm:82:0:sxml:traverse
  0.07      0.03      0.03  /home/old/test.scm:131:0:vxml:traverse
  0.00     65.27      0.00  /home/old/test.scm:134:6
  0.00     46.85      0.00  /home/old/test.scm:85:6
  0.00     21.33      0.00  /home/old/test.scm:134:6
  0.00     18.20      0.00  <current input>:3:8
  0.00     18.03      0.00  /home/old/test.scm:85:6
  0.00      5.18      0.00  remove
---
Sample count: 1389
Total time: 39.555044322 seconds (16.212054176 seconds in GC)
scheme@(guile-user)> (gcprof (lambda () (sxml->vxml (sxml:traverse-pre xcb 
remove-whitespace))) #:loop 100000)
%     cumulative   self
time   seconds     seconds  procedure
 58.37     19.56     19.56  /home/old/test.scm:84:4:traverse
 21.96      7.36      7.36  /home/old/test.scm:45:0:sxml:element
 10.87    516.55      3.64  srfi/srfi-1.scm:584:5:map1
  8.80      2.95      2.95  /home/old/test.scm:150:0:string:whitespace?
  0.00    103.89      0.00  /home/old/test.scm:85:6
  0.00     33.51      0.00  /home/old/test.scm:85:6
  0.00     33.26      0.00  <current input>:2:8
  0.00      2.95      0.00  remove
---
Sample count: 920
Total time: 33.514138568 seconds (10.50369987 seconds in GC)
--8<---------------cut here---------------end--------------->8---

Clearly we're spending way much time in the GC with the vxml variant.
Why?  I don't know :-(

-- 
Olivier Dion
oldiob.dev



reply via email to

[Prev in Thread] Current Thread [Next in Thread]