Оптимальное совместное использование тяжелой вычислительной работы с использованием снега и / или многоядерности - PullRequest
1 голос
/ 13 марта 2010

У меня следующая проблема.

Во-первых, в моей среде у меня есть два 24-CPU сервера для работы и одно большое задание (пересчет большого набора данных) для совместного использования. Я установил многоядерный и (сокет) кластер Snow на каждом. В качестве интерфейса высокого уровня я использую foreach.

Каково оптимальное распределение работы? Должен ли я установить кластер Snow с использованием процессоров с обеих машин и разделить работу таким образом (т.е. использовать doSNOW для цикла foreach). Или я должен использовать два сервера по отдельности и использовать многоядерные на каждом сервере (то есть разделить работу на две части, запустить их на каждом сервере и затем соединить их вместе).

По сути, это простой способ: 1. Поддерживайте связь между серверами (поскольку это, вероятно, самый медленный бит). 2. Убедитесь, что случайные числа, генерируемые на серверах, не имеют высокой корреляции.

Ответы [ 2 ]

3 голосов
/ 23 июня 2010

Snow и multicore варьируются одним существенным образом - multicore форки новый процесс, поэтому он использует ту же память, что и основной процесс. Это означает, что если вы используете snow, вам нужно распространять (физически отправлять и хранить в дочернем пространстве) данные, которые вы хотите обработать, но если вы используете multicore, дети смогут просто получить доступ к копии основного процесса данные - так это экономит передачу и использование памяти.

1 голос
/ 13 марта 2010

Не хватает опыта, чтобы ответить (1). Но способ избежать (2) - использовать генератор случайных чисел, предназначенный для параллельных программ: посмотрите на пакет rlecuyer и функцию clusterSetupRNG в snow.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...