私は R による並列計算の初心者です。最近、doParallel パッケージを使用して foreach と並列計算を使い始めました。イテレータをチャンクに分割した後にリストのインデックスを作成しようとすると、問題が発生します。
library(itertools)
library(foreach)
library(doParallel)
n=10000
iter = 1:n
cores = detectCores() -1
c = makeCluster(cores)
clusterExport(c,c("mod_function","test_list","cores")
registerDoParallel(c)
output <- foreach(i = isplitVector(iter,chunks = cores)) %dopar%
{
mod_function(test_list[[i]]
}
stopCluster(c)
エラーが発生します
Error in { : task 1 failed - "recursive indexing failed at level 3
反復ベクトルをチャンクに分割しないと、エラーは発生しません。isplitVector が正確に何を返し、リストのインデックスを作成する方法がわかりません。これは私のために働く
n=10000
iter = 1:n
cores = detectCores() -1
c = makeCluster(cores)
registerDoParallel(c)
output <- foreach(i = (1:n) %dopar%
{
mod_function(test_list[[i]]
}
stopCluster(c)
繰り返しが多いので、foreach を高速化する最善の方法は、繰り返しをクラスターにチャンクすることだと考えました。この方向の助けは非常に役に立ちます。前もって感謝します。