[R-SIG-Mac] [External] Rmpfr crashes on Mac

Simon Urbanek @|mon@urb@nek @end|ng |rom R-project@org
Mon Nov 29 22:02:52 CET 2021


To sum up there are two issues one of which is intentional and the other one is not:

- gmp is using optimized instructions and we are currently targeting SandyBridge architecture as the oldest supported Mac. That works for Macs in about the last decade so seems like a reasonable compromise. It does not work on Rosetta2 so M1 uses should use native R instead.  This will fail on mpfr(-50, 200) alone (or any gmp call, really) if your Mac is so old that it doesn't even support the SB instruction set you will need to compile gmp from sources (see below).

- RStudio see seems to trigger another issues inside mpfr proper isolated by Kevin (thanks, Kevin!) to a call of str() on mpfr object (the original that started this thread). That one is not intentional as it seems to break even on older SB machines. I suspect it comes from mpfr itself as opposed to gmp which we know uses assembly optimizations. From what I can see mpfr re-uses gmp's detection of CPU targets so I have re-built mpfr to catch up with gmp so I would like to ask those that have seen this issue, i.e. where mpfr() call works but str() crashes to download the latest package binary for R 4.1.x and report if that fixed the issue. It should if my theory is correct, otherwise we need to dig deeper.

So for the latter to be specific run exactly:
install.packages("Rmpfr", repo="https://mac.R-project.org")
then re-start and test.

Now if you are on such an ancient Mac that even gmp doesn't work then you may have to recompile gmp and mpfr yourself. Obviously if you know what you are doing, you can fetch the sources, you have to build gmp first and then mpfr (you need both as mpfr relies on gmp and gmp defines the optimizations used). You can also try to use either Homebrew (brew install mpfr) or recipes (https://github.com/R-macos/recipes), but make sure you really re-compile and not use binaries/bottles.  Once you compile the libraries, re-install gmp and Rmpfr packages from sources (type='source' in install.packages).

Cheers,
Simon



> On Nov 30, 2021, at 12:37 AM, Göran Broström <goran.brostrom using umu.se> wrote:
> 
> I have the oldest MacBook Pro: mid 2010. Is it too early to upgrade to an M1Max one, for R purposes? Anyway, I get (this is R, but RStudio aborts too):
> 
> > x1 <- mpfr(-50, 200)
> 
> *** caught illegal operation ***
> address 0x10fd8c23b, cause 'illegal opcode'
> 
> Traceback:
> 1: mpfr.default(-50, 200)
> 2: mpfr(-50, 200)
> 
> General info:
> 
> 
> > R.version
>               _
> platform       x86_64-apple-darwin17.0
> arch           x86_64
> os             darwin17.0
> system         x86_64, darwin17.0
> status
> major          4
> minor          1.2
> year           2021
> month          11
> day            01
> svn rev        81115
> language       R
> version.string R version 4.1.2 (2021-11-01)
> nickname       Bird Hippie
> >
> 
> > sessionInfo()
> R version 4.1.2 (2021-11-01)
> Platform: x86_64-apple-darwin17.0 (64-bit)
> Running under: macOS High Sierra 10.13.6
> 
> Matrix products: default
> BLAS: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRblas.0.dylib
> LAPACK: /Library/Frameworks/R.framework/Versions/4.1/Resources/lib/libRlapack.dylib
> 
> locale:
> [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
> 
> attached base packages:
> [1] stats     graphics  grDevices utils     datasets  methods   base
> 
> loaded via a namespace (and not attached):
> [1] compiler_4.1.2
> 
> > system("system_profiler SPHardwareDataType SPSoftwareDataType")
> Hardware:
> 
>    Hardware Overview:
> 
>      Model Name: MacBook Pro
>      Model Identifier: MacBookPro6,2
>      Processor Name: Intel Core i7
>      Processor Speed: 2,66 GHz
>      Number of Processors: 1
>      Total Number of Cores: 2
>      L2 Cache (per Core): 256 KB
>      L3 Cache: 4 MB
>      Memory: 8 GB
>      Boot ROM Version: 99.0.0.0.0
>      SMC Version (system): 1.58f17
>      Serial Number (system): W8042281AGZ
>      Hardware UUID: A1D55A7E-9CD1-59BD-AB78-E5B2518D4940
>      Sudden Motion Sensor:
>          State: Enabled
> 
> Software:
> 
>    System Software Overview:
> 
>      System Version: macOS 10.13.6 (17G14042)
>      Kernel Version: Darwin 17.7.0
>      Boot Volume: Samsung SSD
>      Boot Mode: Normal
>      Computer Name: MBP (2)
>      User Name: Göran Broström (gobr0002)
>      Secure Virtual Memory: Enabled
>      System Integrity Protection: Enabled
>      Time since boot: 25 minutes
> 
> 
> 
> 
> Den 2021-11-29 kl. 06:43, skrev Kevin Ushey:
>> Okay, I've reproduced the crash on my 2013 Intel MacBook Pro. In this case,
>> the issue reproduces more readily because RStudio is calling str() behind
>> the scenes (which is the cause of the crash in this case). So, a plain R
>> reproducible example:
>> library(Rmpfr)
>> x <- mpfr(-50.1, 200)
>> str(x)
>> and I see:
>>> str(x)
>> Class 'mpfr' [package "Rmpfr"] of length 1 and precision 200
>>  *** caught illegal operation ***
>> address 0x112833ed5, cause 'illegal opcode'
>> Traceback:
>>  1: .mpfr2str(x, digits, maybe.full = maybe.full, base = base)
>>  2: formatMpfr(object, digits = digits.d, drop0trailing = drop0trailing,
>>   ...)
>>  3: str.mpfr(x)
>>  4: str(x)
>> From lldb:
>> * thread #1, queue = 'com.apple.main-thread', stop reason =
>> EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
>>     frame #0: 0x0000000107ec7ed5 Rmpfr.so`mpfr_get_str_aux + 165
>> Rmpfr.so`mpfr_get_str_aux:
>> ->  0x107ec7ed5 <+165>: adcxq  %rsi, %rcx
>>     0x107ec7edb <+171>: movq   %r10, %rdi
>>     0x107ec7ede <+174>: movq   %r8, %rsi
>>     0x107ec7ee1 <+177>: movq   %r10, %rbx
>> and relevant part of the backtrace:
>> (lldb) bt
>> * thread #1, queue = 'com.apple.main-thread', stop reason =
>> EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
>>   * frame #0: 0x0000000107ec7ed5 Rmpfr.so`mpfr_get_str_aux + 165
>>     frame #1: 0x0000000107ec78da Rmpfr.so`mpfr_get_str + 2890
>>     frame #2: 0x0000000107eb9c9e Rmpfr.so`mpfr2str(x=0x00000001053ed768,
>> digits=<unavailable>, maybeFull=<unavailable>, base=<unavailable>) at
>> convert.c:608:2 [opt]
>>     < ... >
>> If I understand correctly, 'adcx' was introduced with Broadwell CPUs (so,
>> October 2014) and so that could explain why I'm seeing this crash. It'd be
>> helpful if others could try to verify with newer / older macOS machines,
>> though.
>>> sessionInfo()
>> R version 4.1.2 (2021-11-01)
>> Platform: x86_64-apple-darwin17.0 (64-bit)
>> Running under: macOS Big Sur 10.16
>> Best,
>> Kevin
>> On Sun, Nov 28, 2021 at 6:22 PM Simon Urbanek <simon.urbanek using r-project.org>
>> wrote:
>>> Kevin,
>>> 
>>> that is a different story, yes, Rosetta2 is incomplete - the advice on M1
>>> is to use native R.
>>> 
>>> Cheers,
>>> Simon
>>> 
>>> 
>>>> On Nov 29, 2021, at 12:30 PM, Kevin Ushey <kevinushey using gmail.com> wrote:
>>>> 
>>>> I can reproduce something similar on my M1 macOS machine, when using the
>>>> x86_64 build of R. I see:
>>>> 
>>>>> x1 <- mpfr(-50, 200)
>>>> *** caught illegal operation ***
>>>> address 0x10c5f623b, cause 'illegal opcode'
>>>> 
>>>> This is with the binary of Rmpfr 0.8-7 as from CRAN, with R 4.1.2. Here's
>>>> what LLDB says:
>>>> 
>>>> * thread #1, queue = 'com.apple.main-thread', stop reason =
>>>> EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
>>>>    frame #0: 0x000000010f69c23b Rmpfr.so`mpfr_set_d + 43
>>>> Rmpfr.so`mpfr_set_d:
>>>> ->  0x10f69c23b <+43>: vucomisd %xmm0, %xmm0
>>>>    0x10f69c23f <+47>: jp     0x10f69c39a               ; <+394>
>>>>    0x10f69c245 <+53>: vpxor  %xmm1, %xmm1, %xmm1
>>>>    0x10f69c249 <+57>: vucomisd %xmm1, %xmm0
>>>> 
>>>> And the relevant part of the stack trace:
>>>> 
>>>> (lldb) bt
>>>> * thread #1, queue = 'com.apple.main-thread', stop reason =
>>>> EXC_BAD_INSTRUCTION (code=EXC_I386_INVOP, subcode=0x0)
>>>>  * frame #0: 0x000000010f69c23b Rmpfr.so`mpfr_set_d + 43
>>>>    frame #1: 0x000000010f6809d3 Rmpfr.so`d2mpfr1_(x=-50,
>>>> i_prec=<unavailable>, rnd=MPFR_RNDN) at convert.c:129:5 [opt]
>>>>    frame #2: 0x000000010f680eb0 Rmpfr.so`d2mpfr1_list(x=<unavailable>,
>>>> prec=<unavailable>, rnd_mode=<unavailable>) at convert.c:186:29 [opt]
>>>> 
>>>> At least for my case, my guess is that the 'vucomisd' instruction isn't
>>>> available via Apple's Rosetta emulation. It's possible users with older
>>>> macOS machines not supporting AVX instructions could see this, as well?
>>>> 
>>>> Best,
>>>> Kevin
>>>> 
>>>> On Sun, Nov 28, 2021 at 9:54 AM Richard M. Heiberger <rmh using temple.edu>
>>> wrote:
>>>> 
>>>>> Works normally in R-4.1.2 with Rmpfr_0.8-7 on Macintosh
>>>>> aarch64-apple-darwin20
>>>>> I am running inside Emacs using ESS
>>>>> 
>>>>>> packageVersion("Rmpfr")
>>>>> [1] ‘0.8.7’
>>>>>> library(Rmpfr)
>>>>> Loading required package: gmp
>>>>> 
>>>>> Attaching package: ‘gmp’
>>>>> 
>>>>> The following objects are masked from ‘package:base’:
>>>>> 
>>>>>    %*%, apply, crossprod, matrix, tcrossprod
>>>>> 
>>>>> C code of R package 'Rmpfr': GMP using 64 bits per limb
>>>>> 
>>>>> 
>>>>> Attaching package: ‘Rmpfr’
>>>>> 
>>>>> The following object is masked from ‘package:gmp’:
>>>>> 
>>>>>    outer
>>>>> 
>>>>> The following objects are masked from ‘package:stats’:
>>>>> 
>>>>>    dbinom, dgamma, dnbinom, dnorm, dpois, dt, pnorm
>>>>> 
>>>>> The following objects are masked from ‘package:base’:
>>>>> 
>>>>>    cbind, pmax, pmin, rbind
>>>>> 
>>>>>> x1 <- mpfr(-50, 200)
>>>>>> x1
>>>>> 1 'mpfr' number of precision  200   bits
>>>>> [1] -50
>>>>>> x2 <- mpfr(-50.1, 200)
>>>>>> x2
>>>>> 1 'mpfr' number of precision  200   bits
>>>>> [1] -50.10000000000000142108547152020037174224853515625
>>>>>> version
>>>>>               _
>>>>> platform       aarch64-apple-darwin20
>>>>> arch           aarch64
>>>>> os             darwin20
>>>>> system         aarch64, darwin20
>>>>> status
>>>>> major          4
>>>>> minor          1.2
>>>>> year           2021
>>>>> month          11
>>>>> day            01
>>>>> svn rev        81115
>>>>> language       R
>>>>> version.string R version 4.1.2 (2021-11-01)
>>>>> nickname       Bird Hippie
>>>>>> 
>>>>> 
>>>>>> On Nov 27, 2021, at 15:46, Dev Chakraborty <dpc10ster using gmail.com>
>>> wrote:
>>>>>> 
>>>>>> I used package Rmpfr ca. 2017 and it worked fine. The latest version
>>>>>> (0.8-7) causes R (running under RStudio) to crash. A simple example is:
>>>>>> 
>>>>>> library(Rmpfr)
>>>>>> x1 <- mpfr(-50, 200)
>>>>>> x2 <- mpfr(-50.1, 200)
>>>>>> 
>>>>>> Which gives the message:
>>>>>> 
>>>>>> R Session Aborted
>>>>>> R encountered a fatal error
>>>>>> The session was terminated
>>>>>> Start New Session
>>>>>> 
>>>>>> I am using R version 4.1.1 on a Mac running MacOS 12.0.1. and an older
>>>>> iMac
>>>>>> running 10.15.7. The problem occurs with both machines.
>>>>>> 
>>>>>> When I install from the CRAN archive file  Rmpfr_0.6-1.tar.gz (the
>>>>> version
>>>>>> of the package around 2017, corresponding to the last time I used it)
>>> the
>>>>>> problem goes away.
>>>>>> 
>>>>>>      [[alternative HTML version deleted]]
>>>>>> 
>>>>>> _______________________________________________
>>>>>> R-SIG-Mac mailing list
>>>>>> R-SIG-Mac using r-project.org
>>>>>> 
>>>>> 
>>> https://nam10.safelinks.protection.outlook.com/?url=https%3A%2F%2Fstat.ethz.ch%2Fmailman%2Flistinfo%2Fr-sig-mac&data=04%7C01%7Crmh%40temple.edu%7C3aabc743f322409d6fa308d9b259a7bb%7C716e81efb52244738e3110bd02ccf6e5%7C0%7C0%7C637736920545174898%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C2000&sdata=pNPM8x8q1%2BQxq4QevSbfjlcO44vDVEyUvsRlfDBfgBo%3D&reserved=0
>>>>> 
>>>>> _______________________________________________
>>>>> R-SIG-Mac mailing list
>>>>> R-SIG-Mac using r-project.org
>>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>>>> 
>>>> 
>>>>       [[alternative HTML version deleted]]
>>>> 
>>>> _______________________________________________
>>>> R-SIG-Mac mailing list
>>>> R-SIG-Mac using r-project.org
>>>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>>>> 
>>> 
>>> 
>> 	[[alternative HTML version deleted]]
>> _______________________________________________
>> R-SIG-Mac mailing list
>> R-SIG-Mac using r-project.org
>> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
>> 
> 
> _______________________________________________
> R-SIG-Mac mailing list
> R-SIG-Mac using r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-mac
> 



More information about the R-SIG-Mac mailing list