LA Hackathons Message Board › Possible project: Random123
This message board is read-only.
|David Q. Mertz|
Los Angeles, CA
As I state in my RSVP, I'll mostly be there as an available resource for other projects. However, I do have an idea I've been wanting to start for a while. A brilliant colleague of mine at my wonderful long-time consulting job has created a C library called Random123 (http://www.deshawrese...). To quote from its blurb:
Random123 is a library of "counter-based" random number generators (CBRNGs), in which the Nth random number can be obtained by applying a stateless mixing function to N instead of the conventional approach of using N iterations of a stateful transformation [...] they are ideal for a wide range of applications on modern multi-core CPUs, GPUs, clusters, and special-purpose hardware [...] They all satisfy rigorous statistical testing (passing BigCrush in TestU01), vectorize and parallelize well (each generator can produce at least 2^64 independent streams), have long periods (the period of each stream is at least 2^128), require little or no memory or state, and have excellent performance
The short summary is that Random123 is better in every way than conventional iterative algorithms like Mersenne Twister (faster, better statistically, resumable from the middle, trivially parallelizable, etc).
I would like--if not this coming weekend, then someday--to make a wrapper around Random123 to provide it as a Python module. Ideally, in some more distant future, I believe it could and should replace the existing 'random' module (with support for all the existing APIs; there may be edge cases where that would be difficult, I'm not sure).
Despite working a lot with Python, I am not experienced in writing extension modules. This one should be pretty straightforward since the underlying C code is available and well tested. But having someone help with this would be fun. Actually, if somebody was excited about this (and had a little experience), I'd also love to do an extension module for Ruby, Perl, Smalltalk, or whatever to wrap the C (learning curve for me, but so what).
Edited by David Q. Mertz on May 7, 2012 12:59 PM