GPGPUを使うにあたっての『周辺』

  • 並列処理
    • 並列処理には、基本的なことがあり、それに関するチューニングは出来合いのものにお任せすることも適切
    • 例えば、やりたい処理をベクトルや行列の計算としてやれば、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.R"
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))
}
    • ここで、呼び出されている"RgpuMatMult"(Cの関数)のソースがどこにあるのか、まだ分かっていないけれど、基本的には、このgputoolsパッケージを読み込むに当たり、"RgpuMatMult.c"もしくは"RgpuMatMult.cu"というソースファイルを読み込んで、それをshared objectとしてRの中から使えるようにしているしているのだと思う
    • .C()関数とその使い方については、CRANのexetnsionの書き方"Writing R Extensions"とか、[Rから他言語利用 http://www.okada.jp.org/RWiki/?R%A4%AB%A4%E9%C2%BE%B8%C0%B8%EC%CD%F8%CD%D1 :title=RWikiの他言語使用の記事]とかを参考に
    • Rでパッケージを作る