- 並列処理
- 並列処理には、基本的なことがあり、それに関するチューニングは出来合いのものにお任せすることも適切
- 例えば、やりたい処理をベクトルや行列の計算としてやれば、CUBLASとかにお任せすればよい
- 2分岐木方式でまとめ上げていく、とか
- CUBLAS
- CUBLASはBLASをCUDAで動くように実装したライブラリで、CUDAドライバを直接操作することなしにGPUによる高速な演算を利用するように作られたもの
- これに関する記事はこちら
- R+GPU
- RでGPGPUをするには、R+GPUもある
- R+GPUの作りは、そのサイトでも述べている通り、Rの関数hogeについて、gpuhogeという関数を打つだけで(それ以外の引数の取り扱いなどはすべて変えずに)、GPUとCUDAの動いているパソコン上でGPGPU並列処理をしてくれることを目指している
- R+GPUが提供しているRのpackage "gputools"をダウンロードして来て、その中身を見ると".C()"関数を用いて、定義してやった関数"RgpuMatMult"(GPGPU/CUDAの関数と思われる)を呼び出していることが分かる。例は以下のような感じ
gpuMatMult <- function(a, b)
{
a <- as.matrix(a)
b <- as.matrix(b)
results <- .C("RgpuMatMult", PACKAGE = "gputools",
as.single(a), as.integer(nrow(a)), as.integer(ncol(a)),
as.single(b), as.integer(nrow(b)), as.integer(ncol(b)),
output = single(nrow(a)*ncol(b)))
matrix(results$output, nrow(a), ncol(b))
}