"Robert G. Brown" <rgb at phy.duke.edu> wrote
> A $30 PCI-bus card that does nothing but generate super-high-quality
> random numbers (uniform deviates of various widths and/or ints of
> various widths) at high speed (faster than the CPU can, which means say
> 50 megarands/second or better) and deliver them directly to memory
> without the CPUs help (so one can build a circular queue and keep it
> full with only occasional calls requesting the next block of rands)
> would be a Great Boon to Monte Carlo-heads like myself.
I've often thought the same. The thing is, it doesn't have to be
pseudorandom numbers, it can be real random numbers generated
by a physical process. For instance, put some radioactive
material on the card and count the decays observed in a
fixed interval. In that case the faster you want the random
numbers the hotter the source must be. Unfortunately a
Curie is "only" 37,000,000,000 decays per second. If you want
50 Mrands per second and use 1 Curie of material that's only
about 740 expected decays per interval, assuming that you can catch
them all, so not as many bits in those rands as you might want.
Also I'm pretty sure I don't want to be anywhere near a beowulf
with 1 Curie of radiation in each node! When I was considering this
it was just to generate a small number of random numbers at a much
slower rate, in which case radiation equivalent to a smoke alarm
would have sufficed.
It might be safer and a good deal more practical to use shot noise
instead. That could be integrated nicely onto a chip, with
thousands of little amplifiers and adders all plugging away
in parallel to generate your numbers.
And does it really have to be in a PCI slot? Why not build it
into memory, Then the numbers don't need to move across the bus
at all, any read from that stick will contain a random number.
Just be sure that said card has some way of passing the
POST sequence. Tricky doing both I suppose.
Regards,
David Mathog
mathog at caltech.edu
Manager, Sequence Analysis Facility, Biology Division, Caltech