emacs-bug-tracker
[Top][All Lists]
Advanced

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

[debbugs-tracker] bug#17147: closed (Performance regression by 3000000%


From: GNU bug Tracking System
Subject: [debbugs-tracker] bug#17147: closed (Performance regression by 3000000% for evaluating "and" form)
Date: Thu, 05 Jun 2014 01:10:03 +0000

Your message dated Wed, 04 Jun 2014 21:09:23 -0400
with message-id <address@hidden>
and subject line Re: bug#17147: [PATCH] Add versions of and/or avoiding O(n^2) 
argument matching
has caused the debbugs.gnu.org bug report #17147,
regarding Performance regression by 3000000% for evaluating "and" form
to be marked as done.

(If you believe you have received this mail in error, please contact
address@hidden)


-- 
17147: http://debbugs.gnu.org/cgi/bugreport.cgi?bug=17147
GNU Bug Tracking System
Contact address@hidden with problems
--- Begin Message --- Subject: Performance regression by 3000000% for evaluating "and" form Date: Mon, 31 Mar 2014 11:58:00 +0200
The following program goes from 2.3ms execution time to 80s execution
time when going from Guile-1.8 to current master.

(use-modules (srfi srfi-19))
(define start-time (current-time))
(primitive-eval (cons 'and (make-list 10000 #f)))
(display (time-difference (current-time) start-time))

With Guile-2.0.9 (Ubuntu package), it crashes with
Backtrace:
In ice-9/psyntax.scm:
2683: 19 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 18 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 17 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 16 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 15 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 14 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 13 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 12 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 11 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 10 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 9 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 8 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 7 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 6 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 5 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 4 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 3 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 2 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 1 [match-each-any (#f #f #f ...) ((#f top) shift) ...]
2683: 0 [match-each-any (#f #f #f ...) ((#f top) shift) ...]

ice-9/psyntax.scm:2683:37: In procedure match-each-any:
ice-9/psyntax.scm:2683:37: Throw to key `vm-error' with args `(vm-run "VM: 
Stack overflow" ())'.

which might give a clue as to where Guile-v2 is spending all its time.

-- 
David Kastrup

--- End Message ---
--- Begin Message --- Subject: Re: bug#17147: [PATCH] Add versions of and/or avoiding O(n^2) argument matching Date: Wed, 04 Jun 2014 21:09:23 -0400 User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux)
David Kastrup <address@hidden> writes:

> Fixes <http://bugs.gnu.org/17147>
>
> * module/ice-9/boot-9.scm (and, or): Add syntax rules that only do one
>   pattern matching operation per and/or rather than per argument.

Thanks, but I ended up simply changing the macros to dotted tail
patterns.  It's commit 1ea8954814d124b995f2296bc6aec92adb566bc1.

I'm closing this bug now.

      Mark


--- End Message ---

reply via email to

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