Я пытаюсь научиться распараллеливать с помощью графических процессоров. У меня есть конкретная проблема: фильтр частиц, который я хотел бы распараллелить. Дело в том, что я читал вокруг, и я действительно не понимаю, если а) это возможно и б) где начать программировать это, если это возможно. Вот минимальный код на 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)
В последней строке кода вычисляется многомерный нормальный pdf для вектора X [3x1], учитывая 1000 возможных средних и 1000 возможных ковариацийматрицы. Используя пакет NPflow, я могу использовать функцию mmvnpdfC, которая работает аналогично mvnpdf в Matlab. Действительно, это похоже на выполнение цикла for:
llkfor = NULL
for (n in 1:N){
llkfor[n] = mvnpdf(X,mupr[,n],Cr[n])
}
Конечно, этот простой код выполняется довольно быстро, но моя модель будет значительно больше, и вопрос будет в том, смогу ли я распараллелить предыдущее 'цикл for с использованием графического процессора. В моем приложении я буду требовать, чтобы N было не менее 50 000. Конечно, я могу параллельно работать с процессором, но у меня есть доступ только к 4 ядрам, поэтому я планировал инвестировать в хорошую карту NVIDIA, если она мне поможет.
Любой совет / рекомендация / материал для чтения мог быбыть очень полезным.
Спасибо всем заранее !!