2017-05-10 7 views
2

ブートストラップを使用して大規模な分析を行いたいと思います。私は、ブートストラップの速度は、次のコードのように、並列コンピューティングを使用して増加していることを見た:計算の全体の数は、私の場合に大きくなるように、"boot"パッケージを使用したブートストラップのGPUコンピューティング

# detect number of cpu 
library(parallel) 
detectCores() 

library(boot) 
# boot function --> mean 
bt.mean <- function(dat, d){ 
    x <- dat[d] 
    m <- mean(x) 
    return(m) 
} 

# obtain confidence intervals 
# use parallel computing with 4 cpus 
x <- mtcars$mpg 
bt <- boot(x, bt.mean, R = 1000, parallel = "snow", ncpus = 4) 
quantile(bt$t, probs = c(0.025, 0.975)) 

しかし

パラレルコンピューティング(10^6 GPUコンピューティングを使用して速度をさらに向上させる方法があることをお読みください(link1link2)。 GPUコンピューティング

m <- matrix(rnorm(10^6), ncol = 1000) 
csm <- gpuR::colSums(m) 

しかし、パッケージだけで、このような行列演算など、いくつかの特定のR関数を扱うことができるように私には思える、線形代数や:あなたは簡単のようにいくつかの機能とGPUコンピューティングを使用することができますクラスター分析(link3)。 別の方法として、CUDA/C/C++/Fortranを使用して独自の関数(link4)を作成する方法があります。しかし、私はむしろR.

で解決策を探しています私の質問は、したがって、次のとおりです。

はそれがbootパッケージと他のRパッケージ(例えばquantreg)を使用して、ブートストラップ用のGPUコンピューティングを使用することは可能ですか?

+1

私は2番目のリンクに行き、 "boot"で検索すると複数のヒットが得られますか? –

+0

あなたの答えをありがとう!あなたは正しいですが、このタスクビューの1つのセクションだけがGPUコンピューティング(CPUではなく)に対処しています。残りの部分はちょうど並行計算です - あるいは、私がしなかったものを見つけましたか? – ehi

+1

gpuR :: colMeansなどのgpu対応メソッドがあるオブジェクトを渡すと、通常の関数ディスパッチでこれが処理されます。 gpuのインターフェースはかなりOS特有の傾向があり、あなたはどのような種類のハードウェアとソフトウェアがこの取り組みのターゲットとなるかを示していません。 –

答えて

1

追加のプログラミングをしなくても、GPUコンピューティングのパワーを自由に得ることはできないと思います。しかし、gpuRパッケージは良い出発点です。あなたが指摘しているように、gpuRは行列演算や線形代数のような特定のR関数しか扱えませんが、制限されていますが有用です。例えば、線形回帰は線形代数問題に簡単に定式化できます。分位回帰については、それを線形回帰として線形代数に変換するのは簡単ではありませんが、それを行うことができます。例えば、Newton-Raphsonアルゴリズムなどの数値最適化アルゴリズムを使って分位回帰を扱うことができます(ニュートンアルゴリズムは線形代数形式です)。

gpuRパッケージは、gpuのコンピューティングパワーを活用するために、すでに多くのC++プログラミングの詳細とハードウェアの詳細を隠していて、私が考えることができる限り、非常に使いやすいプログラミングスタイルを提供します。 gpuRパッケージに依存し、行列演算と線形代数(ニュートン・ラフソンなど)で問題を定式化し、プログラミングを自分で行うか、Rでニュートン・ラフソンの実装を分数回帰のために見つけることができます。少し修正する必要があります。例えば、行列の代わりにgpuMatrixを使うなどです。

関連する問題