2015-10-03 3 views
2

Я работаю над многопоточным хрустящим приложением, назовем его myprogram. Я планирую запустить myprogram на сетке LSF IBM. LSF позволяет выполнять задание на процессорах с разных компьютеров. Например, bsub -n 3 ... myprogram ... может выделять два процессора из узла 1 и один процессор из узла2.Как оптимизировать многопоточную программу для использования в LSF?

Я знаю, что я могу попросить LSF выделить все 3 ядра в одном узле, но меня интересует случай, когда моя работа запланирована на разные узлы.

  1. Как LSF управляет этим? Будет ли выполняться myprogram в двух разных процессах в узле1 и узле2?

  2. Производит ли LSF автоматическую передачу данных между узлами1 и узлом2?

  3. Что-нибудь, что я могу сделать в myprogram, чтобы облегчить управление LSF? Должен ли я использовать любые библиотеки LSF?

ответ

3

Ответ на Q1

Когда вы отправляете работу как bsub -n 3 myprogram, все LSF делает это выделить 3 слота через 1-3 хостов. Один из этих хостов будет назначен «первым хостом выполнения», и LSF отправит и запустит один экземпляр myprogram на этом хосте.

Если вы хотите параллельно запустить myprogram, LSF имеет команду под названием blaunch, которая по существу запускает один экземпляр программы на каждое выделенное ядро. Например, отправьте свою работу, например, bsub -n 3 blaunch myprogram будет запускать 3 экземпляра myprogram.

Ответ на Q2

К «управлять передачей данных» Я предполагаю, что вы имеете в виду связь между экземплярами myprogram. Ответ - нет, LSF - это средство планирования и диспетчеризации. Все, что он делает, это распределение и отправка, но он не знает, что делает программа отправки. blaunch, в свою очередь, просто запускает задачу, он просто запускает несколько экземпляров задачи.

Что вы здесь, это какая-то структура параллельного программирования, такая как MPI (см., Например, www.openmpi.org). Это обеспечивает набор API и команд, которые позволяют вам писать myprogram параллельно.

Как только вы это сделали и включили свою программу в mympiprogram, вы можете отправить ее в LSF, как bsub -n 3 mpirun mympiprogram. Инструмент mpirun - по крайней мере, в случае OpenMPI (и некоторых других) - интегрируется с LSF и использует интерфейс blaunch под капотом для запуска ваших задач для вас.

Ответ на Q3

Вам не нужно использовать библиотеки LSF в вашей программе, чтобы сделать что-нибудь более легкое для LSF, как я уже говорил, что происходит внутри программы является прозрачной для системы. Библиотеки LSF просто позволяют вашей программе стать клиентом системы LSF (отправлять задания, запрос и т. Д.)

+0

Спасибо. Openmpi выглядит интересно. – Gowtham