[R] Exp and Log are much slower on Windows than on other OSes.

Don van den Bergh d@v@ndenbergh @end|ng |rom uv@@n|
Mon Jun 16 11:26:54 CEST 2025


Hi,

In an MCMC algorithm, we noticed that our C++ code runs a lot slower on Windows than on macOs or Linux (the algorithm takes ~20 seconds on Mac, and easily 2.5 minutes on Windows).
After profiling, it appeared that the main time difference was in the time spent in calls to std::exp and std::log.

To investigate this further, I used a machine that dual-boots Windows 11 and Linux.

In addition to calling the primitive functions `exp` and `log` in R, I also compared the implementation used by OpenLibm (https://github.com/JuliaMath/openlibm):

A subset of the timings are as follows.

| OS \ Method | Exp     | Exp openlibm | Log     | Log openlibm |
|---------------------------------------------------------------|
| Windows     | 43.04ms | 12.96ms      | 23.42ms | 11.35ms      |
| Linux       |  4.81ms |  9.44ms      | 5.76ms  |  9.51ms      |

These are median timings of computing the function for 1E6 elements.
Full timings can be found here: https://github.com/vandenman/expTest/blob/main/bench_exp_and_log.R. This repository also contains a mwe for the OpenLibm version (under src/e_exp.cpp).

Some observations:

1. on Windows, Base R   exp is about 8.9 times slower than on Linux.
2. on Windows, OpenLibm exp is about 3.3 times faster than Base R.
3. on Linux,   Base R   exp is about 1.9 times faster than OpenLibm.
4. for log the results are similar albeit less extreme.

Is this performance difference between Windows and other OSes known?
Is there a recommended way to fix or avoid it?
Most of our software's users (and I bet R's users as well) use Windows so this has quite an impact.

Kind regards,
Don

	[[alternative HTML version deleted]]



More information about the R-help mailing list