--- /dev/null
+\documentclass[a4paper]{article}
+
+
+
+\title{Efficient and Cryptographically Secure Generation of Chaotic Pseudorandom Numbers on GPU}
+\author{}
+\date{}
+
+\makeindex
+
+\begin{document}
+\maketitle
+
+First of all, we would thank the reviewers for the detailled comments and suggestions for our paper.
+
+
+\section*{Reviewer \#1:}
+\begin{enumerate}
+\item ``In my view, this is an outstanding paper that reports on outstanding work. The detail provided is extensive, well
+thought out, and supports the authors' research thoroughly. In particular, I found the equations and algorithms to be understandable
+(albeit on the upper edge of my understanding... I'm a compiler optimization guy by training) and in keeping with the highly technical
+ nature of PRNGs and the topic of RNGs in general. I'd suggest that the direction of future work be carefully planned based on
+technological trends. GPUs are becoming more and more the standard technology for parallel processing as they are widely available,
+ cost effective and can get the job done. So, certainly including more work on larger scale GPU clusters would be well advised in addition
+ to the other parallel frameworks mentioned.
+
+Any specific comments I might make would only be minor quibbles with wording, and in this case it would simply be matters of writing
+ style. It wouldn't hurt the paper to have it gone over once by an editor who hasn't seen it previously to perhaps catch any slight
+ wording changes that might improve the overall style... but this paper is so strong anyway that if that didn't happen it wouldn't hurt either.
+
+One minor piece that I didn't find addressed in the paper is the issue of how the seed is acquired. Isn't it always important for the
+ seed to be sufficiently random and unpredictable, and if so, perhaps a mention about how important the seed is to the strength of a
+ RNG and any cryptographic technique should be added?
+
+Excellent excellent work!''
+
+\medskip
+In practice the seed are generated using ISAAC which is a cryptographic PRNG. So the security of our seed lies on the security of ISAAC. We think that this is enough to consider that our seeds are sufficiently secure.
+
+\end{enumerate}
+
+
+\section*{Reviewer \#2:}
+\begin{enumerate}
+\item ``The paper "Efficient and Cryptographically Secure Generation of Chaotic Pseudorandom Numbers on GPU" presents a new
+pseudo number generator comparing favorably with the CURAND library provided by NVIDIA. The need for high quality
+number generation is ubiquitous in computer simulations based on stochastic methods and in cryptographic security.
+It justifies the importance of the paper for readers of the journal.
+The nice feature of the article is combined topological considerations on the notion of chaos with practical
+implementation of a working algorithm and its tests. Large parts of the paper are recapitulation of an earlier
+work and may seem redundant for a specialist in the field, however an average reader may need it as a review
+on what has been done. The paper is quite clearly written in an understandable English so I recommend to publish
+it in principle as is. However there is one point that I would optionally recommend the authors to adrees.
+
+In the paper I do not find information on the period of the resultant chaotic iteration pseudonumber
+ generator compared to the periods of input generators. It would be nice if it turned out that, among other
+features their procedure to combine a few weaker but fast generators into a much stronger and also fast one, yielded a much
+longer period of the resultant generator compared to any of the input generators.''
+
+\medskip
+We have added the following text in Section 4.2:\\
+Obviously, when $S$ is periodic of period $p$, then $x$ is periodic too of
+period either $p$ or $2p$, depending of the fact that, after $p$ iterations,
+the state of the system may or not be the same than before these iterations.
+\end{enumerate}
+
+
+
+
+\section*{Reviewer \#4:}
+\begin{enumerate}
+\item ``Comments to Authors
+
+This paper describes the mathematical basis for pseudorandom number generators PRNG and implements a GPU accelerated version
+for execution and measurements on two Nvidia based GPGPU systems.
+The paper is very well written and has only a few minor spelling mistakes, although some grammar formulations could be
+reworked by a native speaker.''
+
+\medskip
+The paper has been reread by a native speaker
+
+\item ``The mathematical introductions are short and concise, enabling a reader to gather all relevant knowledge directly from this publication.
+ This always raises the question of novelty of the paper, as new aspects are arising only at a later stage in the paper itself
+(i.e. the parallelisation part). Nevertheless, I find the introduction necessary to this extent.
+While working through the paper a few minor questions arised:
+- page 7, Algorithm 3: is the increment of i in the while loop implicit, or where is it incremented?''
+
+In fact this is implicit with the while
+
+\item ``In Algorithm 5 and 6 threadIdx is written sometimes as threadId''
+
+ We have uniformized that
+
+ \item ``Page 19, Algorithm 6: there are 8 random numbers and their corresponding 8 states. You state that only a few of them are used, which is reflected in the algorithm itself. Are always the same ones used, or do you also rotate there?''
+
+ In practice, 8 BBS random number are used but for each of them only the fourth last bits are used. So we used $8 \times 4=32$ bits. If we chose a bigger number of BBS, the computation is slower. That is why we have used 8 BBS which seems to be a good trade-off.
+
+ \item ``In the references starting on page 21, some references need a bit more work. Probably BibTeX did some magic there and needs
+ to be tweaked manually. Example Ref [7] nist needs to be NIST.''
+
+ We have corrected that.
+
+ \item ``Another nice aspect to consider in future might be different accelerator-based systems such as Intel Xeon Phi cards and speed measurements
+ using such cards. As supercomputers tend to get more and more heterogeneous (Tianhe-2, Stampede) using other accelerators than GPGPUs,
+ a Xeon Phi solution might be very beneficial for the community.''
+
+ Thank you for this remark, we have added that in the future work.
+
+
+ \item ``With the strong mathematical focus, the authors could also think about submitting this paper to a different, more
+mathematically oriented journal, as the focus on supercomputers and supercomputing capabilities is not as strong in this paper.
+Nevertheless, I recommend the paper for publication.''
+
+In fact there are different part in this paper, we have chosen the Journal of Supercomputing because for previous submussions this journal has a wide audience and it is of really good quality.
+\end{enumerate}
+
+
+
+
+\end{document}
array\_comb1, array\_comb2: Arrays containing combinations of size combination\_size\;}
\KwOut{NewNb: array containing random numbers in global memory}
-\If{threadId is concerned} {
- retrieve data from InternalVarXorLikeArray[threadId] in local variables including shared memory and x\;
+\If{threadIdx is concerned} {
+ retrieve data from InternalVarXorLikeArray[threadIdx] in local variables including shared memory and x\;
offset = threadIdx\%combination\_size\;
o1 = threadIdx-offset+array\_comb1[offset]\;
o2 = threadIdx-offset+array\_comb2[offset]\;
\For{i=1 to n} {
t=xor-like()\;
t=t\textasciicircum shmem[o1]\textasciicircum shmem[o2]\;
- shared\_mem[threadId]=t\;
+ shared\_mem[threadIdx]=t\;
x = x\textasciicircum t\;
- store the new PRNG in NewNb[NumThreads*threadId+i]\;
+ store the new PRNG in NewNb[NumThreads*threadIdx+i]\;
}
- store internal variables in InternalVarXorLikeArray[threadId]\;
+ store internal variables in InternalVarXorLikeArray[threadIdx]\;
}
\end{small}
\caption{Main kernel for the chaotic iterations based PRNG GPU efficient
}
\KwOut{NewNb: array containing random numbers in global memory}
-\If{threadId is concerned} {
- retrieve data from InternalVarBBSArray[threadId] in local variables including shared memory and x\;
+\If{threadIdx is concerned} {
+ retrieve data from InternalVarBBSArray[threadIdx] in local variables including shared memory and x\;
we consider that bbs1 ... bbs8 represent the internal states of the 8 BBS numbers\;
offset = threadIdx\%combination\_size\;
o1 = threadIdx-offset+array\_comb[bbs1\&7][offset]\;
t$<<$=shift\;
t|=BBS2(bbs2)\&array\_shift[shift]\;
t=t\textasciicircum shmem[o1]\textasciicircum shmem[o2]\;
- shared\_mem[threadId]=t\;
+ shared\_mem[threadIdx]=t\;
x = x\textasciicircum t\;
- store the new PRNG in NewNb[NumThreads*threadId+i]\;
+ store the new PRNG in NewNb[NumThreads*threadIdx+i]\;
}
- store internal variables in InternalVarXorLikeArray[threadId] using a rotation\;
+ store internal variables in InternalVarXorLikeArray[threadIdx] using a rotation\;
}
\end{small}
\caption{main kernel for the BBS based PRNG GPU}