Я запускаю процесс параллельно, используя бэкэнд doParallel / Foreach в R. Я регистрирую набор из 20 ядер как кластер и запускаю процесс примерно 100 раз. Я передаю матрицу каждой итерации параллельных процессов, а в подпроцессе заменяю матрицу случайной выборкой из ее собственных строк. Что мне интересно: следует ли ожидать, что эта модификация сохранится для последующих итераций, обрабатываемых тем же дочерним процессом? Например, когда дочерний процесс 1 завершает свою первую итерацию, начинает ли он вторую итерацию с исходной матрицы или случайной выборки?
Минимальный пример:
library(doParallel)
X <- matrix(1:400, ncol=4)
cl<-makeCluster(2)
clusterExport(X)
registerDoParallel(cl)
results<-foreach(i=1:100) %dopar% {
set.seed(12345)
X <- X[sample.int(nrow(X),replace=TRUE),]
X
}
РЕДАКТИРОВАТЬ:
Чтобы было ясно, если объект действительно будет сохраняться на протяжении итераций одного и того же рабочего процесса, это не мое желаемое поведение. Скорее, я хочу, чтобы каждая итерация брала новую случайную выборку исходной матрицы, а не случайную выборку самой последней случайной выборки (я понимаю, что в моем минимальном примере она, кроме того, создала бы тот же случайный образец исходной матрицы каждый раз из-за набора семян - в моем реальном приложении я имею дело с этим).