|
1 | 1 | # RcppParallel (development version) |
2 | 2 |
|
| 3 | +* RcppParallel now provides `isProcessForkedChild()` (R) and |
| 4 | + `RcppParallel::isProcessForkedChild()` (C++), which return `TRUE` when the |
| 5 | + current process is a `fork()` of the process in which RcppParallel was |
| 6 | + loaded. |
| 7 | + Packages dispatching parallel work from within `parallel::mclapply()` (or |
| 8 | + similar) should consult this and fall back to a serial path, as TBB does |
| 9 | + not support use after fork. (#243, #244) |
| 10 | + |
| 11 | +* The TBB backend is now enabled by default on musl-based Linux |
| 12 | + distributions, such as Alpine Linux. Previously, TBB was only enabled by |
| 13 | + default with glibc-based toolchains on Linux. (#231, #263) |
| 14 | + |
3 | 15 | * The mingw cpuid guard applied to TBB's `_machine.h` header during |
4 | 16 | installation is now logged, and a warning is emitted if the header does |
5 | | - not have the expected form and the guard cannot be applied. |
| 17 | + not have the expected form and the guard cannot be applied. (#265) |
6 | 18 |
|
7 | 19 | * On Linux, the bundled TBB libraries are once again installed with versioned |
8 | 20 | names (e.g. `libtbb.so.2`) plus an unversioned `libtbb.so` symlink, matching |
9 | 21 | the layout shipped by RcppParallel 5.1.11 and earlier. The oneTBB cmake build |
10 | 22 | produces only unversioned libraries on Linux, so binaries compiled against |
11 | 23 | those releases (which recorded a load-time dependency on `libtbb.so.2`) would |
12 | 24 | otherwise fail to load after an upgrade with "libtbb.so.2: cannot open shared |
13 | | - object file". |
| 25 | + object file". (#260) |
14 | 26 |
|
15 | 27 | * Fixed linking of downstream packages using the TBB scalable allocator |
16 | 28 | on Windows, e.g. via RcppArmadillo's `ARMA_USE_TBB_ALLOC`. RcppParallel |
17 | 29 | now links the whole Rtools `tbbmalloc` archive into `RcppParallel.dll` |
18 | 30 | and re-exports its API, so that `scalable_malloc`, `scalable_free`, and |
19 | | - friends can be resolved by packages linking with `-lRcppParallel`. |
| 31 | + friends can be resolved by packages linking with `-lRcppParallel`. (#262) |
20 | 32 |
|
21 | 33 | * Fixed installation on Windows toolchains providing an older (non-oneTBB) |
22 | 34 | copy of TBB, e.g. Rtools42: the tbb stub library is now built by |
23 | 35 | re-exporting the static TBB library, rather than wrapping the oneTBB |
24 | 36 | runtime (which is unavailable there). In addition, stale stub build |
25 | | - artifacts from a different toolchain are no longer reused. |
| 37 | + artifacts from a different toolchain are no longer reused. (#258) |
26 | 38 |
|
27 | 39 | * Fixed installation on Windows systems whose Rtools does not provide TBB |
28 | 40 | (R < 4.2.0): configure no longer requires cmake there, and the tbb stub |
29 | | - library is no longer built when the TBB backend is disabled. |
| 41 | + library is no longer built when the TBB backend is disabled. (#257) |
30 | 42 |
|
31 | 43 | * RcppParallel now reports which TBB headers and libraries are installed |
32 | 44 | with the package, and from where, during package installation. In |
33 | 45 | addition, setting the `VERBOSE` environment variable to a value other |
34 | 46 | than `0` enables diagnostics describing how TBB libraries are resolved |
35 | | - and loaded when the package is loaded. |
| 47 | + and loaded when the package is loaded. (#256, #259) |
36 | 48 |
|
37 | 49 | * On Windows, RcppParallel once again loads its compatibility stub library |
38 | 50 | (`tbb.dll`) when the package is loaded. Packages linking with `-ltbb` |
39 | 51 | (e.g. via StanHeaders) record a load-time dependency on `tbb.dll`, which |
40 | 52 | can only be resolved if RcppParallel has already loaded it; with |
41 | 53 | RcppParallel 6.0.0, such packages would fail to load with "LoadLibrary |
42 | | - failure: The specified module could not be found". |
| 54 | + failure: The specified module could not be found". (#249, #250) |
43 | 55 |
|
44 | 56 | * The TBB headers installed with RcppParallel (whether from Rtools or from |
45 | 57 | the bundled copy of oneTBB) now guard against GCC's `<cpuid.h>` being |
46 | 58 | included before `<intrin.h>` on Windows (mingw). Previously, translation |
47 | 59 | units including `<cpuid.h>` before any TBB header would fail to compile, |
48 | 60 | as the `__cpuid` macro from `<cpuid.h>` conflicts with the `__cpuid()` |
49 | | - function declared by mingw's `<intrin.h>`. |
| 61 | + function declared by mingw's `<intrin.h>`. (#248, #253) |
50 | 62 |
|
51 | 63 | * When building the bundled copy of oneTBB, RcppParallel no longer searches |
52 | 64 | for hwloc, and so no longer tries to build the optional 'tbbbind' library. |
53 | 65 | This fixes build failures on machines where a static hwloc library is |
54 | | - discoverable via pkg-config, as on the CRAN macOS machines. |
| 66 | + discoverable via pkg-config, as on the CRAN macOS machines. (#247) |
55 | 67 |
|
56 | 68 | * On macOS, the bundled copy of oneTBB is now built with |
57 | 69 | `__TBB_RESUMABLE_TASKS_USE_THREADS`, avoiding use of the deprecated |
58 | | - ucontext APIs (`getcontext`, `swapcontext`, `makecontext`). |
| 70 | + ucontext APIs (`getcontext`, `swapcontext`, `makecontext`). (#247) |
59 | 71 |
|
60 | 72 |
|
61 | 73 | # RcppParallel 6.0.0 |
62 | 74 |
|
63 | | -* RcppParallel now provides `isProcessForkedChild()` (R) and |
64 | | - `RcppParallel::isProcessForkedChild()` (C++), which return `TRUE` when the |
65 | | - current process is a `fork()` of the process in which RcppParallel was |
66 | | - loaded. |
67 | | - Packages dispatching parallel work from within `parallel::mclapply()` (or |
68 | | - similar) should consult this and fall back to a serial path, as TBB does |
69 | | - not support use after fork. (#243) |
70 | | - |
71 | 75 | * RcppParallel no longer includes tbb headers as part of the RcppParallel/TBB.h |
72 | 76 | header, and instead only exposes its TBB-specific APIs for parallel work. |
73 | 77 |
|
|
0 commit comments