Andre@G||||bert @end|ng |rom chu-rouen@|r
Fri Aug 27 13:44:56 CEST 2021
Dear R developers,
R makes some functions interruptible, thanks to a call to R_CheckUserInterrupt. Simple arithmetic operations can be interrupted avoiding freezes when using huge arrays (e.g. length > 1 billion).
But many operations, such as matrix multiplication, are not interruptible. I estimated that a multiplication of two 10000�10000 square matrices would freeze R for at least 7 days on my computer, unless I kill the process.
I found an old commit that deleted the calls to R_CheckUserInterrupt in many basic operations (https://github.com/wch/r-source/commit/b99cd362a65012335a853d954cbeb1c782e6ae37)
Why were they deleted ?
First hypothesis : this slowed down the code too much, because it was done suboptimally, with an integer division (high latency CPU operation) at each iteration.
Second hypothesis : this introduced bugs, such as memory leaks, in code that did not handle interruptions gracefully.
If the first hypothesis is correct, I can write much better code, with almost zero penalty, using R_ITERATE_CHECK (in R_ext/Itermacros.h) and a new macro I wrote: ITERATE_BY_REGION_CHECK.
That would make more operations interruptible and would even provide performances improvements in loops that were not optimized for ALTREPs.
Are you interested in patches?
PS: the slow integer division is actually not very slow with recent GCC versions, because this compiler is smart enough to replace it by a multiplication and a shift because the divisor is known at compile time. Older compilers may not be that smart.
[[alternative HTML version deleted]]
More information about the R-devel