<div dir="ltr"><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Thank you so much, everyone, for responding to this email.</span></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Dirk,</span></p><ul style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><li style="background:transparent;margin-top:0pt;margin-bottom:0pt;list-style-type:disc"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">I didn't think about testing _equality_ of doubles because the numbers are significantly different  (e.g., instead of 0.5, chooses 1.5). However, that is a valid point, and I should be aware of that.</span></li><li style="background:transparent;margin-top:0pt;margin-bottom:0pt;list-style-type:disc"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">You are right about the serial runs. Whenever I deactivate OpenMP, the results are correct.</span></li></ul><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Serguei,</span></p><ul style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><li style="background:transparent;margin-top:0pt;margin-bottom:0pt;list-style-type:disc"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Thanks for the comments. Yes, I agree. It seems outer is a better option. We have started with outer. However, outer builds the entire matrix of differences first, then finds the minimum index. In our application, it requires 200 GB of memory to build that matrix. Rcpp does the job with around 10 MB. That is why I switched to Rcpp. Please let me know your thoughts.</span></li></ul><p style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><br></p><h3 style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt;font-weight:normal">Iñaki,</span></span></h3><ul style="color:rgb(14,16,26);background:transparent;margin-top:0pt;margin-bottom:0pt"><li style="background:transparent;margin-top:0pt;margin-bottom:0pt;list-style-type:disc"><span style="background:transparent;margin-top:0pt;margin-bottom:0pt">Thanks for your suggestion. Yes, the problem is shared values, and it resolved the issue. I really appreciate it. </span></li></ul><div><font color="#0e101a"><br></font></div><div><font color="#0e101a">Best regards,</font></div><div><font color="#0e101a">Naeem </font></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Aug 19, 2021 at 4:56 AM Iñaki Ucar <<a href="mailto:iucar@fedoraproject.org">iucar@fedoraproject.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, 19 Aug 2021 at 04:53, Dirk Eddelbuettel <<a href="mailto:edd@debian.org" target="_blank">edd@debian.org</a>> wrote:<br>
><br>
><br>
> Naeem,<br>
><br>
> I would simplify, simplify, simplify -- as 'Rcpp FAQ 7.31' reminds us all,<br>
> testing _equality_ of doubles is challenging anyway.<br>
><br>
> Besides, it may make sense to would ascertain first you get what you want in<br>
> _purely serial modes_ and then move to OpenMP.<br>
<br>
Exactly. Serial execution should be fine. I.e., if you set the number<br>
of threads to 1, then all platforms will return the same result.<br>
However, you have defined a number of variables outside the parallel<br>
region, and then you modify them inside the parallel region. OpenMP<br>
takes those variables as shared by default, which leads to the<br>
unexpected results you are getting. You need to tell OpenMP that those<br>
variables are threadprivate. Or you could just define them inside the<br>
parallel region, so that OpenMP knows that they are private without<br>
additional hints.<br>
<br>
-- <br>
Iñaki Úcar<br>
</blockquote></div>