В R функция mcparallel()
в пакете parallel
отбрасывает новую задачу рабочему при каждом вызове. Например, если у моей машины есть N (физические) ядра, и я, например, запускаю задачи 2N, то каждое ядро запускает две задачи, что нежелательно. Я бы хотел, чтобы я мог запускать N задач для N рабочих, а затем, по мере завершения каждой задачи, отправьте следующую задачу в текущее ядро. Есть простой способ сделать это?Возможно ли, в R parallel :: mcparallel, ограничить количество ядер, используемых в любой момент времени?
Мои задачи занимают разные промежутки времени, поэтому отпадает необходимость в серийных задачах серии N. Возможны некоторые способы решения проблемы, такие как проверка количества активных ядер и последующие задания новых задач, когда они стать свободным, но знает ли кто-нибудь о простом решении?
Я попытался установить cl <- makeForkCluster(nnodes=N)
, который действительно устанавливает N ядер, но они не используются тогда mcparallel()
. Действительно, похоже, что нет способа подать cl
в mcparallel()
. У последнего есть опция mc.affinity
, но неясно, как это использовать, и, похоже, она не делает то, что я хочу, (и, согласно документации, ее функциональность зависит от машины).
Вы уверены, что это правда ?! Ну, проверьте 'foreach' в пакете' foreach'. Операторы будут сериализовать задания, когда у вас будет больше заданий, чем ядер. –
Я использовал foreach, но это не подходит для моих целей в этом конкретном случае, потому что трудно (или даже невозможно) остановить всех работников, если в одном из них произошла ошибка. –
У меня такой же вопрос. Есть ли способ определить число активных mcparallel процессов? Таким образом, я могу освободить больше процессов, будет ли количество активных меньше числа физических ядер. – imriss