- PVSM.RU - https://www.pvsm.ru -

Проба пера на суперкомпьютере Ломоносов

image

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

Скорость передачи данных между узлами/процессами

Сначала я решил провести простой тест пропускной способности кластера, и сравнить на сколько отличаются скорости передачи данных от одного потока другому а) если оба потока запущены на одном узле кластера; б) на разных. Я передавал пакет данных с одного потока на другой используя MPI_Sendrecv(..). Размер пакетов данных варьировался от 8 Мб до 1Гб, затем считал скорость и усреднял её.
На одном узле: (10,6 ± 0,6) ГБит/с
На разных узлах: (8,1 ± 0,8)ГБит/с

Немного о задаче

Нужно решить уравнение диффузии на довольно простой области.
Проба пера на суперкомпьютере Ломоносов [2]

image

Мы имеем линейное уравнение в ч.п. Будем его решать без потока, т.е. на границах 1, 2, 4 производная по нормали к стенке 0, а на границе 3 концентрация определяется заданной функцией g(t). Таким образом мы получаем смешанную краевую задачу. Будем решать её методом конечных разностей (очень не эффективно, зато просто).

О распараллеливании

Для решения этой задачи я пользовался openMPI/intelMPI (отдельный пост стоит посвятить сравнению компиляторов на практике). Я не буду углубятся в численную схему, ибо есть википедия и скажу только, что использовал явную схему. Я использовал блочное распределение области так, что каждому потоку даётся несколько областей и если, данные которые передаются из предыдущей области ноль, то область не считается. Крайние столбцы/строки блоков предназначены для получения данных от соседних потоков.

image

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

Количество узлов в сетке: 3*10^6
Шаг по сетке: 0.0007.
Физическое время диффузии: 1 с
Шаг по времени: 6,5*10^-7
D: 0.8
Начальная концентрация на границе 3 0,01 моль.

Немного о законе Амдала

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

Проба пера на суперкомпьютере Ломоносов [3]

Перейдём к самому интересному к результатам и результатам распараллеливания

Времена выполнения на различном количестве потоков

кол-во проц. 1 2 8 16 32 64 128
время, мин. 840 480 216 112 61 46 41

Аппроксимируем времена вычисления законом Амдала.
Проба пера на суперкомпьютере Ломоносов
Из аппроксимации я получил долю последовательного кода порядка 4,2% и максимальное ускорение порядка 20 раз. Как видно из графика кривая выходит на плато, из этого можно сделать вывод, что достигается максимум ускорения и дальнейшее увлечение числа процессоров нецелесообразно. Более того в данном случае при увеличении числа процессов более 200 я получил спад ускорения, это связано с тем, что при увеличении числа процессов начинается нерациональное их использование, т.е. количеств строк в сетке становится соизмеримым с числом процессов и затрачивается больше времени на обмены и это время вносит заметный вклад во время вычислений.

Некоторые замечания

На СК используется система управления задачами sbatch и имеется несколько очередей test, regular4, regular6, gputest, gpu. Для данной задачи я использовал очередь regular4 время ожидания в которой может достигать трёх суток (на практике же время ожидания 17-20 часов).

Автор:

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/matematika/59345

Ссылки в тексте:

[1] тут: http://parallel.ru/cluster/lomonosov.html

[2] Image: http://www.codecogs.com/eqnedit.php?latex=frac{partial&space;u({bf&space;r},t)}{partial&space;t}=Dnabla^2u({bf&space;r},t)+f({bf&space;r},t)

[3] Image: http://www.codecogs.com/eqnedit.php?latex=S_p=frac{1}{alpha+frac{1-alpha}{p}}.

[4] Источник: http://habrahabr.ru/post/220849/