私はthe R package crossmatchを使用しています。これは、他のいくつかのRパッケージ(survival、nbpMatching、MASS)に依存しており、さらに多くの依存関係をインポートします。 クロスマッチパッケージは、非常に頻繁に(MCMCアルゴリズム内で)計算する必要がある、(潜在的に)大きな行列の統計的テストを実装します。実際の試験が計算される前に、私は(最後の行でcrossmatchtest()
である)、いくつかの前処理ステップを計算し、次のラッパーを書いた:Rで使用するCPUの数を制御する方法は?
# wrapper function to directly call the crossmatch test with a single matrix
# first column of the matrix must be a binary group indicator, following columns are observations
# code is modified from the documentation of the crossmatch package
crossmatchdata <- function(dat) {
# the grouping variable should be in the first column
z = dat[,1]
X = subset(dat, select = -1)
## Rank based Mahalanobis distance between each pair:
# X <- as.matrix(X)
n <- dim(X)[1]
k <- dim(X)[2]
for (j in 1:k) {
X[, j] <- rank(X[, j])
}
cv <- cov(X)
vuntied <- var(1:n)
rat <- sqrt(vuntied/diag(cv))
cv <- diag(rat) %*% cv %*% diag(rat)
out <- matrix(NA, n, n)
icov <- ginv(cv)
for (i in 1:n) {
out[i, ] <- mahalanobis(X, X[i, ], icov, inverted = TRUE)
}
dis <- out
## The cross-match test:
return(crossmatchtest(z, dis))
}
私は行列がかなり小さい場合ことに気付きました、このテストを1つのCPUのみを使用します:
library(MASS)
library(crossmatch)
source("theCodeFromAbove.R")
# create a dummy matrix
m = cbind(c(rep(0, 100), rep(1, 100)))
m = cbind(m, (matrix(runif(100), ncol=10, nrow=20, byrow=T)))
while(TRUE) { crossmatchdata(m) }
htop
で監視します。私はこの行列を高めていた場合に利用できますただし、Rは、(少なくとも、それはこのようになります)など、多くのコアを使用します。
# create a dummy matrix
m = cbind(c(rep(0, 1000), rep(1, 1000)))
m = cbind(m, (matrix(runif(100000), ncol=1000, nrow=2000, byrow=T)))
while(TRUE) { crossmatchdata(m) }
私は一般的に、この並列化で元気ですが、私はなりたいですRプロセスが使用しているコアの数を手動で制御することができます。私はoptions(mc.cores = 4)
を成功裏に試しました。
私が設定できる他の変数はありますか?あるいは、複数のコアを使用するパッケージを見つける最良の方法は何ですか?依存関係で
まず、コードのどの部分が並列化されているかを教えてください。あなたが使っている機能はどれですか?または、RにリンクされているBLAS内の並列化は?バニラ(ベース)Rは並列化されません。 – Roland
それは私の質問のポイントです:私はコードを並列化しませんでした、それはちょうど自動的に依存関係の深いどこかで発生し、私はどこを知らないのですか?私はcrossmatch、nbpMatchingとMASSのドキュメントを見て、彼らが並列化について話しているかどうかを確認しましたが、そうではありません。 編集:上記のコードは、自分のPCでこれを実行するのに十分なはずです。面白いことに、並列化はUbuntu 16.04とMacOS 10.12でのみ起こりましたが、Fedora 27では起こりませんでした。 – kartoffelsalat