統計解析ソフト 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からパッケージインストールが可能です。
Linuxの場合(科学技術計算システムでご利用の場合)は、ソースコードからコンパイルするため、必要なライブラリ(gdal, proj)が無いと、エラーとなります。
rgdal は、これらのライブラリをRから呼び出すため、実行時もこれらのライブラリを参照します。
Windows 版のインストールに比べると少しご面倒かと思いますが、以下の手順でお試しください。
手順
- 必要なライブラリをダウンロードする。
- ダウンロードしたライブラリ(ソースコード)をコンパイルして、ホーム ディレクトリ配下にインストールする。
- 配置したライブラリのパスを環境変数にセットする。
- rgdal パッケージをインストールする。
- 環境設定をログイン時に行うため、設定ファイルの変更を行う。
以下、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
R2jags パッケージに必要な JAGS ライブラリをインストールする必要があります。
JAGSライブラリを個人のホームディレクトリにインストールし、LD_LIBRARY_PATHなどの環境設定を行う必要がありますので、 以下の手順でインストールします。
なお、プログラムの実行は確認しておりませんので、各自で動作確認をお願いします。
手順
- JAGSのソースコードをダウンロード
- SCP(SFTP)で科学技術計算システムに転送
- 端末を使って、科学技術計算システムにログイン
- 個人用ライブラリ格納用ディレクトリの作成
- JAGSのソースコードを展開
- JAGSのコンパイルとインストール
- 環境設定ファイルの作成
- 環境設定のロードとアンロード
- R2jagsパッケージのインストール
- 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などの環境設定を行う必要がありますので、 以下の手順でインストールします。
なお、プログラムの実行は確認しておりませんので、各自で動作確認をお願いします。
手順
- OpenBUGSのソースコードをダウンロード
- SCP(SFTP)で科学技術計算システムに転送
- 端末を使って、科学技術計算システムにログイン
- 個人用ライブラリ格納用ディレクトリの作成
- OpenBUGSのソースコードを展開
- OpenBUGSのコンパイルとインストール
- 環境設定ファイルの作成
- 環境設定のロードとアンロード
- BRugs, coda, R2WinBUGS, R2OpenBUGSなどのパッケージインストール
- Rの実行
インストール手順
1.OpenBUGSのソースコードをダウンロードする
- OpenBUGS Home Page
注意: OpenBUGSのドメインが変更(openbugs.net)されており、多くのリンクが古いドメイン(openbugs.info)になっています。(キャッシング(金融)関係と思われるページが表示される) OpenBUGSのページ内のリンクも修正されていないことがありますのでご注意ください。
- Download Page
- OpenBUGS-3.2.2.tar.gz をダウンロード
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でのコンパイルはできませんでした。)
なお、プログラムの実行は試しておりませんので、コンパイル後の動作確認をお願いします。
手順
- gcc + OpenMPI 環境設定(以下のコマンドを実行)
$ module load openmpi ($ は、フロントエンドサーバのコマンドプロンプト)
- 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 で環境設定を外してください。 (正常に動作しない場合があります。)
SGI MPT(Message Passing Toolkit)環境へのRmpiパッケージインストール方法が分かりません。
こちらで確認できた手順をお知らせします。
手順
- CRANから、Rmpiパッケージのソースコードをダウンロードします。
$ cd R-Work (作業用ディレクトリに移動) $ wget https://cran.ism.ac.jp/src/contrib/Rmpi_0.6-3.tar.gz ($ は、フロントエンドサーバのコマンドプロンプト)
- コンパイラの環境変数をセットし、コマンドラインからインストールします。
$ 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 256cores | SGI ICE X Xeon E5-2670 8cores 2.6GHz 2CPU 16cores | NEC Mate Windows 8 Core i7 3770 3.4GHz | HP s5350jp Windows 7 64bit Core i7 860 4cores 2.8GHz | MacBook 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) |
- 各1回の実行による参考値である。
- ICE X(OpenMPI + Rmpi+doSNOW)は、複数ノードでのOpenMPI実行環境が未整備のため、16coreを超える実行は不可(値は増加)
- ICE X(SGI MPT + Rmpi+doSNOW)は、親プロセスに1コア割り当てたため、並列数はそれぞれ1少ない(N_Cores - 1 = N_Slaves)
- Core i7は、4core 8スレッド、Core i5は、2core 4スレッドで、それ以上の性能向上は見られない
- NEC Core i7 3.4GHz は、動作周波数が高いため、他と比較して処理速度が速い
- Nの大きさやループ長等によるが、上記の計算では、16並列以上の性能向上は、極僅かである
- この例では、実効効率としては、8並列くらいまでが良いと思われる