Я пытаюсь реализовать параллельные вычисления в пакете R, который вызывает C из R с помощью функции .C
. Кажется, что узлы кластера не могут получить доступ к динамической библиотеке. Я сделал параллельный кластер сокетов, как это:
cl <- makeCluster(2)
Я бы хотел оценить функцию C с именем valgrad
из моего пакета R на каждом из узлов в моем кластере, используя clusterEvalQ
, из пакета R параллельно. Однако мой код выдает ошибку. Я компилирую свой пакет, но когда я запускаю
out <- clusterEvalQ(cl, cresults <- .C(C_valgrad, …))
где …
представляет аргументы в функции C valgrad
. Я получаю эту ошибку:
Error in checkForRemoteErrors(lapply(cl, recvResult)) :
2 nodes produced errors; first error: object 'C_valgrad' not found
Я подозреваю, что есть проблема с возможностью clusterEvalQ
доступа к динамической библиотеке. Я попытался решить эту проблему, загрузив пакет glmm в кластер, используя
clusterEvalQ(cl, library(glmm))
но это не решило проблему.
Я могу оценить valgrad
на каждом из кластеров, используя функцию foreach
из пакета foreach R, например:
out <- foreach(1:no_cores) %dopar% {.C(C_valgrad, …)}
no_cores
- количество узлов в моем кластере. Однако эта функция не позволяет получить доступ к каким-либо результатам оценки valgrad
при любых последующих вычислениях в кластере.
Как я могу
(1) делает результаты оценки valgrad
доступными для последующих вычислений в кластере или
(2) используйте clusterEvalQ
для оценки valgrad
?