On 11/14/2013 03:22 PM, stamo...@racket-lang.org wrote:
stamourv has updated `master' from 44f810aa72 to a87dcc252e.
   http://git.racket-lang.org/plt/44f810aa72..a87dcc252e

=====[ 4 Commits ]======================================================
Directory summary:
   20.3% pkgs/contract-profile/
   39.5% pkgs/typed-racket-pkgs/typed-racket-lib/typed-racket/optimizer/
   20.9% 
pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/
   17.2% 
pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/

~~~~~~~~~~

0dccecc Vincent St-Amour <stamo...@racket-lang.org> 2013-11-12 17:40
:
| Clarify impedance mismatch between profiler and blame info.
:
   M pkgs/contract-profile/boundary-view.rkt | 15 ++++++++-------

~~~~~~~~~~

04eeeb1 Vincent St-Amour <stamo...@racket-lang.org> 2013-11-13 18:24
:
| Log hidden prng parameter dereferences.
:
   M .../typed-racket-lib/typed-racket/optimizer/hidden-costs.rkt | 8 ++++++++

~~~~~~~~~~

7616e26 Vincent St-Amour <stamo...@racket-lang.org> 2013-11-14 11:04
:
| Add types and optimizations for flrandom and unsafe-flrandom.
:
   A 
pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/tests/flrandom.rkt
   M .../typed-racket/base-env/base-env-numeric.rkt     |  3 +++
   M .../typed-racket/optimizer/float.rkt               | 19 ++++++++++++++++++-
   M .../typed-racket/optimizer/hidden-costs.rkt        |  4 ++++

~~~~~~~~~~

a87dcc2 Vincent St-Amour <stamo...@racket-lang.org> 2013-11-14 14:11
:
| Log non-optimized fixnum-specific ops as hidden costs.
:
   M .../optimizer/missed-optimizations/fixnum.rkt       |  6 +++---
   M .../optimizer/tests/fixnum-bounded-expr.rkt         |  8 ++++----
   M .../optimizer/tests/invalid-fxquotient.rkt          |  2 +-
   A 
pkgs/typed-racket-pkgs/typed-racket-test/tests/typed-racket/optimizer/missed-optimizations/fixnum-no-bound.rkt
   M .../typed-racket/optimizer/fixnum.rkt               | 18 ++++++++++++++++--

=====[ Overall Diff ]===================================================


For the following program, on my computer, the new "random -> unsafe-flrandom" optimization slows down the first loop and speeds up the second:

#lang typed/racket

(require math/flonum
         racket/unsafe/ops)

(define g (current-pseudo-random-generator))
(define bx (make-flvector 1))

(for: ([_  (in-range 5)])
  (time (for: ([_  (in-range 5000000)])
          (unsafe-flvector-set! bx 0 (random)))))
(newline)

(for: ([_  (in-range 5)])
  (time (for: ([_  (in-range 5000000)])
          (unsafe-flvector-set! bx 0 (random g)))))


IOW, it appears the optimization only helps when passing in a pseudo-random generator. I suspected this might be the case when I ran a bunch of tests of the math library's sampling algorithms and some of them were a hair slower after updating my Racket repo.

The only reason I can think of that this would be the case is if the built-in's parameter retrieval is faster. Anyhow, changing (random) to (unsafe-flrandom (current-pseudo-random-generator)) looks like a pessimization for now.

(I'm going to speed up the math library's samplers by caching the parameter value and using the new `flrandom', but of course that's a separate issue.)

Neil ⊥

_________________________
 Racket Developers list:
 http://lists.racket-lang.org/dev

Reply via email to