В некоторых пакетах R есть функции, которые могут выполнять свою работу параллельно, если доступно несколько ядер — например, пакет rstan
может запускать несколько цепочек MCMC параллельно. Когда я запускаю несколько процессов Стэна параллельно друг другу, используя, например, doSNOW
и foreach
, я хочу, чтобы мой код работал параллельно на обоих уровнях*. Вместо этого процессы Стэна отдаются на откуп моим рабочим процессам и, кажется, последовательно запускают свои цепочки там, как будто, будучи назначенными на ядро, они не могут видеть другие ядра машины и думают, что они находятся на одном-единственном ядре. основная машина.
Есть ли способ создать кластеры из 4-ядерных узлов, которые я могу передать какому-нибудь пакету распараллеливания в R, чтобы получить максимальную эффективность от моей машины?
*скажем, у меня есть машина с 36 ядрами, и 9 сценариев Stan выполняются с 4 цепями в каждом. В идеале у меня есть 36 процессов, которые я мог бы запустить одновременно. Прямо сейчас я использую 9 ядер одновременно, и это занимает в 4 раза больше времени, чем я надеюсь.