我正在尝试学习如何使用GPU进行并行化。我有一个特定的问题:我想并行化的粒子过滤器。问题是我一直在阅读,我真的不明白a)是否有可能,b)如有可能,从哪里开始编程。这是R中的最小代码,有助于理解我的问题:
library(NPflow)
N = 1000
mup = c(0.5,0,0.3)
S = matrix(c(1,0,0,0.5,1,0,-0.7,0.3,1),3,3,byrow=T)
X = mup + S%*%rnorm(3)
C = S%*%t(S)
mupr = matrix(rnorm(3*N),3)
Cr = lapply(rep(4,N),wishrnd,Sigma=C)
llk = mmvnpdfC(X, mean=mupr, varcovM=Cr, Log = TRUE)
代码的最后一行针对给定的1000个均值和1000个可能的协方差矩阵为向量X [3x1]计算了一个多元正态pdf。使用NPflow包,我可以使用功能mmvnpdfC,其功能与Matlab中的mvnpdf相似。确实,这与for循环类似:
llkfor = NULL
for (n in 1:N){
llkfor[n] = mvnpdf(X,mupr[,n],Cr[n])
}
当然,这个简单的代码运行得非常快,但是我的模型会大很多,问题是我是否可以使用GPU并行化先前的“ for-loop”。在我的申请中,我将要求N至少为50,000。当然,我可以与CPU并行化,但是我只能访问4个内核,因此我打算投资购买一块性能好的NVIDIA卡。
任何建议/推荐/阅读材料都将非常有用。
提前谢谢大家!