Awesome
Download, Compile and Link OpenBLAS Library with R
Package website: https://prdm0.github.io/ropenblas
Summary
ropenblas package
<!-- ```{r, fig.align='center', echo=FALSE, out.width=219} --> <!-- knitr::include_graphics("https://raw.githubusercontent.com/prdm0/ropenblas/master/logo.png") --> <!-- ``` --> <img src="logo.png" height="230" width="200" align="right" />General aspects
The ropenblas is a package
designed to facilitate the linking of the library
OpenBLAS with the language
R. The package, which works only for
Linux systems, will automatically download the latest source code from
the OpenBLAS library and compile the
code. The package will automatically bind the language
R, through the ropenblas()
function,
to use the OpenBLAS library. Everything
will be done automatically regardless of the Linux distribution you are
using.
You can also specify older versions of the OpenBLAS library. Automatically, if no version is specified, the ropenblas package will consider the latest version of the library OpenBLAS.
Considering using the OpenBLAS library rather than the BLAS may bring extra optimizations for your code and improved computational performance for your simulations, since OpenBLAS is an optimized implementation of the library BLAS.
Some of the reasons why it is convenient to link R language to the use of BLAS optimized alternatives can be found here. Several other benchmarks that point to improved computing performance by considering the library OpenBLAS can be found on the internet.
The ropenblas package, by rcompiler()
function is also useful if you
want to install different versions of the
R language. The different versions,
specified by the user of the R
language, will be compiled and will also be linked to the
OpenBLAS library. If you want to switch
between compiled versions of the R
language, no compilation is needed anymore. This allows you to avoid
having to get your hands dirty with tedious operating system settings,
regardless of your GNU/Linux distribution. Another great use of the
rcompiler()
function is that you will not be dependent on updating
your GNU/Linux distribution repositories and you can always have the
latest version of the R language.
The use of the ropenblas package will return warnings that help you proceed with the use of the functions. If your internet is not working or if any dependency on the operating system is not present, the package will let you know.
Advantages of using ropenblas package
Some advantages of using the ropenblas library:
-
Everything is done within the R language;
-
The procedure will be the same for any Linux distribution;
-
The OpenBLAS library will be compiled and you will choose which build version to bind to R, regardless of your Linux distribution;
-
If your GNU/Linux distribution does not have updated versions of OpenBLAS, it matters little. The ropenblas package fetches the latest stable release of the OpenBLAS library development account on GitHub;
-
You do not need to know Linux well. In some distributions, it may not be so simple for a less experienced user to compile and link the library to the OpenBLAS library with the R language;
-
It is much easier to direct a person to link OpenBLAS with R saying “run
ropenblas()
within R” than asking that person to verify that an unoptimized version of BLAS installed on the system. Then you have to guide the removal of the unoptimized version of BLAS and guide it to the installation of the library OpenBLAS through the most diverse procedures depending on the GNU/Linux distribution used;
-
With the
rcompiler()
function you can build any version of R into your computer architecture, which includes the most stable version of the language; -
What is the latest stable version of R? Are you too lazy to go to the R site? Run
ropenblas::last_version_r(major = NULL)
.
Dependencies
You must install the following dependencies on your operating system (Linux):
1 - GNU Make: GNU Make utility to maintain groups of programs; <br/>
2 - GNU GCC Compiler (C and Fortran): The GNU Compiler Collection - C and Fortran frontends.
Do not worry that you will be notified if any of these dependencies are not installed.
Installation
Installing the ropenblas library is easy and will require you to have installed the devtools package. This will allow you to install the ropenblas package directly from GitHub. To install, after installing the devtools package, do:
remotes::install_github(repo = "prdm0/ropenblas", force = TRUE)
or
install.packages("ropenblas")
<!-- **Note**: If you want to access the latest features of the [**ropenblas**](https://prdm0.github.io/ropenblas/) package, install it using the first procedure. -->
Use
The ropenblas package
currently provides five functions: ropenblas()
, rcompiler()
,
last_version_openblas()
, last_version_r()
, link_again()
and
rnews()
. First of all, do:
library(ropenblas)
‘ropenblas’ function
Installing, compiling, and linking the OpenBLAS version 0.3.13 library to the R language:
<img src="https://raw.githubusercontent.com/prdm0/ropenblas/bce920c05f8daa13fc6568e6797d4b841e9d43ce/img/asciicast/ropenblas.svg" style="display: block; margin: auto;" /> <!-- **Notes**: --> <!-- - You do not have to in every section of [**R**](https://www.r-project.org/) make use of the `ropenblas()` function. Once the function is used, [**R**](https://www.r-project.org/) will always consider using the [**OpenBLAS**](https://www.openblas.net/) library in future sections. --> <!-- - [**OpenBLAS**](https://www.openblas.net/) versions tested: 0.3.0, 0.3.1, 0.3.2, 0.3.3, 0.3.4, 0.3.5, 0.3.6, 0.3.7, 0.3.8, 0.3.9, 0.3.10, 0.3.11, 0.3.12 and 0.3.13. These are the values that will be passed to `x` in `ropenblas(x)`; --> <!-- - If `x = NULL`, the latest stable version of the [**OpenBLAS**](https://www.openblas.net/) library will be compiled and linked to [**R**](https://www.r-project.org/). --> <!-- **Details** --> <!-- Your linux operating system may already be configured to use the [**OpenBLAS**](https://www.openblas.net/) library. Therefore, most likely [**R**](https://www.r-project.org/) will already be linked to this library. To find out if the [**R**](https://www.r-project.org/) language is using the [**OpenBLAS**](https://www.openblas.net/) library, at [**R**](https://www.r-project.org/), do: --> <!-- ``` --> <!-- extSoftVersion()["BLAS"] --> <!-- ``` --> <!-- If [**R**](https://www.r-project.org/) is using the [**OpenBLAS**](https://www.openblas.net/) library, something like `/any_directory/libopenblas.so` should be returned. Therefore, there should be the name **openblas** in the **s**hared **o**bject returned (file extension **.so**). --> <!-- If the `ropenblas()` function can identify that the [**R**](https://www.r-project.org/) language is using the version of [**OpenBLAS**](https://www.openblas.net/) you wish to configure, a warning message will be returned asking if you really would like to proceed with the configuration again. --> <!-- The `ropenblas()` function will download the desired version of the library [**OpenBLAS**](https://www.openblas.net/), compile and install the library in the `/opt` directory of your operational system. If the directory does not exist, it will be created so that the installation can be completed. Subsequently, files from the version of [**BLAS**](http://www.netlib.org/blas/) used in [**R**](https://www.r-project.org/) will be symbolically linked to the shared object files of the library version [**OpenBLAS**](https://www.openblas.net/) compiled and installed in `/opt`. --> <!-- You must be the operating system administrator to use this library. Therefore, do not attempt to use it without telling your system administrator. If you have the ROOT password, you will be responsible for everything you do on your operating system. --> <!-- You will not necessarily have to run `ropenblas()` on every section of [**R**](https://www.r-project.org/). Almost always it will not be necessary. However, it may be that the [**R**](https://www.r-project.org/) is updated by the operating system (GNU/Linux). Thus, it may be that in this update the [**R**](https://www.r-project.org/) unlink with the [**OpenBLAS**](https://www.openblas.net/) library. Therefore, from time to time check using the command `extSoftVersion()["BLAS"]` if the link with [**OpenBLAS**](https://www.openblas.net/) is correct, otherwise run the command `ropenblas()` again. -->‘last_version_r’ function
Given the higher version, the function will return the latest stable version of the R language. See the following example:
<!-- -->
<!-- **Note**: If `major = NULL`, the function will consider the major release number. -->‘last_version_openblas’ function
The last_version_openblas()
function automatically searches
OpenBLAS library versions in the
official GitHub project.
<!-- -->
‘rcompiler’ function
This function is responsible for compiling a version of the
R language. The x
argument is the
version of R that you want to compile.
For example, x = "4.0.4"
will compile and link R-4.0.4 version as
the major version on your system. By default (x = NULL
) will be
compiled the latest stable version of the
R.
For example, to compile the latest stable version of the R language, do:
<!-- -->
Regardless of your GNU/Linux distribution and what version of R is in your repositories, you can have the latest stable version of the R language compiled into your computer architecture.
You can use the rcompiler()
function to compile different versions of
R. For example, running
rcompiler(x = "3.6.3")
and rcompiler()
will install versions 3.6.3
and 4.0.0 on its GNU/Linux distribution, respectively. If you are in
version 4.0.0 of R and run the code
rcompiler(x = "3.6.3")
again, the function will identify the existence
of version 3.6.3 in the system and give you the option to use the
binaries that were built in a previous compilation. This avoids
unnecessarys compilations.
‘link_again’ function
The link_again
function links again the
OpenBLAS library with the
R language, being useful to correct
problems of untying the OpenBLAS
library that is common when the operating system is updated.
The function link_again
be able to link again the
R language with the
OpenBLAS library. Thus, link_again
will only make the relinkagem when in some previous section of
R the ropenblas function has been used
for the initial binding of the R
language with the OpenBLAS library.
For example, to relink the OpenBLAS library with the R language, do:
<!-- -->
If restart_r = TRUE
(default), a new section of
R is started after linking the
OpenBLAS library.
In situations where there was a disconnection due to an update of the
operating system, the ropenblas
function can be used to relink the
OpenBLAS library with the
R language, however, it will be
necessary to compile the OpenBLAS
library again. If you are interested in recompiling the
OpenBLAS library and linking with
R, use the ropenblas
function. If
the interest is to take advantage of a previous compilation of the
OpenBLAS library, the function
link_again
may be useful.
‘rnews’ function
Returns the contents of the NEWS.html file in the standard browser installed on the operating system. The NEWS.html file contains the main changes from the recently released versions of the R language. The goal is to facilitate the query by invoking it directly from the R command prompt. The rnews function is analogous to the news function of the utils package. However, using the news command in a terminal style bash shell is possible to receive a message like:
> news()
starting httpd help server ... done
Error in browseURL(url) : 'browser' must be a non-empty character string
If pdf = FALSE
(default), the
NEWS.html
file will open in the browser, otherwise
NEWS.pdf
will be opened. If dev = FALSE
(default), it will not show changes
made to the language development version. To see changes in the
development version, do dev = TRUE
.