В данном случае мы будем использовать технологию Linda для объединения отдельных узлов, а в пределах каждого узла будет использован SMP-параллелизм. Данный подход делает параллельные расчеты еще более эффективными (http://www.gaussian.com/g_tech/g_ur/m_linda.htm), время выполнения задачи сокращается, однако, в этом случае задачи могут дольше простаивать в очереди (задачи распределяются равномерно по узлам, но в данном случае нам требуется как можно больше ядер на каждом из узлов, поэтому задача будет проистаивать в очереди до тех пор, пока не появятся узлы с требуемым числом свободных ядер).
Для начала работы с Gaussian на кластере Т-Платформы нужно изменить файл ~/.bashrc
так же, как и в предыдущем случае (обратите внимание на scratch-директорию для расчетов).
Для использования данного подхода написан скрипт /usr/local/submit/submit-gaussian-smp.sh.
Для запуска задачи необходимо выполнить следующую команду:
/usr/local/submit/submit-gaussian-smp.sh <число_узлов> <число_ядер_на_узел> <входной_файл>
Здесь <число_узлов> - требуемое число узлов кластера для расчетов, <число_ядер_на_узел> - число ядер на каждом узле, которые будут использоваться для расчетов, <входной_файл> - файл задачи с данными для Gaussian (с расширением .com).
Внимание! Файл задачи (<входной_файл>) НЕ должен содержать директив для распараллеливания (вроде %NProcShared и %LindaWorkers). Параметры для запуска параллельных вычислений рассчитываются автоматически: вы лишь указываете число ядер, и требуемые параметры записываются в файл Default.Router, создаваемый скриптом submit-gaussian-smp.sh в рабочей директории. По окончании расчетов файл Default.Router будет автоматически удален.
Для расчетов создается рабочая директория в папке ~/Gaussian (если папки ~/Gaussian нет, она также будет создана). Скрипт "/usr/local/submit/submit-gaussian-smp.sh" выведет имя рабочей директории, используемой для расчетов. Имя рабочей директории выглядит следующим образом:
~/Gaussian/<имя_входного_файла>-<дата_запуска>-<время_запуска>-<миллисекунды>
В эту директорию будет скопирован входной файл, там же будет храниться и log-файл с результатами расчетов. Результаты будут записаны в файл с тем же именем, что и файл задачи (<входной_файл>), однако, с расширением ".log" .
Пример запуска тестовой задачи на 2 узлах с использованием 4 ядер на каждом узле (итого 8 ядер):
/usr/local/submit/submit-gaussian-smp.sh 2 4 /usr/local/Gaussian/tests/test.com
Скрипт "submit-gaussian-smp.sh" выполнит все подготовительные действия (создание рабочей директории, копирование входного файла и т.д.), поставит задачу в очередь "long" на кластере Т-Платформы и выведет примерно следующую строку:
Working directory: /home/gajduchok/Gaussian//test-20121125-193251-857
Это рабочая директория, созданная скриптом, в которой по окончании расчетов будут храниться результаты (файл с расширением ".log").
В данном случае будет запущена тестовая задача с записью результатов в лог-файл
~/Gaussian/test-20121125-193251-857/test.log . По окончании выполнения задачи в директории, из которой была выполнена указанная команда, появятся два файла с именами Gaussian.o<id_задачи> и Gaussian.e<id_задачи>
Gaussian.o42987
Gaussian.e42987
В них будут содержаться стандартный вывод программы и ошибки (если есть).
Да, иногда в файле с ошибками могут появляться строки вида:
eval server 0 on node-ib-19.tp.hpc.cc.spbu.ru has dropped it's connection.
subprocess pid = 998 has exited. status = 0x0000, id = 0, state = 17.
Не стоит обращать на них внимания - в данном случае они лишь информируют пользователя о том, что работа Linda успешно завершена (status = 0x0000), а Gaussian продолжает работу.
ПРЕДОСТЕРЕЖЕНИЕ: не стоит резервировать по 8 ядер на узел. Так, следующая задача, скорее всего, будет очень долго стоять в очереди:
/usr/local/submit/submit-gaussian-smp.sh 4 8 /usr/local/Gaussian/tests/test.com
Как уже говорилось, задачи равномерно распределяются по узлам, поэтому вариант, когда 4 узла совершенно свободны, встречается довольно редко. Если для задачи требуется 32 ядра, то лучше запустить ее с использованием скрипта /usr/local/submit/submit-gaussian.sh:
/usr/local/submit/submit-gaussian-smp.sh 32 /usr/local/Gaussian/tests/test.com
В этом случае использование всех ядер на узле не требуется и задача получит ресурсы намного быстрее.