R Matrix Operation Errors
Updated: September 3, 2020
Edit this Page via GitHub Comment by Filing an Issue Have Questions? Ask them here.R Matrix Operation Errors
Overview
There seems to be an error in the calculation of matrix dot products when using R built using the Easybuild toolchain foss/2018b
. The result of the M %*% N
operation seem to return inconsistent and varying results.
This has only been found in larger matrices- somewhere between 200 and 250 rows/columns- but it’s unknown if this is purely due to luck or if this is a problem that only happens past a certain threshold.
This is the only operation that has been tested- the accuracy of other matrix operations is still to be determined.
How to Tell if you are at Risk
Loading R modules which have a name containing foss-2018b
The module name will explicity indicate the toolchain. For example, “R/3.6.2-foss-2018b” is an R module that may be affected.
Loading any R module and then loading rstudio
If you are loading a more current R version, for example “R/4.0.2-foss-2019b” and then loading the “rstudio” module, this loads the “foss/2018b” toolchain and puts you at risk for this error
Loading additional modules
If you load any R version and then load any other additional modules which trigger a load of the “foss/2018b” toolchain you may be affected. These reloads will appear when you load those additional modules, indicating their replacement:
The following have been reloaded with a version change:
1) FFTW/3.3.8-gompi-2019b => FFTW/3.3.8-gompi-2018b
2) GCC/8.3.0 => GCC/7.3.0-2.30
3) GCCcore/8.3.0 => GCCcore/7.3.0
4) GMP/6.1.2-GCCcore-8.3.0 => GMP/6.1.2-GCCcore-7.3.0
5) OpenBLAS/0.3.7-GCC-8.3.0 => OpenBLAS/0.3.1-GCC-7.3.0-2.30
6) OpenMPI/3.1.4-GCC-8.3.0 => OpenMPI/3.1.1-GCC-7.3.0-2.30
7) SQLite/3.29.0-GCCcore-8.3.0 => SQLite/3.24.0-GCCcore-7.3.0
8) ScaLAPACK/2.0.2-gompi-2019b => ScaLAPACK/2.0.2-gompi-2018b-OpenBLAS-0.3.1
9) Tcl/8.6.9-GCCcore-8.3.0 => Tcl/8.6.8-GCCcore-7.3.0
10) XZ/5.2.4-GCCcore-8.3.0 => XZ/5.2.4-GCCcore-7.3.0
11) binutils/2.32-GCCcore-8.3.0 => binutils/2.30-GCCcore-7.3.0
12) bzip2/1.0.8-GCCcore-8.3.0 => bzip2/1.0.6-GCCcore-7.3.0
13) foss/2019b => foss/2018b
14) gompi/2019b => gompi/2018b
In this example, line 13 shows that “foss/2019b” has been reloaded with “foss/2018b”, indicating that I may now be at risk for this error.
A Test Case
You can check if your R configuration has this error by loading your modules then running some rather simple code:
M <- matrix(1:300^2, nrow = 300)
Mt <- t(M)
tmp <- M %*% Mt
max(tmp)
which(tmp == max(tmp), arr.ind = TRUE)
The expected result is:
[1] 814054500000
row col
[1,] 300 300
Any other result will indicate potential problems.
How to Check Your Code
As the full extent of the issue is uknown it is difficult to make a blanket diagnosis of individual codebases. Clearly, if you use matrix multiplication with the %*%
operator you are likely encountering this error.
One possible method for validating would be to run your same code with a newer toolchain and look for unexpected results. As there are a limited number of R and toolchain combinations this may require running with a newer R version as well.
Updated: September 3, 2020
Edit this Page via GitHub Comment by Filing an Issue Have Questions? Ask them here.