[racket] typed racket slow?

From: Manfred Lotz (manfred.lotz at arcor.de)
Date: Wed May 8 07:04:09 EDT 2013

On Wed, 8 May 2013 06:19:27 -0400
Carl Eastlund <cce at ccs.neu.edu> wrote:

> I'm seeing similar results on my end; I timed by first running "raco
> make" on both files, then timing "racket" on both.  I think what
> we're seeing is a small startup time cost on Typed Racket.  I ran a
> longer benchmark and Typed Racket edges out untyped Racket if I run a
> few million iterations (given this is such a short computation).  The
> expressions I used are:
> 
> ;; utest.rkt
> (void
>   (for/list {[i (in-range (* 10 1000 1000))]}
>     (distance
>       (pt (+ i 1.2) (+ i 2.1))
>       (pt (+ i 4.3) (+ i 5.6)))))
> 
> and
> 
> ;; test.rkt
> (void
>   (for/list: : (Listof Float) {[i (in-range (* 10 1000 1000))]}
>     (distance
>       (pt (+ i 1.2) (+ i 2.1))
>       (pt (+ i 4.3) (+ i 5.6)))))
> 
> 
> I see just under 5 seconds for test.rkt and just over 5 seconds for
> utest.rkt.  So there's a fraction of a second extra startup time for
> Typed Racket, but it takes less time for each subsequent computation,
> so the difference depends on how much "real" work you do after
> startup.  I don't know what causes that startup cost, but hopefully
> this kind of benchmark will be useful to the Typed Racket maintainers
> in closing the gap for future versions.  So, thanks for the example,
> Manfred!
> 

Hi Carl,
This is interesting. If I run it I have around 5 seconds for the typed
version and around 4 seconds for the untyped version. My system is a
64bit Linux.

-- 
Manfred


> Carl Eastlund
> 
> 
> On Wed, May 8, 2013 at 5:32 AM, Manfred Lotz
> <manfred.lotz at arcor.de> wrote:
> 
> > Hi there,
> > I did a small test using typed racket.
> >
> > This is an example from the documentation:
> >
> > #lang typed/racket
> > ;; test.rkt
> >
> > (struct: pt ([x : Float] [y : Float]))
> >
> > (: distance (pt pt -> Float))
> > (define (distance p1 p2)
> >   (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
> >            (sqr (- (pt-y p2) (pt-y p1))))))
> >
> > (distance (pt 1.2 2.1) (pt 4.3 5.6))
> >
> > This is the untyped version:
> > #lang racket
> > ;; utest.rkt
> >
> > (struct pt (x y))
> >
> > (define (distance p1 p2)
> >   (sqrt (+ (sqr (- (pt-x p2) (pt-x p1)))
> >            (sqr (- (pt-y p2) (pt-y p1))))))
> >
> > (distance (pt 1.2 2.1) (pt 4.3 5.6))
> >
> >
> > Now running both:
> > time racket test.rkt
> > 4.675467891024383
> > racket test.rkt  1.24s user 0.08s system 99% cpu 1.333 total
> >
> >
> > time racket utest.rkt
> > 4.675467891024383
> > racket utest.rkt  0.22s user 0.03s system 99% cpu 0.248 total
> >
> >
> > It seems the typed version needs a lot of time for the type
> > checking. The time for time checking could be cut mostly by:
> >
> > raco exe test.rkt
> > time ./test
> > 4.675467891024383
> > ./test  0.49s user 0.03s system 99% cpu 0.531 total
> >
> > But still runtime is more than twice as long. I could get the
> > impression that typed racket is generally slower.
> >
> >
> > Question: Is there any conclusion to be drawn from this (like that
> > typed racket is slower than 'normal' racket)? Or is my test just a
> > bad test?
> >
> >
> > --
> > Manfred
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ____________________
> >   Racket Users list:
> >   http://lists.racket-lang.org/users
> >
> >
> 



Posted on the users mailing list.