]> AND Private Git Repository - prng_gpu.git/commitdiff
Logo AND Algorithmique Numérique Distribuée

Private GIT Repository
avance un peu
authorcouturie <couturie@carcariass.(none)>
Tue, 13 Sep 2011 19:24:34 +0000 (21:24 +0200)
committercouturie <couturie@carcariass.(none)>
Tue, 13 Sep 2011 19:24:34 +0000 (21:24 +0200)
prng_gpu.tex

index 730b6206c2d632339de2e864e2921ce2e16f1ed5..00991e9cb0d3fe30956f7ea5d4f311d801d8b6ca 100644 (file)
@@ -667,16 +667,30 @@ Indeed this result is weaker than the theorem establishing the chaos for the fin
 
 \section{Efficient prng based on chaotic iterations}
 
 
 \section{Efficient prng based on chaotic iterations}
 
-On parle du séquentiel avec des nombres 64 bits\\
-
-
 In  order to  implement efficiently  a PRNG  based on  chaotic iterations  it is
 possible to improve  previous works [ref]. One solution  consists in considering
 that the  strategy used contains all the  bits for which the  negation is
 In  order to  implement efficiently  a PRNG  based on  chaotic iterations  it is
 possible to improve  previous works [ref]. One solution  consists in considering
 that the  strategy used contains all the  bits for which the  negation is
-achieved out. Then instead of applying  the negation on these bits we can simply
+achieved out. Then in order to apply  the negation on these bits we can simply
 apply the  xor operator between  the current number  and the strategy. In
 order to obtain the strategy we also use a classical PRNG.
 
 apply the  xor operator between  the current number  and the strategy. In
 order to obtain the strategy we also use a classical PRNG.
 
+Here  is an  example with  16-bits numbers  showing how  the bit  operations are
+applied.  Suppose  that $x$ and the  strategy $S^i$ are defined  in binary mode.
+Then the following table shows the result of $x$ xor $S^i$.
+$$
+\begin{array}{|cc|cccccccccccccccc|}
+\hline
+x      &=&1&0&1&1&1&0&1&0&1&0&0&1&0&0&1&0\\
+\hline
+S^i      &=&0&1&1&0&0&1&1&0&1&1&1&0&0&1&1&1\\
+\hline
+x \oplus S^i&=&1&1&0&1&1&1&0&0&0&1&1&1&0&1&0&1\\
+\hline
+
+\hline
+ \end{array}
+$$
+
 %% \begin{figure}[htbp]
 %% \begin{center}
 %% \fbox{
 %% \begin{figure}[htbp]
 %% \begin{center}
 %% \fbox{
@@ -725,7 +739,7 @@ unsigned int CIprng() {
 
 
 In listing~\ref{algo:seqCIprng}  a sequential  version of our  chaotic iterations
 
 
 In listing~\ref{algo:seqCIprng}  a sequential  version of our  chaotic iterations
-based PRNG  is presented.  This version  uses three classical  64-bits PRNG: the
+based PRNG  is presented. The xor operator is represented by \textasciicircum. This function  uses three classical  64-bits PRNG: the
 \texttt{xorshift},   the  \texttt{xor128}  and   the  \texttt{xorwow}.   In  the
 following,  we  call them  xor-like  PRNGSs.   These  three PRNGs  are  presented
 in~\cite{Marsaglia2003}.  As each xor-like  PRNG used works with 64-bits  and as our PRNG
 \texttt{xorshift},   the  \texttt{xor128}  and   the  \texttt{xorwow}.   In  the
 following,  we  call them  xor-like  PRNGSs.   These  three PRNGs  are  presented
 in~\cite{Marsaglia2003}.  As each xor-like  PRNG used works with 64-bits  and as our PRNG
@@ -748,8 +762,8 @@ on  GPU. The principe  consists in  assigning the  computation of  a PRNG  as in
 sequential to each thread of the GPU.  Of course, it is essential that the three
 xor-like PRNGs used  for our computation have different  parameters. So we chose
 them randomly with another PRNG. As  the initialisation is performed by the CPU,
 sequential to each thread of the GPU.  Of course, it is essential that the three
 xor-like PRNGs used  for our computation have different  parameters. So we chose
 them randomly with another PRNG. As  the initialisation is performed by the CPU,
-we have chosen to use the ISAAC PRNG to initalize all the parameters for the GPU
-version  of  our  PRNG.  The  implementation  of  the  three xor-like  PRNGs  is
+we have chosen to  use the ISAAC PRNG [ref] to initalize  all the parameters for
+the GPU version of our PRNG.   The implementation of the three xor-like PRNGs is
 straightforward  as soon  as their  parameters have  been allocated  in  the GPU
 memory. Each xor-like  PRNGs used works with an internal  number $x$ which keeps
 the last generated random numbers. Other internal variables are also used by the
 straightforward  as soon  as their  parameters have  been allocated  in  the GPU
 memory. Each xor-like  PRNGs used works with an internal  number $x$ which keeps
 the last generated random numbers. Other internal variables are also used by the
@@ -785,11 +799,17 @@ PRNGs\footnote{we multiply this number by $2$ in order to count 32-bits numbers}
 and  random  number of  our  PRNG  is  equals to  $100,000\times  ((4+5+6)\times
 2+(1+100))=1,310,000$ 32-bits numbers, i.e. about $52$Mb.
 
 and  random  number of  our  PRNG  is  equals to  $100,000\times  ((4+5+6)\times
 2+(1+100))=1,310,000$ 32-bits numbers, i.e. about $52$Mb.
 
+All the  tests performed  to pass the  BigCrush of TestU01  succeeded. Different
+number of threads have been tested upto $10$ millions.
+
 \section{Experiments}
 
 \section{Experiments}
 
-On passe le BigCrush\\
-On donne des temps de générations sur GPU/CPU\\
-On donne des temps de générations de nombre sur GPU puis on rappatrie sur CPU / CPU ? bof bof, on verra
+Differents experiments have been performed in order to measure the generation speed.
+
+
+First of all we have compared the time to generate X random numbers with both the CPU version and the GPU version. 
+
+Faire une courbe du nombre de random en fonction du nombre de threads, éventuellement en fonction du nombres de threads par bloc.
 
 
 \section{Conclusion}
 
 
 \section{Conclusion}