RcppCore / RcppParallel

High-level functions for parallel programming with Rcpp
http://rcppcore.github.io/RcppParallel/
171 stars 59 forks source link

[oneTBB backend] macOS < 10.13 with libc++ need `-fno-aligned-allocation` #219

Open barracuda156 opened 2 months ago

barracuda156 commented 2 months ago

@eddelbuettel Could we fix this? The issue arises only with OneTBB backend and Clang with libc++ on < 10.13 (that is why we did not face it earlier: legacy TBB was used until recently).

We could fix it for dependents of RcppParallel like this: https://github.com/macports/macports-ports/pull/24545/commits/627f0ddd37c8a343493f13ecab580665d294a97c

But considering a number of affected ports, it is somewhat suboptimal solution.

(To be explicit, this should not be used with gcc and libstdc++ on any macOS versions, including < 10.13. Everything works fine there, and also the flag is Clang-specific.)

barracuda156 commented 2 months ago

@kevinushey Maybe you could suggest something? We just need to ensure that the flag is passed to dependents as long as conditions are met (oneTBB, macOS < 10.13, Clang as the compiler).

@andrjohns Or maybe you could help?

kevinushey commented 2 months ago

In theory, we could add this check in the RcppParallel configure scripts here (perhaps via adding to PKG_CPPFLAGS or similar):

https://github.com/RcppCore/RcppParallel/blob/master/tools/config/configure.R

but macOS 10.13 itself is already EOL since January 2021. I'd welcome a PR but we won't have time to investigate ourselves.

barracuda156 commented 2 months ago

Thanks, I will look into that. I need to fix it at least in MacPorts (alternative will be patching about a hundred ports, and then carry the patches, that will be bad). But if I come up with a neat fix, I submit the PR.

barracuda156 commented 2 months ago

@kevinushey So not for submission here, but to fix it locally, I can just add this?

cxxflags <- "-fno-aligned-allocation"

We can patch this in conditionally on macOS version + clang being used (in MacPorts).

kevinushey commented 2 months ago

I think you might want to append it to the flags set by default from R; that is, in here:

https://github.com/RcppCore/RcppParallel/blob/1e4fc54b9eb9a5bec12676735e8265c5833a8ac3/tools/config/configure.R#L43-L45

use something like cxxflags <- paste(cxxflags, "-fno-aligned-allocation")?