<div dir="ltr"><div>Thanks for all these good suggestions. StatsLib as suggested by Yixuan seems especially straightforward. I may yet find that dpois and dbinom from R are threadsafe.<br></div>Murray<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 17, 2018 at 5:34 AM, Balamuta, James Joseph <span dir="ltr"><<a href="mailto:balamut2@illinois.edu" target="_blank">balamut2@illinois.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div link="blue" vlink="purple" lang="EN-US">
<div class="m_-2527047480507660860WordSection1">
<p class="MsoNormal">Greetings and Salutations,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">There is also the boost header libraries that you can use:<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal"><a href="https://www.boost.org/doc/libs/1_67_0/doc/html/boost_random.html" target="_blank">https://www.boost.org/doc/<wbr>libs/1_67_0/doc/html/boost_<wbr>random.html</a><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Gallery example: <a href="http://gallery.rcpp.org/articles/timing-normal-rngs/" target="_blank">
http://gallery.rcpp.org/<wbr>articles/timing-normal-rngs/</a><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">If you need parallel draws, see the sitmo engine:  <a href="https://github.com/coatless/sitmo" target="_blank">https://github.com/coatless/<wbr>sitmo</a><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Also, you may wish to consider the rTRNG library: <a href="https://github.com/miraisolutions/rTRNG" target="_blank">
https://github.com/<wbr>miraisolutions/rTRNG</a><u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">Sincerely,<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<p class="MsoNormal">JJB<u></u><u></u></p>
<p class="MsoNormal"><u></u> <u></u></p>
<div style="border:none;border-top:solid #b5c4df 1.0pt;padding:3.0pt 0in 0in 0in">
<p class="MsoNormal"><b><span style="font-size:12.0pt;color:black">From: </span></b><span style="font-size:12.0pt;color:black"><<a href="mailto:rcpp-devel-bounces@lists.r-forge.r-project.org" target="_blank">rcpp-devel-bounces@lists.r-<wbr>forge.r-project.org</a>> on behalf of Yixuan Qiu <<a href="mailto:yixuanq@gmail.com" target="_blank">yixuanq@gmail.com</a>><br>
<b>Date: </b>Monday, April 16, 2018 at 11:53 AM<br>
<b>To: </b>Murray Efford <<a href="mailto:murray.efford@gmail.com" target="_blank">murray.efford@gmail.com</a>><br>
<b>Cc: </b>"<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-<wbr>project.org</a>" <<a href="mailto:rcpp-devel@lists.r-forge.r-project.org" target="_blank">rcpp-devel@lists.r-forge.r-<wbr>project.org</a>><br>
<b>Subject: </b>Re: [Rcpp-devel] Distribution functions threadsafe in RcppParallel?<u></u><u></u></span></p>
</div><div><div class="h5">
<div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><a name="m_-2527047480507660860__MailOriginalBody">For your information, here is a header-only library for distribution functions:
</a><a href="https://github.com/kthohr/stats" target="_blank"><span>https://github.com/kthohr/<wbr>stats</span><span></span></a><span><u></u><u></u></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span>The API seems to be designed to mimic the R API.<br>
<br>
<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><span>Best,<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><span>Yixuan<u></u><u></u></span></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div>
<p class="MsoNormal"><span>2018-04-15 23:56 GMT-04:00 Murray Efford <</span><a href="mailto:murray.efford@gmail.com" target="_blank"><span>murray.efford@gmail.com</span><span></span></a><span>>:<u></u><u></u></span></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<div>
<div>
<p class="MsoNormal"><span>Thanks. This is all happening inside a package for CRAN, so I would rather avoid more complexity and potential platform-dependence, but I also cannot afford for it to break unpredictably (or
 otherwise).<u></u><u></u></span></p>
</div>
<p class="MsoNormal"><span><span class="m_-2527047480507660860gmail-hoenzb"><span style="color:#888888">Murray</span></span></span><span><u></u><u></u></span></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
<div>
<p class="MsoNormal"><span>On Mon, Apr 16, 2018 at 3:33 PM, Dirk Eddelbuettel <</span><a href="mailto:edd@debian.org" target="_blank"><span>edd@debian.org</span><span></span></a><span>>
 wrote:<u></u><u></u></span></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0in 0in 0in 6.0pt;margin-left:4.8pt;margin-right:0in">
<p class="MsoNormal"><span><br>
On 16 April 2018 at 13:41, Murray Efford wrote:<br>
| I read in the RcppParallel blurb "The code that you write within parallel<br>
| workers should not call the R or Rcpp API in any fashion", which is<br>
| admirably clear. However, it leaves me without threadsafe access to<br>
| distribution functions (dpois, dbinom etc.). In practice, so far, these R<br>
| API calls seem to work for me, but can they be trusted? Is there an<br>
| alternative?<br>
<br>
That's a fair question. They may work, as they are also exposed / available<br>
via the standalone R math library (see Writing R Extensions).<br>
<br>
As such, they may not required memory allocations or other interactions with<br>
the R process and hence "not call R ... in any fashion" per the above. <br>
<br>
But we can't say for sure. If you want to be safe, maybe stick to <br>
equivalent functions from a non-R source: C++11, Boost, ...  <br>
<br>
Dirk<u></u><u></u></span></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span><br>
| (It seems this question must have arisen before, but I haven't found an<br>
| answer)<u></u><u></u></span></p>
</div>
</div>
<p class="MsoNormal"><span><span class="m_-2527047480507660860gmail-m8449096087844483128hoenzb"><span style="color:#888888">--
</span></span></span><span><span style="color:#888888"><br>
</span></span><a href="http://dirk.eddelbuettel.com" target="_blank"><span>http://dirk.eddelbuettel.com</span><span></span></a><span><span class="m_-2527047480507660860gmail-m8449096087844483128hoenzb"><span style="color:#888888">
 | @eddelbuettel | </span></span></span><a href="mailto:edd@debian.org" target="_blank"><span>edd@debian.org</span><span></span></a><span><u></u><u></u></span></p>
</blockquote>
</div>
<p class="MsoNormal"><span><u></u> <u></u></span></p>
</div>
</div>
</div>
<p class="MsoNormal"><span><br>
______________________________<wbr>_________________<br>
Rcpp-devel mailing list<br>
</span><a href="mailto:Rcpp-devel@lists.r-forge.r-project.org" target="_blank"><span>Rcpp-devel@lists.r-forge.r-<wbr>project.org</span><span></span></a><span><br>
</span><a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank"><span>https://lists.r-forge.r-<wbr>project.org/cgi-bin/mailman/<wbr>listinfo/rcpp-devel</span><span></span></a><span><u></u><u></u></span></p>
</blockquote>
</div>
<p class="MsoNormal"><span><br>
<br clear="all">
<br>
-- <u></u><u></u></span></p>
<div>
<p class="MsoNormal"><span>Yixuan Qiu <</span><a href="mailto:yixuan.qiu@cos.name" target="_blank"><span>yixuanq@gmail.com</span><span></span></a><span>><br>
Department of Statistics,<br>
Purdue University<u></u><u></u></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div></div></div>
</div>

</blockquote></div><br></div>