Skip to content

[R-pkg-devel] Slow down in R 4.2.x

3 messages · Johannes Ranke, Tomas Kalibera

#
Dear list,

independent of the thread on this list about slow examples on R 4.2 on windows 
I have discovered over the last few days that some of my benchmarks (look for 
t4 and t9) run by a factor of 3 slower on R 4.2.x than on R 4.1.3 [1].

This is on Linux, using my own backported R packages for R 4.2.x and locally 
compiled versions (with default configure options) of R-4-1-branch on two 
different CPUs. The results for R 4.2.1 are only slightly modulated by the use 
of different BLAS version (openblas-serial versus atlas versus lapack).

I also tested the R 4.0.4 version that is part of Debian bullseye, it is as 
fast as the locally compiled R 4.1.3.

I went through the NEWS for R 4.2.0 (because the first slow results were 
obtained using that version), but the only change I could imagine causing such 
a change is the additional check of the length of the arguments && and ||.

Any other thoughts?

Johannes

[1] https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html#results
7 days later
#
On 7/1/22 11:10, Johannes Ranke wrote:
I can reproduce slowdown in one of your tests:

library(mkin)
FOCUS_D <- subset(FOCUS_2006_D, value != 0)
SFO_SFO <- mkinmod(
 ? parent = mkinsub("SFO", "m1"),
 ? m1 = mkinsub("SFO"))
FOMC_SFO <- mkinmod(
 ? parent = mkinsub("FOMC", "m1"),
 ? m1 = mkinsub("SFO"))
DFOP_SFO <- mkinmod(
 ? parent = mkinsub("FOMC", "m1"),
 ? m1 = mkinsub("SFO"))

mmkin_bench <- function(models, datasets, error_model = "const") {
 ? mmkin(models, datasets, error_model = error_model, cores = 1, quiet = 
TRUE)
}

t4 <- system.time(mmkin_bench(list(SFO_SFO, FOMC_SFO, DFOP_SFO), 
list(FOCUS_D), error_model = "tc"))[["elapsed"]]

This is slower in R 4-devel than R 4.1 because of bug fixes in DLL info 
interface (PR#16446, r80285). "perf" tool on Linux shows extra time 
spent in R_registerSymbolEptr and R_WeakRefKey. This is because of 
repeated calls to getLoadedDLLs(), via repeated calls to 
inline::getDynLib(x$cf)[["name"]]

Perhaps one could save dll_info, once computed in mkin, alongside "cf" 
in the model, instead of re-computing it every time?

Best
Tomas
#
Am Freitag, 8. Juli 2022, 14:52:27 CEST schrieb Tomas Kalibera:
Thanks a lot for this concise analysis...
... and for this excellent suggestion - I did so and the benchmarks are better 
than ever [1].
 
Cheers

Johannes

[1] https://pkgdown.jrwb.de/mkin/articles/web_only/benchmarks.html#results