Thanks Val. I don�t think it�s a BiocNeighbors thing, as it doesn�t try to customize the compilation flags or have its own Makevars. Moreover, the �-O3 -mtune=native -mtune=generic� flags seem to show up on all of my packages containing C++11 code. Some cursory checks of other packages suggest that the correct flags (�-O2 -mtune=generic�) are used for C++98 code.
-A > On 17 Dec 2018, at 17:47, Obenchain, Valerie > <valerie.obench...@roswellpark.org> wrote: > > Hi Aaron, > > The only compilation flags that are different for tokay1 (release) and > tokay2 (devel) are C++14 flags. BiocNeighbors is not using C++14 but > C++11 so I think the changes we discussed previously actually don't > apply to your case. > > All compilation flags we use are listed at the top of the build report, > e.g., for tokay2: > > https://www.bioconductor.org/checkResults/devel/bioc-LATEST/tokay2-NodeInfo.html > > <https://www.bioconductor.org/checkResults/devel/bioc-LATEST/tokay2-NodeInfo.html> > > I can look into this further but right now I'm not sure where the '-O3 > -march=native -mtune=native' is coming from in the check output for > BiocNeighbors. We don't use 'native' on the builders for build/check or > for creating binaries. > > Herve might have more insight on this. > > Val > > > > > > > > On 12/15/18 10:56 PM, Aaron Lun wrote: >> Sometime between 6-18 November, BiocNeighbors� BioC-devel builds began >> failing on Windows 64-bit, and have continued to fail since: >> >> http://bioconductor.org/checkResults/devel/bioc-LATEST/BiocNeighbors/ >> <http://bioconductor.org/checkResults/devel/bioc-LATEST/BiocNeighbors/> >> <http://bioconductor.org/checkResults/devel/bioc-LATEST/BiocNeighbors/ >> <http://bioconductor.org/checkResults/devel/bioc-LATEST/BiocNeighbors/>> >> >> The most interesting part is the nature of the failures. They are not >> segmentation faults but rather �incorrect� output in the unit tests: >> >> - BiocNeighbors uses the Annoy algorithm for approximate nearest neighbor >> search, which is provided as a header-only C++ library in the RcppAnnoy >> package. >> >> - I have compiled the BiocNeighhbors C++ code with an �#include" for these >> libraries to use the Annoy routines. For testing, I compared the output of >> my C++ code to the output of the code in the RcppAnnoy package. >> >> - It is these tests that are failing (i.e., the output does not match up) >> during CHECK on Windows 64-bit only, despite the fact that the same library >> is being �#include�d in both the BiocNeighbors and RcppAnnoy sources! >> >> What makes this particularly intriguing is that the differences between >> BiocNeighbors and RcppAnnoy are very minor. Less than 1% of the neighbor >> identities differ, and only for some of the scenarios, so it�s not an >> obvious bug that would be changing the output en masse. Now, the package >> also uses/tests Annoy in BioC-release but builds fine on tokay1: >> >> http://bioconductor.org/checkResults/release/bioc-LATEST/BiocNeighbors/ >> <http://bioconductor.org/checkResults/release/bioc-LATEST/BiocNeighbors/> >> <http://bioconductor.org/checkResults/release/bioc-LATEST/BiocNeighbors/ >> <http://bioconductor.org/checkResults/release/bioc-LATEST/BiocNeighbors/>> >> >> The major difference between the Bioc-release/devel builds is the >> compilation flags, which have changed from �-O2 -mtune=generic� to �-O3 >> -march=native -mtune=native� in tokay2. I am told (thanks Val) that the >> timing of this change is consistent with the start of the BiocNeighbors >> build failures on tokay2. I would guess that RcppAnnoy is also compiled with >> �-O2 -mtune=generic� on the CRAN build systems, introducing differences in >> optimization levels between the BiocNeighbors and RcppAnnoy binaries. These >> could be responsible for the discrepancies in the search results. >> >> I was able to reproduce this on my Unix cluster (gcc 6.5.0) where setting >> �-march=native� with either �-O3� or �-O2� caused a difference in the >> calculations. After much trial and error, I eventually narrowed this down to >> the �-mfma� flag, which seems to change the precision of multiply-and-add >> operations and thus the search results. This occurs even when AVX support is >> turned off; I guess the compiler tries to be smart if it detects you are >> doing some kind of simultaneous multiply and addition, which is a pretty >> common thing to do when computing Euclidean distances. >> >> In summary: can we not use �-march=native� on tokay2? (Val, I know we >> discussed this, but whatever changes you made to the compilation flags don�t >> seem to have propagated to the build machines.) As the case study with >> BiocNeighbors shows, this leads to inconsistencies between the CRAN and >> BioC-devel binaries for the same code, which unnecessarily complicates >> downstream usage and unit tests. I also wonder how binaries specialized for >> tokay2�s architecture would behave on other CPUs with different instruction >> sets, if they would run at all. >> >> Cheers, >> >> Aaron >> [[alternative HTML version deleted]] >> >> _______________________________________________ >> Bioc-devel@r-project.org <mailto:Bioc-devel@r-project.org> mailing list >> https://stat.ethz.ch/mailman/listinfo/bioc-devel >> <https://stat.ethz.ch/mailman/listinfo/bioc-devel> >> > > > > This email message may contain legally privileged and/or confidential > information. If you are not the intended recipient(s), or the employee or > agent responsible for the delivery of this message to the intended > recipient(s), you are hereby notified that any disclosure, copying, > distribution, or use of this email message is prohibited. If you have > received this message in error, please notify the sender immediately by > e-mail and delete this email message from your computer. Thank you. [[alternative HTML version deleted]]
_______________________________________________ Bioc-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/bioc-devel