[gambit-list] Help With Memory

Marc Feeley feeley at iro.umontreal.ca
Fri Sep 26 12:21:36 EDT 2008


On 26-Sep-08, at 11:45 AM, Alex Shinn wrote:

> [I trimmed off the chicken-users list because I'm not
> interested in a pissing match between implementations :)]
>
> Marc Feeley <feeley at iro.umontreal.ca> writes:
>
>> You are comparing Chicken to Chicken using different modes
>> right?
>
> Nope, Chicken to Gambit.
>
>> When Chicken and Gambit are benchmarked in "r6rs-fixflo-unsafe" mode
>> (which combines declarations for standard-bindings, fixnum specific
>> operations and unsafe execution (no type checks)) the results I get
>> are:
>>
>>  ctak: Chicken is 1.03 times faster than Gambit
>>  fibc: Gambit is 1.01 times faster than Chicken
>
> I'm using Chicken 3.4.0 with the -Ob optimization level, and
> Gambit 4.1.0 with
>
>   (declare (standard-bindings)
>            (extended-bindings)
>            (block)
>            (not safe)
>            (fixnum))
>
> on an x86 Mac OS X machine.  Running each benchmark 5 times
> (as separate processes), discarding the high and low and
> averaging the middle 3 times I get:
>
>               ctak         fibc
>    Chicken    0.023        0.011
>    Gambit     0.033        0.024
>
> hence the 1.4x and 2x claims.
>
> --  
> Alex


When I try the same thing on my 2 GHz MacBook Pro (with ctak repeated  
100 times and fibc repeated 1000 times) I get:

            ctak       fibc
Chicken    1.883s     4.551s
Gambit     1.970s     3.118s

So,
   ctak: Chicken is 1.05 times faster than Gambit
   fibc: Gambit is 1.46 times faster than Chicken

I've attached the trace and source code below.  The wild difference in  
performance you get is perhaps due to the old version of Gambit you  
are using.  Can you please try this on your machine with Gambit v4.2.8?

Marc

% gsc -v
v4.2.8
% gsc ctak.scm
% gsi ctak
(time (go 100))
     1970 ms real time
     1961 ms cpu time (1838 user, 123 system)
     1434 collections accounting for 324 ms real time (292 user, 31  
system)
     1221381344 bytes allocated
     no minor faults
     no major faults
7
% gsc fibc.scm
% gsi fibc
(time (go 1000))
     3118 ms real time
     3103 ms cpu time (2945 user, 158 system)
     1806 collections accounting for 411 ms real time (373 user, 38  
system)
     1538392000 bytes allocated
     no minor faults
     no major faults
2584
% csc -V

CHICKEN
(c)2008 The Chicken Team
(c)2000-2007 Felix L. Winkelmann
Version 3.3.0 - macosx-unix-gnu-x86	[ manyargs dload ptables applyhook ]
SVN rev. 11106	compiled 2008-09-22 on neo.local (Darwin)

Enter "chicken -help" for information on how to use it.
% csc -b ctak.scm
% ./ctak
    1.883 seconds elapsed
    0.044 seconds in (major) GC
        0 mutations
       71 minor GCs
       91 major GCs
7
% csc -b fibc.scm
% ./fibc
    4.551 seconds elapsed
    0.093 seconds in (major) GC
        0 mutations
      206 minor GCs
      174 major GCs
2584
% cat ctak.scm
(declare (standard-bindings)
          (extended-bindings)
          (block)
          (not safe)
          (fixnum))

(define (ctak x y z)
   (call-with-current-continuation
    (lambda (k) (ctak-aux k x y z))))

(define (ctak-aux k x y z)
   (if (not (< y x))
       (k z)
       (call-with-current-continuation
        (lambda (k)
          (ctak-aux
           k
           (call-with-current-continuation
            (lambda (k) (ctak-aux k (- x 1) y z)))
           (call-with-current-continuation
            (lambda (k) (ctak-aux k (- y 1) z x)))
           (call-with-current-continuation
            (lambda (k) (ctak-aux k (- z 1) x y))))))))

(define (go n)
   (let loop ((n n) (r '()))
     (if (> n 0)
         (loop (- n 1) (ctak 18 12 6))
         r)))

(pretty-print (time (go 100)))
% cat fibc.scm
(declare (standard-bindings)
          (extended-bindings)
          (block)
          (not safe)
          (fixnum))

(define (_1+ n) (+ n 1))
(define (_1- n) (- n 1))

(define (addc x y k)
   (if (zero? y)
     (k x)
     (addc (_1+ x) (_1- y) k)))

(define (fibc x c)
   (if (zero? x)
     (c 0)
     (if (zero? (_1- x))
       (c 1)
       (addc (call-with-current-continuation (lambda (c) (fibc (_1- x)  
c)))
             (call-with-current-continuation (lambda (c) (fibc (_1-  
(_1- x)) c)))
             c))))

(define (go n)
   (let loop ((n n) (r '()))
     (if (> n 0)
         (loop (- n 1) (fibc 18 (lambda (n) n)))
         r)))

(pretty-print (time (go 1000)))




More information about the Gambit-list mailing list