![]() |
||||||||||||||||||||||||||||||||||
![]() |
||||||||||||||||||||||||||||||||||
![]() |
RefNUMA – библиотека для организации виртуальной общей памяти в программах, использующих MPI.А. О. Лацис
Введение.Важнейшая трудность написания программ для современных суперкомпьютеров заключается в сложном строении их системы памяти. Так, процессорные ядра в пределах вычислительного узла имеют общую память, но в пределах всего суперкомпьютера – не имеют. Каждый из сопроцессоров-ускорителей в составе гибридного вычислительного узла имеет свою, отдельную память, причем гетерогенную, многоуровневую, и так далее. Программист, таким образом, вынужден явно записывать в своих программах сложно согласованную передачу данных между различными устройствами памяти, как от одного вычислительного узла к другому, так и – в случае гибридного суперкомпьютера – внутри вычислительного узла. Для каждого отдельного вида передачи данных приходится использовать свою, отдельную технологию параллельного программирования. Будь память частично или полностью общей, соответствующие передачи данных записывать не пришлось бы, программа бы значительно упростилась. Сегодня разработка параллельных программ, в которых процессы имеют общую память, возможна с использованием OpenMP. Такие параллельные программы пишутся проще, чем параллельные программы, использующие MPI, но ограничены рамками одного вычислительного узла, поскольку у разных вычислительных узлов суперкомпьютера общей памяти нет. Описываемая в настоящем руководстве библиотека RefNUMA призвана восполнить этот технологический пробел. При помощи RefNUMA виртуальная общая память, доступная всем процессам, организуется в рамках произвольной параллельной программы, использующей MPI. Таким образом, у программиста появляется возможность упростить разработку произвольных, выполняющихся на нескольких вычислительных узлах, параллельных программ, сделав их структурно похожими на программы, использующие OpenMP. При этом для довольно широкого круга приложений эффективность реализации страдает незначительно, и потери легко удается восполнить увеличением количества используемых вычислительных узлов. Помимо возможностей традиционного параллельного программирования, RefNUMA содержит также набор специальных возможностей для программирования гибридных суперкомпьютеров. Эти гибридные расширения RefNUMA позволяют значительно упростить запись коммуникаций между сопроцессорами-ускорителями разных вычислительных узлов. RefNUMA представляет собой набор функций и макросов, сам по себе достаточный для разработки реальных параллельных программ. При этом не накладывается практически никаких ограничений на одновременное использование в той же самой программе также возможностей MPI, OpenMP или, в случае гибридного суперкомпьютера, таких технологий, как CUDA или OpenCL. Программа, использующая RefNUMA, транслируется командой mpicc с добавлением некоторых дополнительных библиотек, и запускается на счет командой mpirun. Как и всякая программа, использующая MPI, она состоит из статически порождаемых процессов, занумерованных подряд от нуля, каждый из которых имеет свой собственный комплект переменных и массивов. Для организации массивов виртуальной общей памяти, доступных напрямую всем процессам, используются специальные коллективные операции создания таких массивов. Синхронизация доступа к массивам общей памяти – барьерная. Дальнейшее изложение построено на основе большого количества постепенно усложняющихся примеров, которые пронумерованы подряд в порядке возрастания сложности. Тексты примеров доступны в виде отдельных файлов. Пример 1 ► |
![]() |
||||||||||||||||||||||||||||||||
Тел. +7(499)220-79-72; E-mail: inform@kiam.ru |