R

R ist eine Programmiersprache und Softwareumgebung für statistiche Rechnungen und Graphiken.

Batch-Jobs starten

Soroban

Das Programm kann direkt aufgerufen werden, ohne das ein Modul vorher geladen werden muss. Es gibt allerdings eine weitere Version, die gegen die optimierten mathematischen Routinen von Intels Math Kernel Library oder MKL kompiliert wurde und die für bestimmte Operationen wesentlich schneller sein soll. Um die MKL-fähige Version zu verwenden, benutzt man

module load r

Ein einfaches Beispiel-Skript, das an Slurm geschickt werden kann, könnte folgendermaßen aussehen:

#!/bin/bash

#SBATCH --job-name=my_R_job
#SBATCH --mem=2048
#SBATCH --time=1-12:00:00

module load r
Rscript script.r arg1 arg2

Mit dem R-Paket Rmpi können parallele Jobs gestartet werden. In diesem Fall muss die Anzahl der Tasks durch den Slurm-Parameter --ntasks angegeben werden. Allerdings sollte die Anzahl der zu startenden Prozesse, die an mpirun mit der Option -np lediglich 1 sein:

#!/bin/bash

#SBATCH --job-name=my_Rmpi_job
#SBATCH --mem=2048
#SBATCH --ntasks=8

module add r openmpi/intel
mpirun -np 1 R --no-save < mpi_job.r

Pakete installieren

Nutzer können Pakete selbst installieren, indem sie R starten und dann folgendes Kommando eingeben:

install.packages("somepackage")

Nutzer, die eigene Paket bauen möchten und dabei die MKL verwenden wollen, müssen die entsprechenden Module laden:

module load intel/compiler intel/mkl

und dann in der Datei Makevars die Definition von PKG_LIBS um die passende Umgebungsvariable ergänzen:

PKG_LIBS = `$(R_HOME)/bin/Rscript -e "Rcpp:::LdFlags()"` -l$(BLASLIB)

Andere mathematischen Bibliotheken verwenden

Die Version von R, die ohne module zur Verfügen steht, wird regelmäßig aktualisiert und entspricht normalerweise die neueste Version, die verfügbar ist. Standardmäßig ist diese Version dynamisch gegen OpenBLAS gelinkt. In manchen Fällen kann es aber sinnvoll sein, für Operationen der linearen Algebra eine andere Bibliothek zu verwenden.

Dies kann erreicht werden, indem die gewünschte Bibliothek vor allen anderen geladen wird. Dazu kann man die Umgebungsvariable LD_PRELOAD verwenden, z.B.:

module add intel/compiler/64/16.0
export LD_PRELOAD=${MKLROOT}/lib/intel64/libmkl_rt.so
Rscript myscript.r