There is a fast Java version of Mersenne Twister here, if you feel
like compiling a java file:
http://cs.gmu.edu/~sean/research/


On 26 mar, 05:43, Chas Emerick <[email protected]> wrote:
> I was going to suggest something similar using seque in an atom, but  
> in neither case (using an atom or a ref) is the contention going to be  
> minimized -- just shifted from the AtomicLong in java.util.Random to  
> the now-app-level atom or ref.
>
> - Chas
>
> On Mar 26, 2010, at 12:30 AM, Andrzej wrote:
>
>
>
> > As others have pointed out using per-thread java.util.Random objects
> > is probably the best way to go in this particular case. However, I'm
> > curious if the following code could give any speed gain on your
> > machine:
>
> > (defn rand-seq [] (repeatedly #(. Math (random))))
>
> > (def rand-seq-ref (ref (rand-seq)))
> > (nth @rand-seq-ref 100) ;; pre-cache random values; evaluate it  
> > every some time
> > ;;btw, how to do it automatically?
>
> > (defn next-rand-val []
> >   (dosync (commute rand-seq-ref next) (first @rand-seq-ref)))
>
> > user=> (next-random-val)
> > 0.5558267606843464
> > user=> (next-random-val)
> > 0.32353157456467474
>
> > Cheers,
> > Andrzej
>
> > On Fri, Mar 26, 2010 at 11:35 AM, Lee Spector  
> > <[email protected]> wrote:
>
> >> I'm trying to track down the reason that I sometimes see a lot of  
> >> concurrency in my system (up to 1200% CPU utilization on a dual  
> >> quadcore mac that also has some kind of hyperthreading, allegedly  
> >> allowing a maximum of 1600% CPU) while other times it gets stuck at  
> >> around 100-200%. My system (a genetic programming system) has a  
> >> *lot* of randomness in it, so it's hard to repeat runs and get a  
> >> firm handle on what's going on.
>
> >> But after a bunch of testing I'm beginning to suspect that it might  
> >> be the random number generator itself (clojure-core/rand-int in  
> >> this case, which calls (. Math (random))). This seems at least  
> >> somewhat plausible to me because I guess that the underlying Java  
> >> random method must be accessing and updating a random number  
> >> generator state, and so this would be a concurrency bottleneck. So  
> >> if I'm in a condition in which lots of concurrent threads are all  
> >> calling rand-int a lot then all of the accesses to the state have  
> >> to be serialized and my concurrency suffers (a lot).
>
> >> Does this sound plausible to you? If so, is there a straightforward  
> >> way to avoid it? It is not important to me that the random numbers  
> >> being generated in different threads be generated from the same  
> >> generator or coordinated/seeded in any way. I just need lots of  
> >> numbers that are "random enough." I guess I could roll my own  
> >> random number generator(s) and either have a lot of them with  
> >> independent states or maybe even make them stateless (always  
> >> generating numbers by scrambling the clock?). But I would hope  
> >> there would be something simpler.
>
> >> Thanks,
>
> >>  -Lee
>
> >> --
> >> Lee Spector, Professor of Computer Science
> >> School of Cognitive Science, Hampshire College
> >> 893 West Street, Amherst, MA 01002-3359
> >> [email protected],http://hampshire.edu/lspector/
> >> Phone: 413-559-5352, Fax: 413-559-5438
>
> >> Check out Genetic Programming and Evolvable Machines:
> >>http://www.springer.com/10710-http://gpemjournal.blogspot.com/
>
> > --
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to [email protected]
> > Note that posts from new members are moderated - please be patient  
> > with your first post.
> > To unsubscribe from this group, send email to
> > [email protected]
> > For more options, visit this group at
> >http://groups.google.com/group/clojure?hl=en
>
> > To unsubscribe from this group, send email to clojure
> > +unsubscribegooglegroups.com or reply to this email with the words  
> > "REMOVE ME" as the subject.

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

To unsubscribe from this group, send email to 
clojure+unsubscribegooglegroups.com or reply to this email with the words 
"REMOVE ME" as the subject.

Reply via email to