Совет новичка о возможности распараллеливания с использованием графического процессора - PullRequest
1 голос
/ 07 ноября 2019

Я пытаюсь научиться распараллеливать с помощью графических процессоров. У меня есть конкретная проблема: фильтр частиц, который я хотел бы распараллелить. Дело в том, что я читал вокруг, и я действительно не понимаю, если а) это возможно и б) где начать программировать это, если это возможно. Вот минимальный код на 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, если она мне поможет.

Любой совет / рекомендация / материал для чтения мог быбыть очень полезным.

Спасибо всем заранее !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...