0b034cac8014148a992a9f73b73625fdccc21c8b
[charm.git] / doc / convext / random.tex
1 \chapter{Converse Pseudorandom Number Generator}
2
3 Converse provides three different Linear Congruential Random Number Generators.
4 Each random number stream has a cycle length of $2^{64}$ as opposed to
5 ANSI C standard's $2^{48}$.
6 Also, each of the three random number streams can be split into a number of
7 per processor streams, so that the random number sequences can be computed 
8 in parallel, and are reproducible. Furthermore, there is no implicit critical
9 section in the random number generator,and yet, this functionality is
10 thread-safe, because all the state information is stored in the structure
11 allocated by the programmer. Further, this state information is stored in a
12 first class object, and can be passed to other processors through messages.
13 This module of Converse is based on the public-domain 
14 SPRNG\footnote{URL:{\tt http://www.ncsa.uiuc.edu/Apps/SPRNG/www/}} 
15 package developed
16 by Ashok Srinivasan\footnote{Email:{\tt ashoks@ncsa.uiuc.edu}} at NCSA.
17
18 Interface to the Converse Pseudorandom Number Generator module is as follows:
19
20 \function{typedef ... CrnStream;}
21 \index{CrnStream}
22 \desc{State information for generating the next random number in the sequence.}
23
24 \function{void CrnInitStream(CrnStream *stream, int seed, int type)}
25 \index{CrnInitStream}
26 \desc{Initializes the new random number stream \param{stream} 
27 of \param{type} using \param{seed}. \param{type} can have values 0, 1, or 2
28 to represent three types of linear congruential random number generators.}
29
30
31 \function{int CrnInt(CrnStream *stream)}
32 \index{CrnInt}
33 \desc{Returns an integer between 0 and $2^{31}-1$ corresponding to the next
34 random number in the sequence associated with \param{stream}. 
35 Advances \param{stream} by one in the sequence.}
36
37 \function{double CrnDouble(CrnStream *stream)}
38 \index{CrnDouble}
39 \desc{Returns an double precision floating point number between 0 and 1
40 corresponding to the next
41 random number in the sequence associated with \param{stream}. 
42 Advances \param{stream} by one in the sequence.}
43 \desc{}
44
45 \function{float CrnFloat(CrnStream *stream)}
46 \index{CrnFloat}
47 \desc{Returns a single precision floating point number between 0 and 1 
48 corresponding to the next
49 random number in the sequence associated with \param{stream}. 
50 Advances \param{stream} by one in the sequence.}
51