目次

統計解析ソフト R に関する情報

SAS から R への移行に関する情報

R のパッケージインストールに関する情報

rasterパッケージをインストールするには、SPというパッケージをインストールする必要があります。 また、R 2.9.1以上のバージョンであることが必要となります。

追加パッケージ(SP, raster)のインストールは以下のとおりです。

  • R コマンドで、R を起動します。
  • 次のコマンドで、sp パッケージをインストールします。
    install.packages("sp", repos="https://cran.ism.ac.jp")
  • 途中で、利用者環境のライブラリ格納用ディレクトリを作成するかどうかを聞いてきますので y とします。
    Warning in install.packages("sp", repos = "https://cran.ism.ac.jp") :
      'lib = "/opt/local/R/2.15.1-sp1/lib64/R/library"' is not writable
    Would you like to use a personal library instead?  (y/n) y
    Would you like to create a personal library
    ~/R/x86_64-unknown-linux-gnu-library/2.15
    to install packages into?  (y/n) y
  • 同様に raster パッケージをインストールします。
    install.packages("raster", repos="https://cran.ism.ac.jp")

参考 https://cran.r-project.org/web/packages/raster/index.html

rgdal パッケージは、Windows, Mac OS X用は、バイナリー版のパッケージとなっているため、Rからパッケージインストールが可能です。

この情報は古くなっています。  rgdal パッケージのコンパイル(ビルド)に必要なライブラリを OS(RedHat EL8) のパッケージとしてインストールしたことで、 R のコマンド install.packages(“rgdal”) で、インストール可能です。 最新版のライブラリ(proj-9.0.0など)を利用する場合は、それぞれのライブラリをビルドし、ホームディレクトリ配下にインストールした上で、環境設定が必要です。 — 2022/06/09

Linuxの場合(科学技術計算システムでご利用の場合)は、ソースコードからコンパイルするため、必要なライブラリ(gdal, proj)が無いと、エラーとなります。

rgdal は、これらのライブラリをRから呼び出すため、実行時もこれらのライブラリを参照します。

Windows 版のインストールに比べると少しご面倒かと思いますが、以下の手順でお試しください。

手順

  1. 必要なライブラリをダウンロードする。
  2. ダウンロードしたライブラリ(ソースコード)をコンパイルして、ホーム ディレクトリ配下にインストールする。
  3. 配置したライブラリのパスを環境変数にセットする。
  4. rgdal パッケージをインストールする。
  5. 環境設定をログイン時に行うため、設定ファイルの変更を行う。

以下、Linuxのコマンドから実行します。 ($ はコマンドプロンプトですので、入力は必要ありません)

ソースコードを展開するディレクトリを作成し、作成したディレクトリに移動

$ mkdir src
$ cd src

必要なソースコードをダウンロードする

$ wget https://github.com/OSGeo/proj.4/archive/4.9.2.tar.gz
$ wget http://download.osgeo.org/gdal/1.11.3/gdal-1.11.3.tar.gz
$ wget https://cran.ism.ac.jp/src/contrib/rgdal_1.1-3.tar.gz

ライブラリのソースコードを展開する

$ tar zxvf proj.4-4.9.2.tar.gz
$ tar zxvf gdal-1.11.3.tar.gz
$ tar zxvf rgdal_1.1-3

ライブラリ proj をコンパイルし、インストール

$ cd proj.4-4.9.2

ライブラリのインストール先ディレクトリを --prefix で指定 (/home/username の部分を自分の環境に合わせてください)

$ ./configure --prefix=/home/username/Lib/
$ make
$ make install

$ cd ..

ライブラリ gdal をコンパイルし、インストール

$ cd gdal-1.11.3

ライブラリのインストール先ディレクトリを --prefix で指定 (/home/username の部分を自分の環境に合わせてください) libexpat ライブラリは、32bit版と64bit版があるため、 --with-expat=builtin を指定します。

$ ./configure --prefix=/home/username/Lib/ --with-expat=builtin
$ make
$ make install

$ cd ..

インストールしたライブラリのPATHを設定する (/home/username の部分を自分の環境に合わせてください)

$ setenv PATH /home/username/Lib/bin:$PATH
$ setenv LD_LIBRARY_PATH /home/username/Lib/lib:$LD_LIBRARY_PATH

コマンドラインからRのパッケージをインストールする このとき、projライブラリの場所を指定する必要があります。 (/home/username の部分を自分の環境に合わせてください)

$ R CMD INSTALL --configure-args='--with-proj-lib=/home/username/Lib/lib' rgdal

実行時の環境変数をセットするために、rgdal-env というファイルをホームいディレクトリ直下に作成します。(/home/username の部分を自分の環境に合わせてください)

rgdal-env
#%Module######################################################################
##
## freeware rgdal-env Module
##
proc ModulesHelp { } {
puts stderr " freeware rgdal-env modulefile"
}
set version 0.1
set prefix /home/username/Lib
set suplib /home/username/Lib/lib
set exec_prefix ${prefix}/bin
 
prepend-path PATH ${exec_prefix}
prepend-path MANPATH ${prefix}/share/man
prepend-path LD_LIBRARY_PATH ${suplib}

環境変数を読み込むために、以下のコマンドを実行します。

module load ./rgdal-env

環境設定を解除するには、以下のコマンドを実行します。

module unload ./rgdal-env

参考 https://cran.r-project.org/web/packages/rgdal/index.html

R2jags パッケージに必要な JAGS ライブラリをインストールする必要があります。

JAGSライブラリを個人のホームディレクトリにインストールし、LD_LIBRARY_PATHなどの環境設定を行う必要がありますので、 以下の手順でインストールします。

なお、プログラムの実行は確認しておりませんので、各自で動作確認をお願いします。

手順

  1. JAGSのソースコードをダウンロード
  2. SCP(SFTP)で科学技術計算システムに転送
  3. 端末を使って、科学技術計算システムにログイン
  4. 個人用ライブラリ格納用ディレクトリの作成
  5. JAGSのソースコードを展開
  6. JAGSのコンパイルとインストール
  7. 環境設定ファイルの作成
  8. 環境設定のロードとアンロード
  9. R2jagsパッケージのインストール
  10. Rの実行

インストール手順

1.JAGSのソースコードをダウンロードする

JAGS ホームページから、ソースコード(JAGS-3.4.0.tar.gz)をダウンロードします。

 http://mcmc-jags.sourceforge.net/
 http://sourceforge.net/projects/mcmc-jags/files/latest/download?source=files

2.ダウンロードしたファイルを、科学技術計算システムに転送します。

SCP(SFTP)を使って、科学技術計算システム(scion.cc.affrc.go.jp)にファイルを転送します。 (WinSCPなど)

scion.cc.affrc.go.jpには、作業用ディレクトリ(workやsrcなど)を作成しておくとよいでしょう。

コマンドでの転送例: (作業ディレクトリ work に転送)

 scp JAGS-3.4.0.tar.gz username@scion.cc.affrc.go.jp:work/
 Password: パスワードを入力

3.端末(PuTTY)を使って、scion.cc.affrc.go.jp にログイン

SSHクライアント端末(PuTTYなど)で、ログインしてから、以下の作業を行います。

4.個人用ライブラリ格納用ディレクトリを作成

個人用のライブラリを格納するためのディレクトリを作成します。

 mkdir Lib

5.JAGSのソースコードを展開

 cd work
 tar zxvf JGAS-3.3.0.tar.gz

6.JAGSのコンパイルとインストール

以下の手順で、コンパイルとインストールを行います。

 cd ~/work/JGAS-3.3.0

以下のコマンドは、一行です。(ライブラリ格納場所を指定します。usernameの2箇所は、各自のログイン名に置き換えてください。)

 ./configure CC=icc CXX=icpc F77=ifort --with-blas="-L${MKLROOT}/lib/intel64 -lmkl_gf_lp64 -lmkl_sequential -lmkl_core -lpthread" --libdir=/home/username/Lib/lib64 --prefix=/home/username/Lib/

コンパイルします。

 make

インストールします。

 make install

7.環境設定用ファイルを作成します。

インストールしたJAGSライブラリを使用するためLD_LIBRARY_PATHなどの環境設定を行うための、設定ファイルを作成します。 (vimなどのエディタで、以下の内容のファイル(R2jags-env)を作成。usernameの箇所は、各自のログイン名に置き換えてください。)

R2jags-env
#%Module######################################################################
##
## freeware R2jags-env Module
##
proc ModulesHelp { } {
puts stderr " freeware r2jags-env modulefile"
}
set version 0.1
set prefix /home/username/Lib
set suplib /home/username/Lib/lib64
set exec_prefix ${prefix}/bin
 
prepend-path PATH ${exec_prefix}
prepend-path MANPATH ${prefix}/share/man
prepend-path LD_LIBRARY_PATH ${suplib}

8.環境設定のロード(およびアンロード)

環境設定ファイルの読み込みを行います。(R実行前に必ず読み込む。usernameの箇所は、各自のログイン名に置き換えてください。)

 module load /home/username/R2jags-env

環境設定を解除するには、module unload とします。

 module unload /home/username/R2jags-env

9.R2jagsパッケージのインストール

環境設定を読み込んだ後にRを実行して、パッケージのインストールを行います。 (端末上で環境設定を1度ロードすると、ログアウトするまで有効です)

 module load /home/username/R2jags-env
 R

Rのプロンプトから、以下のコマンドで、パッケージのインストールを実行

 > install.packages("R2jags", repos="https://cran.ism.ac.jp")
 

実行すると、rjagsパッケージも同時にインストールされます。

10.R実行

環境設定ファイルが読み込まれていない場合は、設定をロードしてRを起動します。

 module load /home/username/R2jags-env
 R

パッケージを読み込みます。

> library(R2jags)
 要求されたパッケージ coda をロード中です 
 要求されたパッケージ lattice をロード中です 
 要求されたパッケージ R2WinBUGS をロード中です 
 要求されたパッケージ boot をロード中です 

 次のパッケージを付け加えます: '‘boot’' 

The following object(s) are masked from ‘package:lattice’:

    melanoma

 要求されたパッケージ rjags をロード中です 
Linked to JAGS 3.3.0
Loaded modules: basemod,bugs
 要求されたパッケージ abind をロード中です 
 要求されたパッケージ parallel をロード中です 

 次のパッケージを付け加えます: '‘R2jags’' 

The following object(s) are masked from ‘package:coda’:

    traceplot

参考

個人環境に OpenBUGS を導入し、環境設定して利用可能です。

OpenBUGSを個人のホームディレクトリにインストールし、コマンドサーチPATHやLD_LIBRARY_PATHなどの環境設定を行う必要がありますので、 以下の手順でインストールします。

なお、プログラムの実行は確認しておりませんので、各自で動作確認をお願いします。

手順

  1. OpenBUGSのソースコードをダウンロード
  2. SCP(SFTP)で科学技術計算システムに転送
  3. 端末を使って、科学技術計算システムにログイン
  4. 個人用ライブラリ格納用ディレクトリの作成
  5. OpenBUGSのソースコードを展開
  6. OpenBUGSのコンパイルとインストール
  7. 環境設定ファイルの作成
  8. 環境設定のロードとアンロード
  9. BRugs, coda, R2WinBUGS, R2OpenBUGSなどのパッケージインストール
  10. Rの実行

インストール手順

1.OpenBUGSのソースコードをダウンロードする

注意: OpenBUGSのドメインが変更(openbugs.net)されており、多くのリンクが古いドメイン(openbugs.info)になっています。(キャッシング(金融)関係と思われるページが表示される) OpenBUGSのページ内のリンクも修正されていないことがありますのでご注意ください。

2.ダウンロードしたファイルを、科学技術計算システムに転送します。

SCP(SFTP)を使って、科学技術計算システム(scion.cc.affrc.go.jp)にファイルを転送します。 (WinSCPなど)

scion.cc.affrc.go.jpには、作業用ディレクトリ(workやsrcなど)を作成しておくとよいでしょう。

 $ mkdir -p src/OpenBUGS

コマンドでの転送例: (作業ディレクトリ src/OpenBUGS に転送)

 $ scp OpenBUGS-3.2.2.tar.gz username@scion.cc.affrc.go.jp:src/OpenBUGS/
 Password: パスワードを入力

3.端末(PuTTY)を使って、scion.cc.affrc.go.jp にログイン

SSHクライアント端末(PuTTYなど)で、ログインしてから、以下の作業を行います。

4.個人用ライブラリ格納用ディレクトリを作成

個人用のライブラリを格納するためのディレクトリを作成します。

 $ mkdir Lib

5.OpenBUGSのソースコードを展開

作業ディレクトリに移動

 $ cd src/OpenBUGS

ファイルの展開

 $ tar zxvf OpenBUGS-3.2.2.tar.gz

6.JAGSのコンパイルとインストール

以下の手順で、コンパイルとインストールを行います。(usernameの箇所は、各自のログイン名に置き換えてください)

 $ cd OpenBUGS-3.2.2

コンパイル準備(ホームディレクトリ配下にインストール)

注意: フロントエンドサーバのデフォルトのGCCバージョン(gcc 4.3.4)ではコンパイルに失敗するため、GCC 4.6.3の環境を読み込みます。

 $ module load gcc463

インストール先にホームディレクトリ配下(/home/USERNAME/Lib)を指定し、configureスクリプトを実行し、コンパイルとインストールを行います。

 $ ./configure --prefix=/home/username/Lib
 $ make
 $ make install

インストールされたファイル

 Lib
 ├── bin
 │   ├── OpenBUGS
 │   └── OpenBUGSCli
 ├── lib
 │   └── libOpenBUGS.so
 └── share
      ├── doc
      │   └── openbugs-3.2.2
      │        ├── Developer
      │        ├── Examples
      │        ├── GeoBUGS
      │        │   ├── Examples
      │        │   └── Manuals
      │        ├── Manuals
      │        └── Reliability
      │             ├── Examples
      │             └── Manuals
      └── man
           └── man1

7.環境設定用ファイルを作成します。

インストールしたOpenBUGSを使用するためコマンドサーチPATHやLD_LIBRARY_PATHなどの環境設定を行うための、設定ファイルを作成します。 (vimなどのエディタで、以下の内容のファイル(openbugs-env)を作成)

openbugs-env
#%Module######################################################################
##
## freeware openbugs-env Module
##
proc ModulesHelp { } {
puts stderr " freeware openbugs-env modulefile"
}
set version 0.1
set prefix /home/username/Lib
set suplib /home/username/Lib/lib
set exec_prefix ${prefix}/bin
 
prepend-path PATH ${exec_prefix}
prepend-path MANPATH ${prefix}/share/man
prepend-path LD_LIBRARY_PATH ${suplib}

8.環境設定のロード(およびアンロード)

環境設定ファイルの読み込みを行います。(R実行前に必ず読み込む)

 $ module load /home/username/openbugs-env

環境設定を解除するには、module unload とします。

 $ module unload /home/username/openbugs-env

9.パッケージのインストール

環境設定を読み込んだ後にRを実行して、BRugs, coda, R2WinBUGS, R2OpenBUGSなどのパッケージをインストールします。 (端末上で環境設定を1度ロードすると、ログアウトするまで有効です)

 $ module load /home/username/openbugs-env
 $ R

Rのプロンプトから、以下のコマンドで、パッケージのインストールを実行

 > install.packages("BRugs", repos="https://cran.ism.ac.jp")
 > install.packages("coda", repos="https://cran.ism.ac.jp")
 > install.packages("R2WinBUGS", repos="https://cran.ism.ac.jp")
 > install.packages("R2OpenBUGS", repos="https://cran.ism.ac.jp") 

10.R実行

環境設定ファイルが読み込まれていない場合は、設定をロードしてRを起動します。

 $ module load /home/username/openbugs-env
 $ R

パッケージを読み込みます。

> library(R2OpenBUGS)
> library(BRugs)
Welcome to BRugs connected to OpenBUGS version 3.2.2


> library(R2WinBUGS)
Loading required package: coda
Loading required package: lattice
Loading required package: boot

Attaching package: ‘boot’

The following object is masked from ‘package:lattice’:

    melanoma


Attaching package: ‘R2WinBUGS’

The following objects are masked from ‘package:R2OpenBUGS’:

    as.bugs.array, attach.all, attach.bugs, bugs, bugs.data, bugs.log,
    detach.all, detach.bugs, monitor, read.bugs, write.model

参考

R の並列化に関する情報

LinuxやMacOSでは、doMCパッケージをインストールすることで、マルチコア環境の並列化が可能です。

Windowsでは、doSNOWパッケージをインストールすることで、ループ処理を並列化することができます。

Rmpiを使った並列化も可能ですが、MPI環境(ライブラリ)のコンパイルや実行環境の設定などが必要です。

doMC

doMCパッケージを利用する場合、計算ノード(計算機)単体での並列計算(Type Aなら16並列)が可能です。

doMCパッケージのインストールは以下のとおりです。

  • R コマンドで、R を起動します。
  • 次のコマンドで、doMC パッケージをインストールします。
    install.packages("doMC", repos="https://cran.ism.ac.jp")
  • 初めてRパッケージをインストールする場合は、利用者環境のライブラリ格納用ディレクトリを作成するかどうかを聞いてきますので y とします。

参考 https://cran.r-project.org/web/packages/doMC/index.html

doSNOW

doSNOWパッケージのインストールは以下のとおりです。

  • R コマンドで、R を起動します。
  • 次のコマンドで、doSNOW パッケージをインストールします。
    install.packages("doSNOW", repos="https://cran.ism.ac.jp")

参考 https://cran.r-project.org/web/packages/doSNOW/index.html

openMPIのパスを指定しても、コンパイルに失敗してしまいます。

こちらで確認できた手順についてお知らせします。(gcc + openMPI でのコンパイルは成功しましたが、IntelやPGIでのコンパイルはできませんでした。)

なお、プログラムの実行は試しておりませんので、コンパイル後の動作確認をお願いします。

手順

  1. gcc + OpenMPI 環境設定(以下のコマンドを実行)
    $ module load openmpi
    ($ は、フロントエンドサーバのコマンドプロンプト)
  2. Rを起動し、インストールコマンドを実行します。
    > install.packages("Rmpi", repos="https://cran.ism.ac.jp", configure.args = paste("--with-mpi=/opt/local/openmpi"))
    (> は、Rのプロンプト)
  • パッケージのインストール先は、/home/username/R/x86_64-unknown-linux-gnu-library/2.15/ 配下になります。
  • 実行する場合も、OpenMPI 環境設定が必要ですので、環境設定コマンド(module load openmpi)を、最初に実行して下さい。
  • バッチによる実行の際は、バッチ用スクリプトファイルの R プログラム実行の前に、環境設定コマンドを記述してください。
    rmpi-test.sh
    #!/bin/sh
    #PBS -q small
    #PBS -l select=1:ncpus=16:mpiprocs=16
    #PBS -N rmpi
    #PBS -l walltime=1:00:00
    #PBS -V
     
    eval `/usr/bin/modulecmd bash load /opt/local/modules/sp1/openmpi`
     
    cd $PBS_O_WORKDIR
     
    R --vanilla < rmpi-sample.r > rmpi-sample-16.txt

なお、他の MPI の並列化プログラムを実行する際は、module unload openmpi で環境設定を外してください。 (正常に動作しない場合があります。)

参考 https://cran.r-project.org/web/packages/Rmpi/index.html

SGI MPT(Message Passing Toolkit)環境へのRmpiパッケージインストール方法が分かりません。

こちらで確認できた手順をお知らせします。

手順

  1. CRANから、Rmpiパッケージのソースコードをダウンロードします。
    $ cd R-Work (作業用ディレクトリに移動)
    $ wget https://cran.ism.ac.jp/src/contrib/Rmpi_0.6-3.tar.gz
    ($ は、フロントエンドサーバのコマンドプロンプト)
  2. コンパイラの環境変数をセットし、コマンドラインからインストールします。
    $ setenv CC mpicc
    $ setenv ORTED /opt/openmpi/bin/orted
    $ R CMD INSTALL --no-test-load --configure-args="--with-Rmpi-type=OPENMPI --with-Rmpi-libpath=$MPI_ROOT/lib --with-Rmpi-include=$MPI_ROOT/include" ./Rmpi_0.6-3.tar.gz
    ($ は、フロントエンドサーバのコマンドプロンプト)
  • パッケージのインストール先は、/home/username/R/x86_64-unknown-linux-gnu-library/2.15/ 配下になります。
  • OpenMPI環境でインストールした Rmpi パッケージは上書きされ、OpenMPIでの利用はできなくなります。
  • SGI MPT環境でRmpiを実行するには、実行環境の設定が必要です。(現在確認中ですが、実行するRプログラムに依存します)

SGI MPT(Message Passing Toolkit)環境で、Rmpi + doSNOW + foreachプログラムが実行できません。

Rmpi + doSNOWによる並列実行は、spawnによるプロセス生成を行う様な動作をするようです。 SGI MPT環境で、Rmpi + doSNOWを使ったプログラムを実行するには、複数の環境変数等を設定する必要があるようです。

こちらで確認できた手順をお知らせします。

ジョブスクリプトにて環境変数をセット

ジョブスクリプトで、環境変数を設定し実行します。

  • MPI_UNIVERSE=host1 16, host2 16 (ホスト名とプロセス生成可能な数)

実行コマンド

  • mpijob (SGI MPT環境では、mpijobコマンドを使ってください。mpirunは使用しない)
    • spawnではなく、最初から複数プロセスを起動する場合(doSNOWを使わない場合?)は、-up, -np オプションは不要です。
  • オプション -np 1 (起動プロセス数を 1 とします。Rmpiから Slaveプロセスが生成される)
  • R –no-save -q -f ./dosnow-mpi-test.r > dosnow-mpi-test-32.txt (Rの実行)
rmpi-mpt-test.sh
#!/bin/sh
#PBS -q large
#PBS -l select=2:ncpus=16:mpiprocs=16
#PBS -N rmpi
#PBS -l walltime=1:00:00
#PBS -V
 
cd $PBS_O_WORKDIR
 
eval `/usr/bin/modulecmd bash load R`
 
# -- Generate MPI_UNIVERSE host list from $PBS_NODEFILE
export MPI_UNIVERSE=`uniq -c $PBS_NODEFILE | awk '{ print $2 " " $1 ", " }' | tr -d "\n" | sed -e 's/, $//'`
 
mpijob -np 1 R --no-save -q -f ./dosnow-mpi-test.r > dosnow-mpi-test-32.txt

実際にテストしたRプログラム

  • 並列数の指定は、使用するコア数から 1 を引いた値(この場合 31)にしてください。
    • SGI MPT環境では、この指定が 32 だと、うまく動作しませんでした。
dosnow-mpi-test.r
# ライブラリの読み込み
library(Rmpi)
library(doSNOW)
# 並列数の指定
n_slaves <- 31
# 乱数発生数の指定
N <- 10^6
# 並列化クラスタの作成
cl <- makeCluster(n_slaves, type = "MPI")
registerDoSNOW(cl)
# 計算の実行
result <- system.time(foreach(i = 1:1000,.combine = "cbind") %dopar% {
    sum(rnorm(N))
})
# クラスタの終了
stopCluster(cl)
# 結果の表示
core.d <- c(n_slaves,result[3])
names(core.d) <- c("Slaves","ProcTime")
print(core.d)
 
# MPI終了処理
.Last <- function(){
    if (is.loaded("mpi_initialize")){
        if (mpi.comm.size(1) > 1){
            print("Please use mpi.close.Rslaves() to close slaves")
            mpi.close.Rslaves(comm=1)
        }
    }
    print("Please use mpi.quit() to quit R")
    mpi.quit()
}

※ SGI MPT環境でのRmpiプログラム実行については、Rmpiに含まれている .Rprofileが必要なケースなど、不明な点があり、現在、確認中です。

SGI MPT環境でのRmpiプログラム実行について、上記プログラム中の # MPI終了処理(mpi.close.Rslavesやmpi.quitなど)を行わない場合、以下のようなメッセージが出ます。

MPT: MPI_COMM_WORLD rank 0 has terminated without calling MPI_Finalize()
        aborting job

参考 並列化比較

doMC, doSNOW, Rmpi + doSNOWによる並列化比較

乱数をN個発生させて合計するだけのループ処理を比較した。

N <- 10^6

result <- system.time(foreach(i = 1:1000,.combine = "cbind") %dopar% {
     sum(rnorm(N))
})
SGI UV2000 Xeon E5-4650L 8cores 2.6GHz 32CPU 256coresSGI ICE X Xeon E5-2670 8cores 2.6GHz 2CPU 16coresNEC Mate Windows 8 Core i7 3770 3.4GHzHP s5350jp Windows 7 64bit Core i7 860 4cores 2.8GHzMacBook Air Mid 2011 Core i5 2557M 2cores 1.7GHz
Cores doMC doSNOW (SOCK) OpenMPI + Rmpi + doSNOW SGI MPT + Rmpi + doSNOW doSNOW doSNOW doMC
1 100.511 101.264 110.975 77.97 100.95 102.763
2 50.445 51.162 55.782 39.51 54.14 60.451
4 25.482 27.276 28.196 21.08 31.86 48.301
8 12.99 13.996 14.431 15.92 23.2 47.869
16 6.931 7.563 8.006
32 4.104 4.451 8.284 4.141 (31slaves)
64 3.247 3.605 2.276 (63slaves)
128 1.461 (127slaves)