Возможно ли использовать параллельные вычисления на GPU в R для uniroot (или эквивалент)? - PullRequest
1 голос
/ 27 октября 2019

Я пытаюсь ускорить следующий код в R, который вызывает uniroot в 1000 различных случаях, используя mapply (по одному на каждую форму уравнения с каждым элементом векторов a, ce и w - см. Ниже).

Чтобы ускорить выполнение этого кода, я хотел бы использовать свой графический процессор (карту NVIDIA) для распараллеливания вычислений. Вот простой пример (фактического вычисления):

a  = exp(seq(log(1), log(401), length.out = 1000)) - 1
ce = runif(1000, min = 0.9, max = 4)
w  = runif(1000, min = 0.9, max = 4)

fun1 = function(ce, w, a) {
  return(uniroot(function(h) ce * 0.32 * (1 - h)^-0.35  - 0.8 * ((0.0093 + 0.01) / 0.33)^(0.33 / (0.33 - 1))*(1 - 0.04) * (w * h + 0.0093 * a)^-0.16, c(0.5, 0.99999), extendInt = "yes")$root)
}

out = mapply(fun1, ce = ce, w = w, a = a) 

Я прочитал здесь , что вы можете использовать алгоритм Ньютона-Рафсона с графическим процессором, но я не понимаю, как это сделатьЭто. Может ли кто-нибудь дать мне подсказку (или рабочий пример) о том, как распараллелить это?

Заранее спасибо!

Примечание: я вызываю эту функцию mapply много времени, поэтому фактическое времяиспользуется значительно.

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