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