<html xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.msonormal0, li.msonormal0, div.msonormal0
        {mso-style-name:msonormal;
        mso-margin-top-alt:auto;
        margin-right:0in;
        mso-margin-bottom-alt:auto;
        margin-left:0in;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
span.gmail-hoenzb
        {mso-style-name:gmail-hoenzb;}
span.gmail-m8449096087844483128hoenzb
        {mso-style-name:gmail-m_8449096087844483128hoenzb;}
span.EmailStyle20
        {mso-style-type:personal-reply;
        font-family:"Calibri",sans-serif;
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-size:10.0pt;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style>
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Greetings and Salutations,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">There is also the boost header libraries that you can use:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><a href="https://www.boost.org/doc/libs/1_67_0/doc/html/boost_random.html">https://www.boost.org/doc/libs/1_67_0/doc/html/boost_random.html</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Gallery example: <a href="http://gallery.rcpp.org/articles/timing-normal-rngs/">
http://gallery.rcpp.org/articles/timing-normal-rngs/</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">If you need parallel draws, see the sitmo engine:  <a href="https://github.com/coatless/sitmo">https://github.com/coatless/sitmo</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Also, you may wish to consider the rTRNG library: <a href="https://github.com/miraisolutions/rTRNG">
https://github.com/miraisolutions/rTRNG</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Sincerely,<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">JJB<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></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"><rcpp-devel-bounces@lists.r-forge.r-project.org> on behalf of Yixuan Qiu <yixuanq@gmail.com><br>
<b>Date: </b>Monday, April 16, 2018 at 11:53 AM<br>
<b>To: </b>Murray Efford <murray.efford@gmail.com><br>
<b>Cc: </b>"rcpp-devel@lists.r-forge.r-project.org" <rcpp-devel@lists.r-forge.r-project.org><br>
<b>Subject: </b>Re: [Rcpp-devel] Distribution functions threadsafe in RcppParallel?<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<div>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><a name="_MailOriginalBody">For your information, here is a header-only library for distribution functions:
</a><a href="https://github.com/kthohr/stats"><span style="mso-bookmark:_MailOriginalBody">https://github.com/kthohr/stats</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody"><o:p></o:p></span></p>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="mso-bookmark:_MailOriginalBody">The API seems to be designed to mimic the R API.<br>
<br>
<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody">Best,<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody">Yixuan<o:p></o:p></span></p>
<div>
<div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody">2018-04-15 23:56 GMT-04:00 Murray Efford <</span><a href="mailto:murray.efford@gmail.com" target="_blank"><span style="mso-bookmark:_MailOriginalBody">murray.efford@gmail.com</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody">>:<o:p></o:p></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 style="mso-bookmark:_MailOriginalBody">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).<o:p></o:p></span></p>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><span class="gmail-hoenzb"><span style="color:#888888">Murray</span></span></span><span style="mso-bookmark:_MailOriginalBody"><o:p></o:p></span></p>
</div>
<div>
<div>
<div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><o:p> </o:p></span></p>
<div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody">On Mon, Apr 16, 2018 at 3:33 PM, Dirk Eddelbuettel <</span><a href="mailto:edd@debian.org" target="_blank"><span style="mso-bookmark:_MailOriginalBody">edd@debian.org</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody">>
 wrote:<o:p></o:p></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 style="mso-bookmark:_MailOriginalBody"><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<o:p></o:p></span></p>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:12.0pt"><span style="mso-bookmark:_MailOriginalBody"><br>
| (It seems this question must have arisen before, but I haven't found an<br>
| answer)<o:p></o:p></span></p>
</div>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><span class="gmail-m8449096087844483128hoenzb"><span style="color:#888888">--
</span></span></span><span style="mso-bookmark:_MailOriginalBody"><span style="color:#888888"><br>
</span></span><a href="http://dirk.eddelbuettel.com" target="_blank"><span style="mso-bookmark:_MailOriginalBody">http://dirk.eddelbuettel.com</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody"><span class="gmail-m8449096087844483128hoenzb"><span style="color:#888888">
 | @eddelbuettel | </span></span></span><a href="mailto:edd@debian.org" target="_blank"><span style="mso-bookmark:_MailOriginalBody">edd@debian.org</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody"><o:p></o:p></span></p>
</blockquote>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><o:p> </o:p></span></p>
</div>
</div>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><br>
_______________________________________________<br>
Rcpp-devel mailing list<br>
</span><a href="mailto:Rcpp-devel@lists.r-forge.r-project.org"><span style="mso-bookmark:_MailOriginalBody">Rcpp-devel@lists.r-forge.r-project.org</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody"><br>
</span><a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank"><span style="mso-bookmark:_MailOriginalBody">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody"><o:p></o:p></span></p>
</blockquote>
</div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody"><br>
<br clear="all">
<br>
-- <o:p></o:p></span></p>
<div>
<p class="MsoNormal"><span style="mso-bookmark:_MailOriginalBody">Yixuan Qiu <</span><a href="mailto:yixuan.qiu@cos.name" target="_blank"><span style="mso-bookmark:_MailOriginalBody">yixuanq@gmail.com</span><span style="mso-bookmark:_MailOriginalBody"></span></a><span style="mso-bookmark:_MailOriginalBody">><br>
Department of Statistics,<br>
Purdue University<o:p></o:p></span></p>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</body>
</html>