Перенос системы многотельной динамики на вычислительный кластер

УДК 004.75

Е.С. Сергеев, В.В. Гетманский, А.С. Горобцов

ПЕРЕНОС СИСТЕМЫ МНОГОТЕЛЬНОЙ ДИНАМИКИ НА ВЫЧИСЛИТЕЛЬНЫЙ КЛАСТЕР

На современном этапе развития программных систем инженерного анализа основной тенденцией является ориентация на междисциплинарные задачи моделирования, характеризующиеся одновременным наличием нескольких физических явлений и высокой степенью детализации моделей. Возрастает вычислительная сложность задач инженерного анализа и проектирования, и для их решения требуются все более значительные вычислительные ресурсы. Одно из решений этой проблемы заключается в использовании многопроцессорных систем.

Современным инструментом анализа машиностроительных конструкций являются программные системы, реализующие метод конечных элементов и метод моделирования динамики систем тел с кинематическими связями [1]. В данной статье рассмотрены возможные способы повышения эффективности анализа динамики систем тел при использовании кластерных вычислений. Программное обеспечение для проведения такого рода расчетов используется для анализа и доводки транспортных средств, расчета промышленных роботов и управляемых механизмов, получения алгоритмов управления, обеспечивающих устойчивое движение. При наличии программного средства для построения адекватной модели уменьшается время разработки и производственные риски за счет сокращения количества ошибок в проектных решениях.

При решении задач из рассматриваемой области методами математического моделирования возникают следующие проблемы:

высокая сложность и трудоемкость разработки инженерных моделей машиностроительных объектов;

ограничение на размерность расчетных схем задач многотельной динамики;

недостаточная адекватность многотельных моделей из-за их низкой детализации.

В данной статье описаны основные этапы модификации существующего программного комплекса моделирования динамики систем многих

тел ФРУНД [2] для эффективной работы на кластерных системах.

Программный комплекс ФРУНД реализует построение моделей систем тел со связями для двух общепринятых постановок: расчета динамики при наличии малых и больших движений тел. Малые движения имеют место при решении задач исследования колебаний и вибрации машин, большие движения - при моделировании динамики механизмов, управляемого движения машин. С помощью модулей системы можно получить решение уравнений математических моделей динамики конструкций машин и механизмов с учетом пространственного характера движений, упругих свойств отдельных тел, многомерности и нелинейности характеристик связей между телами, случайных и детерминированных нагрузок, динамического и кинематического способов возмущения.

Уравнение движения

Уравнение движения произвольной механической системы абсолютно твердых тел со связями имеет вид:

Mi = q(x, x, t),

где х - вектор переменных системы размерностью п; М - матрица масс; q - вектор, содержащий внешние и неконсервативные силы при кинематических связях

Ф

Система дифференциально-алгебраических уравнений в форме Лагранжа первого рода, используемая в рассматриваемом методе, имеет вид:

|Мх-Втр=Г(х,х,г);

I Бх = 11(х,х,г),

где f (X, х, /) - вектор функция правых частей дифференциальных уравнений; р - вектор множителей Лагранжа; Б - производная уравнений связи Б = Фх; ^Х, х, t) - вектор правых частей уравнений связей

В соответствии с рассматриваемой в работе [3] расширенной постановкой Лагранжа, систему (3) можно заменить на

|Мх - Бта(2ц£22Ф + П2Ф) + Бтр = ц(х,х,1), I Бх = И(х,х,г).

где а - в общем случае диагональная матрица коэффициентов; р - коэффициенты демпфирования; й - диагональная матрица собственных частот. Система (3) точно соответствует (1) т. к. Ф = 0 и Ф = 0. Если добавить слагаемое вида Бта(2рй2Ф + й2Ф) только для выбранных связей, то (5) можно привести к виду

[Огх = Ьг(х,х,0,

где Ф = (Ф, Ф )т; Б = Ф; р, = а(2рЙ2Ф, + Й2Ф,);

, . . . Ф, - частная производная уравнений связи по координатам податливых шарниров; Фг - частная производная по координатам кинематических связей; р, - реакции в податливых связях; рг -реакции в кинематических связях. При а ^ да, (Р, Рг)т ^ Р, пусть 5 = (р, рг)т.

Решение задачи выбора р, такого, которое обеспечивает минимальную величину максимальной невязки 5тах, приведенной в [4].

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

г1 г

в (6) пропадает и нет необходимости решения линейной задачи на каждом шаге интегрирования. В этом случае численное интегрирование системы (6) сводится к интегрированию системы обыкновенных дифференциальных уравнений (ОДУ) в форме Коши (матрицу масс М в большинстве случаев можно принимать диагональной). Ниже рассматриваются особенности программной реализации параллельного интегрирования системы ОДУ вида (7):

Мх - Б^а

В данной работе для численного интегрирования используется явный метод Рунге-Кутта 4-го

порядка. Существование условия сходимости этого метода дает преимущество над классом неявных методов интегрирования, хотя приходится использовать малый шаг интегрирования для жестких систем.

Архитектура системы

Рассмотрим более подробно систему ФРУНД (рис. 1). Как почти все комплексы моделирования систем тел со связями, ФРУНД состоит из модулей ядра и пользовательского интерфейса. Комплекс состоит из трех основных модулей: подсистемы синтеза уравнений движения, расчетного модуля, подсистемы анализа результатов. По геометрической расчетной схеме программный комплекс ФРУНД генерирует в символьном виде уравнения движения в виде программного кода на языке ФОРТРАН, который компилируется в расчетный модуль. Расчетный модуль в процессе выполнения сохраняет результаты расчета для подсистемы анализа. Результаты анализа отображаются в графическом интерфейсе.

Наличие отделенной от интерфейса подсистемы расчета позволяет дорабатывать программный комплекс за счет создания дополнительных модулей.

Для использования в комплексе ФРУНД кластерных вычислений разработаны дополнительные подсистемы:

подсистема декомпозиции модели на подмодели, которые могут рассчитываться независимо, как показано в [3];

синхронизации параллельного расчета, которая обеспечивает синхронизацию параллельных процессов на каждой итерации численного метода интегрирования уравнений движения;

объединения результатов расчета подмоделей.

Подсистема декомпозиции модели. Многотельная модель состоит из набора тел и связей между ними. Все зависимости в модели и ее структуру можно задать графом или матрицей смежности. Модели механических систем имеют преимущественно древовидную структуру графа, характеризующуюся малым числом циклов и разреженной матрицей смежности. Сортировка вершин графа позволяет получить портрет матрицы с концентрацией ненулевых элементов вблизи главной диагонали, т. е. матрица смежности приводится к ленточному виду. При декомпозиции моделей с такой структурой возникают связан-

|—|—| Графический интерфейс

Подсистема синтеза уравнений

Подсистема декомпозиции моделей

| I | Расчетный модуль

ISolver

Подсистема синхронизации

Подсистема анализа результатов

Подсистема объединения результатов

Рис. 1. Диаграмма компонентов комплекса ФРУНД с подсистемами для параллельных вычислений

ные подмодели, которые нельзя рассчитывать независимо из-за потери связей при декомпозиции. Система ОДУ (7) разделяется на несколько подсистем, которые зависят только по функциям правых частей. В результате декомпозиции формируются списки тел модели, входящие в каждую подмодель и списки граничных тел, соединенных с рассеченными шарнирами (рис. 2). В рамках полученных подмоделей параметры граничных тел рассчитываются некорректно, требуется синхронизация параллельного расчета подмоделей. По этим спискам формируется таблица синхронизации для пересылок данных с использованием информации об адресах хранения данных подмоделей и полной модели в памяти. Это позволяет производить вычисления на каждой итерации независимо для каждой подмодели с последующей синхронизацией и обменом данными перед переходом к следующей итерации.

Подсистема синхронизации. Является одной из разработанных подсистем, необходимых для переноса системы инженерного анализа ФРУНД на кластерные вычислительные системы (см. рис. 1).

Подсистема синхронизации представляет собой MPI (Message Passing Interface) программу -множество одновременно выполняемых процессов. Каждый процесс управляет своим расчетным модулем, находящимся в динамической библиотеке, который загружается во время исполнения программы.

Для описания взаимодействия между процессами используется граф обмена, в котором каждая вершина представляет подмодель, а каждая дуга -пересылаемую информацию. Вершина графа может иметь различное количество входящих и исходящих дуг. При этом дугам графа в качестве весов назначены адреса данных в общей модели, которыми обмениваются расчетные модули.

Модель

1 2 3 4 5 6 7 8 9 10 11 12

Подмодель № 1

Подмодель № 2

Подмодель № 3

- Корректные тела

- Некорректные тела

Рис. 2. Декомпозиция модели на 3 подмодели и перенумерация тел

В общем случае адреса, из которых считываются и в которые записываются данные, разные, поэтому требуется организация двух графов - для чтения и для записи. Информационный обмен между параллельными процессами осуществляется с использованием таблицы синхронизации. Подсистема основана на интерфейсе ISolver, под которым в данном случае понимается совокупность процедур, импортируемых в подсистему синхронизации из расчетного модуля. Управление процессом решения осуществляется вызовом процедур интерфейса расчетного модуля.

Для реализации подсистемы синхронизации были проанализированы два способа взаимодействия параллельных процессов.

1. С управляющим процессом: среди процессов параллельной программы выделяется процесс, который перераспределяет данные между параллельными процессами.

2. Взаимодействующие равные: процессы обмениваются данными напрямую друг с другом.

Поскольку подсистема реализована с помощью объектно-ориентированного подхода на языке C++, один и тот же набор классов может реализовывать два вышеупомянутых способа. Необходимая гибкость подсистемы достигается путем переноса методов по иерархии классов и изменением порядка вызова методов.

Для построения теоретических оценок трудоемкости коммуникационных операций используется способ вычисления временных затрат на передачу данных. Трудоемкость операции коммуникации между двумя процессорными узлами кластера оценивается в соответствии с моделью, предложенной Хокни (the Hockney model) [5]:

?пд

Время на пересылку сообщения размером m между двумя узлами определяется выражением (8), где а - латентность передачи каждого сообщения; в - пропускная способность сети.

Важно отметить, что для предварительного анализа временных затрат на выполнение коммуникационных операций точности модели Хокни может оказаться достаточно. Кроме того, данная модель имеет наиболее простой вид среди существующих моделей [6].

Рассмотрим более подробно способы реализации подсистемы синхронизации с учетом использования MPI.

Первый способ взаимодействия предполагает наличие управляющего процесса, назначение которого заключается в сборе информации со всех процессов в группе, подготовке полученных данных к пересылке и пересылке всем процессам группы предназначенных им данных. Подобное взаимодействие можно организовать с помощью коллективных операций - MPI_Gatherv и MPI_ Scatterv, реализующих сбор и распределение сообщений. Операция scatter распределяет части данных с одного узла на все узлы. Корневой узел должен переслать все данные остальным, сетевой интерфейс корневого узла является «бутылочным горлышком». Операция gather собирает части данных со всех узлов на один корневой узел. Поскольку указанные операции ограничены пропускной способностью сетевого интерфейса одного узла [7], трудоемкость коммуникационных операций можно оценить так:

tscatter И = « + ^

^gather (m) = а + m/P.

Тогда трудоемкость коммуникационных операций синхронизации процессов на одной итерации численного метода:

t„

. (m) = 2 х [а + m/в] + t

где tp - время обработки данных на управляющем процессе.

Второй способ взаимодействия параллельных процессов предполагает передачу данных от всех процессоров всем процессорам сети на каждой итерации численного метода. Возможный способ реализации операции множественной рассылки состоит в выполнении соответствующего набора операций одиночной рассылки. Однако такой подход не является оптимальным для многих топологий сети, поскольку часть необходимых операций одиночной рассылки потенциально может быть выполнена параллельно.

Операция множественной рассылки эквивалента выполнению всеми процессами операции scatter на локальных буферах. Следовательно, производительность коммуникационного взаимодействия будет ограничена производительностью сетевого интерфейса одного узла. Подобное коллективное взаимодействие можно организовать с помощью коллективных операций -MPI Alltoall. Учитывая вышеизложенные дово-

ды, трудоемкость коммуникационных операций определяется следующим выражением:

t.

(m) = а + m/p.

AlltoAll

Из анализа соотношений (10) и (11) следует, что способ взаимодействия с управляющим процессом, как минимум, в два раза проигрывает по затратам времени на коммуникационные операции, поэтому для обмена данными между процессами использован второй способ взаимодействия.

Условно подсистему синхронизации можно разбить на две логически разделенные части.

Первая часть используется для инициализации подсистемы синхронизации и отвечает за обработку данных, полученных от подсистемы декомпозиции. На основе этих данных вычисляются зависимости между подмоделями, и строятся списки объектов MPI_type для упаковки и распаковки пересылаемых данных. Они не могут использоваться ни в каких других операциях, кроме коммуникационных. Производные типы MPI следует понимать как описатели расположения в памяти элементов базовых типов, описывающих две вещи: последовательность базовых типов и последовательность смещений.

Вторая часть применяется для управления расчетным модулем и обмена данными в процессе вычислений. Она отвечает за подготовку данных расчетного модуля для их передачи с помощью функций MPI.

Подсистема объединения результатов расчета. Среда выполнения параллельной программы MPI принципиально отличается от среды выполнения обычной программы. В последовательном варианте результаты вычислений находятся в адресном пространстве одного процесса, что позволяет записывать данные на диск простым и удобным способом для дальнейшего анализа и обработки. В системах с распределенной оперативной памятью части результата вычислений распределены

между множеством процессов. Распределенность сохраняемых данных может вызвать значительное снижение производительности при записи данных в файл, т. к. данные записываются на общий сетевой диск несколькими процессами одновременно. В случае параллельного расчета производительность существенно зависит от реализации операций записи данных на диск.

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

Условное деление тел на две группы происходит путем анализа выходных данных подсистемы декомпозиции. В выходных файлах указывается соответствие между номерами тел полной модели и номерами тел подмодели, а также номера корректных тел для каждой подмодели. На основе этих данных строятся производные типы MPI.

Для реализации подсистемы объединения результата рассматривались два способа [8] записи данных в общий файл:

вложенных последовательностей (interleaved global sequentially) на основе настраиваемого отображения файлов (MPI_File_set_view);

раздельных последовательностей (global partitioned sequentiality) на основе неблокирующего доступа к данным с точными смещениями.

Использование функции MPI_File_set_view позволяет настраивать области видимости файла отдельно для каждого процесса, участвующего в вычислениях (рис. 4, а), что дает возможность записывать параметры тел в порядке их нумерации в полной модели. Данный порядок записи используется последовательным расчетным модулем и подсистемой анализа результатов моде-

ОЗУ

Корректные тела Некорректные тела

Рис. 3. Общий случай расположения параметров корректных и некорректных тел в ОЗУ процесса

а)

Рис. 4. Способы записи в общий файл

лирования. Отображение файла настраивается с помощью производных типов MPI. Использование MPI_File_set_view обладает существенным недостатком: значительным уменьшением производительности операций ввода-вывода [9]. Это связано с особенностями реализации записи в отображаемый файл.

После проведения серии тестов был выбран способ раздельных последовательностей (рис. 4, б) на основе неблокирующей функции MPI_iwrite_at, превосходящий по производительности способ вложенных последовательностей в 10-12 раз, что соответствует результатам, изложенным в [9]. Способ раздельных последовательностей создает файл, не совместимый с форматом файла при последовательном расчете, поэтому для анализа результатов данные предварительно конвертируются.

Результаты экспериментов

Тесты проводились на кластере из семи узлов (headnode, node01 ... node06). Каждый узел содержит два процессора Xeon Quad Core c рабочей частотой 2,5 ГГц, размер оперативной памяти 16 Гб. Узлы соединены сетью Gigabit Ethernet. Использовалась ОС Windows HPC Server 2008.

Целью экспериментов было сравнение времени моделирования одних и тех же многотельных моделей при последовательном и параллельном расчете.

В таблице представлены результаты вычислительных экспериментов моделирования многотельных систем в зависимости от количества про-

цессоров и количества тел в системе. Поскольку вычисления проводились на восьмиядерных вычислительных узлах, количество процессоров кратно восьми; если выделять процессоры неравномерно, производительность снижается. Процессоры на одном узле обмениваются сообщениями через общую память, что значительно быстрее, чем обмен через сетевой интерфейс.

Если количество тел в моделируемой системе является фиксированным, то при росте числа процессоров эффективность убывает за счет роста накладных расходов. Эффективность использования процессоров улучшается с увеличением числа тел в моделируемой системе и повышением сложности решаемой задачи. В большинстве случаев можно обеспечить определенный уровень эффективности моделирования в системе ФРУНД при увеличении детализации моделей.

В результате переноса системы ФРУНД на вычислительный кластер были получены результаты по ускорению расчета моделей систем тел, свидетельствующие о сохранении масштабируемости при увеличении размерности задачи, которая определяется количеством неизвестных в интегрируемой системе уравнений. Дальнейшее развитие проекта предполагает определение границ масштабируемости и исследование влияния характеристик размерности задачи (количества тел в модели и подмоделях, количество подмоделей, количество связей между подмоделями) на эффективность параллельного расчета. Исследованные постановки задач многотельной

Результаты вычислительных экспериментов моделирования многотельных систем

Количество тел в многотельнои модели 1 процессор 16 процессоров 24 процессора 32 процессора

Т,с Т,с Ускорение Т,с Ускорение Т,с Ускорение

2000 200 42 4,76 34 5,88 30 6,67

4000 410 93 4,41 57 7,19 45 9,11

6500 800 203 3,94 99 8,08 70 11,43

динамики характеризуются слабой связанностью подмоделей, поэтому для моделирования целесообразно использовать GRJD-вычисления. Эксперименты по получению результатов в GRID-среде планируются на дальнейших этапах разработки программного комплекса параллельного расчета

динамики систем тел. Предполагается разработка модуля декомпозиции сложных многотельных моделей для эффективного использования распределенных ресурсов GRID-среды. Это позволит осуществлять междисциплинарное моделирование с высокой детализацией.

СПИСОК ЛИТЕРАТУРЫ

1. Виттенбург, И.С. Динамика систем твердых тел [Текст]/И.С. Виттенбург.-М.: Мир.-1980.-294 с.

2. Официальный сайт пакета ФРУНД [Электронный ресурс].-2009.-Режим доступа: http://frund.vstu.ru.

3. Bayo, E. A modified Lagrangian formulation for the dynamic analysis of constrained mechanical systems [Текст]/Е. Bayo, J. Garcia de Jalon, M.A. Serna//Computer Methods in Applied Mechanics and Engineering.-1988.-Vol. 71.-Iss. 2.-P. 183-195.

4. Банах, Л.Я. Условия разбиения системы дифференциально-алгебраических уравнений на слабосвязанные подсистемы [Текст]/Л.Я. Банах, А.С. Го-робцов, О.К. Чесноков//Журнал вычислительной математики и математической физики.-2006.-№ 12.-C. 2223-2227.

5. Hockney, R. The communication challenge for MPP: Intel paragon and meiko CS-Parallel computing [Текст]Ж. Hockney//Parallel Computing archive.-1994.-Vol. 20. Iss. 3.-P. 389-398.

6. Pjesivac-Grbovic, J. Performance analysis of MPI collective operations [Текст]Л. Pjesivac-Grbovic, T. Angskun, G. Bosilca [et al.]//Cluster Computing.-2007. -Vol. 10.-P. 127-143.

7. Matsuda, M. The design and implementation of MPI collective operations for clusters in long-and-fast networks [Текст]/ M. Matsuda, T. Kudoh, Y. Kodama [et al.]//Cluster Computing.-2008.-Vol. 11.-Iss. 1.-P. 45-55.

8. Lucas, H.V. Hint Controlled Distribution with Parallel File Systems [TeKCT]/H.V. Lucas, T. Ludwig// European PVM/MPI Users Group Meeting.-2005.-P. 110-118.

9. Worringen, J. Improving generic non-contiguous file access for MPI-IO [Текст]Л. Worringen, J.L. Traft, H. Ritzdorf//Lecture Notes in Computer Science, Recent Advances in Parallel Virtual Machine and Message Passing Interface .-2003.-P. 309-318.

УДК 004.4'23, 004.4'24

В.М. Ицыксон, Д.А. Тимофеев

ТЕХНОЛОГИЯ МОДИФИКАЦИИ ПРОГРАММНОГО КОДА, ОСНОВАННАЯ НА ПАРАМЕТРИЗУЕМЫХ ШАБЛОНАХ

Различные модификации исходного кода -одни из самых частых действий разработчиков во время всего жизненного цикла программной системы. Целями модификации могут являться внесение новой функциональности, исправление ошибок, улучшение читаемости, повышение производительности, переход на другие библиотеки и т. п. В общем случае эту задачу сложно автоматизировать, поэтому разработчики обычно решают ее вручную. Она усложняется еще и тем, что сравнительно небольшие локальные изменения могут повлечь за собой необходимость обработки большого количества зависимого программного кода.

Если модификация программного кода представляет собой изменения с сохранением поведения (рефакторинги), то задача решается относительно легко с привлечением современной среды разработки, в которой данные модификации поддержаны и автоматизированы. Однако часто требуется вносить изменения, которые не могут быть выражены набором шаблонов рефакторинга. Кроме того, их иногда необходимо производить многократно в разных участках программы. Примером таких изменений может быть однотипная оптимизация циклов в программе.