Научная статья на тему 'ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РАСПАРАЛЛЕЛЕННОГО МОДЕЛИРОВАНИЯ ЭСТАФЕТ'

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РАСПАРАЛЛЕЛЕННОГО МОДЕЛИРОВАНИЯ ЭСТАФЕТ Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
43
6
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
КОМПЬЮТЕРНОЕ МОДЕЛИРОВАНИЕ / ТЕОРИЯ ИГР / ЭСТАФЕТА / ИНФОРМАТИКА / ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ / MPI / C++

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Гладких Илья Юрьевич, Привалов Александр Николаевич

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

i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Гладких Илья Юрьевич, Привалов Александр Николаевич

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

SOFTWARE IMPLEMENTATION OF PARALLELIZED RELAY SIMULATION

The article describes the logical elements of the developed system for parallelized relay simulation - a software implementation of parallelized relay simulation in C++ with MPI elements. The structures of input and output data, the principles of distribution of the calculation load are described. The results ofpractical measurements of the acceleration of the parallel solution are shown.

Текст научной работы на тему «ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РАСПАРАЛЛЕЛЕННОГО МОДЕЛИРОВАНИЯ ЭСТАФЕТ»

Pylaev Nikolay Alexeyevich, postgraduate, radionik16@yyandex. ru, Russia, Saint-Petersburg, Military Telecommunications Academy

УДК 004.42; 519.85

DOI: 10.24412/2071-6168-2022-2-71-76

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ РАСПАРАЛЛЕЛЕННОГО МОДЕЛИРОВАНИЯ

ЭСТАФЕТ

И.Ю. Гладких, АН. Привалов

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

Ключевые слова: компьютерное моделирование, теория игр, эстафета, информатика, параллельное программирование, MPI, C++

Многие процессы человеческой деятельности имеют характер конкурентной борьбы подходящие под модель теории игр Эстафета. Такие процессы обусловлены наличием четко заданных стартовых условий (позиций) участников этой борьбы и позиции победителя, т.е. набора условий, при достижении которых одного из или нескольких участников можно считать победителями в таком противостоянии. Причем процесс достижения конечных условий из стартовых для каждого участника можно разбить на независимые стадии или этапы[8].

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

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

4 Kunmiuu пропв > Пикш игрой

V1 ТДГМИР! I 1Н1ГТТ11ШР ТПфПЫ ППТ ^ПТТГ 1Ч]1ЧИ

Рис. 1. Структура входных данных программы

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

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

В программном коде распределения нагрузки (Рис. 1 - 3) koef - коэффициент эффективного распределения текущего вычислительного потока; myRank - индекс текущего вычислительного потока, numCountThis - мощность доли нагрузки для текущего в.п., numCountAll - мощность всей вычислительной нагрузки задачи, AllSize - мощность множества вычислительных элементов.

if (myRank_l < numCountAll Si AllSize) {

numCountThis = (numCountAll / AllSize) + 1;

}

else {

numCountThis = numCountAll / AllSize;

Рис. 1. Листинг распределения нагрузки для невзвешенного кластера

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

данные получены в полный мере каждым в.э. до начала вычислений; исходные для вычислений данные представляют собой константы Однако, в вычислениях, в виду природы моделируемых процессов, необходимо использовать псевдослучайные числа, поэтому стоит обратить внимание на обязательную дифференциацию результатов генерации псевдослучайных чисел в отдельных зернах параллелиз-ма[1], путем прямого указания разных начальных чисел генераторов псевдослучайных (ГПСЧ) [6] [11] чисел для разных в.э. И таким числом выступает идентификатор текущего вычислительного потока.

Сами вычисления на верхнем уровне иерархии вызовов в каждом в.э., т.е. в параллельной единице выполнения (parallel unit of execution)[1], выглядят достаточно просто (Рис. 3):

if (myRank < numCountAll % AllSize) { numCountThis = koef + lj

}

else {

numCountThis = koef;

}

Рис. 2. Листинг распределения нагрузки для взвешенного кластера

1. задаем изначальное значение таблице результатов;

2. играем заданное количество раз; 2.1 задаем стартовое значение игре;

2.2. играем с уникальным относительно всех в.э. стартовым значением ГПСЧ;

2.3. записываем результат отдельной игры;

2.4. добавляем результат к совокупности локальных результатов - частичному результату.

RD - объект содержащий в себя карту игры. RG - объект пространства игры эстафеты.

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

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

for (long long int i = i < numCountThis; i-H-)

relay_game_totai_out_short RGTO(R6);

Рис. 3. Листинг параллельной единицы выполнения

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

1) проверка текущих позиций с прошлого раунда и сдвиг на новый этап маршрута игроков, выполнивших условия перехода в прошлом раунде, эта проверка необходима для модели с учетом начисления поощрений и штрафов прогресса по модели черного ящика из независимого модуля

2) в зависимости от типа модели игры (марковская и полумарковская цепь) начисления прогресса в текущем раунде

3) начисление стоимости игры в раунде для игрока и начисление премии или вычет

штрафа

4) определение является ли текущий игрок победителем.

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

табл. 1.

Таблица 1

Структура выходных данных программы

Общее количество проведенных экспериментов

Имя игрока-

Доля побед игрока-

Игрок- ExpAi

MinAi

MaxAi

ЕхрЛ7 - средняя набранная сумма 7-ой команды из расчета: общая набранная сумма командой за все проведенные моделирования разделенная на количество проведенных моделирований эстафеты, без учета характеристики победы в эстафете; М7пЛ7 - минимальная набран-

ная сумма /-ой команды за все проведенные моделирования эстафеты без учета характеристики победы в эстафете; МахА/ - максимальная набранная сумма /-ой команды за все проведенные моделирования эстафеты без учета характеристики победы в эстафете.

bool play_to_game_round(long long unsigned int grain) {

time_QUANTUM += 1;

booL AllPlayersFirtished = true;

if (RD.number_of_players >0)

{

for (int i = 0; i < RO.number_of_players; i++) { int j = 0;

while (game stages gen valuefiiril >= RD.playersIi].stages[j].down_limit) { if (]<(RD.players[i].number_stages - 1))

else { break;

>

J-

if (j < RD.players[i].nunber_stages) {

if (ProgressWithinTheStage)

game_stages_gen_value[i][ j] += R_gen_double_randoM_table(RD.players[i].stages[]'].random_table, grain);

else

game_stages_gen_value[i][j] = R gen double random table(RD.players[i].stages[j].randonHrable, grain);

if ((game_stages_gen_value[i][j] < RD.players[i].stages[j].down_limit) && (RD.switch_premium_or_penalty)) { game_stages_money[i][]] -= RD.players[i].stages[j].amount;

>

else {

if ((gan»e_stages_gen_value[i][j] >= RD.players[i].stages[j].down_limit) && (!RD.switch_premium_or_penalty)) { ganie_5tages_Boney[i][j] += RD.players[i].stages[j],amount;

^

}

if (ProgressWithinTheStage) {

i- (gane_stages_gen_valLie[i] [j] > RD.players[i]. stages[ j ] .down_limit) [ game_5tages_ge n_value [ i] [ j ] = nj .players [ i ] -stagesQ]. down_limit;

>

}

; }

if ({game_stage5_gen_value[i][ (int)RD.players[i] .number_stages - 1' >- RD. plaiyer5[i]. stages "{inrt)RD.players[i] .iiurrber_stages - 1" .down_liniit}} oneofThePlayersfinishedTheGame = true;

: }

else [

AllPlayersFinishec - falsa;

: j }

if (AllPlayersFinished) {

AllPlayersHaveFinishedTheGame = true;

>

return true;

}

else

Рис. 4. Листинг методаplay_to_game_round

if (myRank == e) {

MPi_status status_roessage; RAGR.ItIsNotEmptyAS(); for(int i=I;i<AllSize;i++)

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

i

MP^RecvfbufjwirvSj ragr.number_of_players, ИР1_ичыйНЕ0_Ш№_Ю№, i, 1, №ij:om_woRLD,&status_niessage)\ mpi_Recv(buf_s«_5tage5_araount_inoneyJ ragr. number_of_players, mpi_unsigned_lqng_lon6, i, 2, мр1_со№1_мок1.о., 4status_message); HPi_Recv(buf_irin_suri_stage5_amount_morey) ragr.number_of_players3 rfi_umsigned_lcx-(g_lor+3j з, hpi_com4_ijorld, &status_message); HPI_Recv(buf_max_sum_stages_anKXjnt_noreyJ RAGR.numbe^ofjjlayerSj MPI_UNSIGNED_L.ONGJ.ONGj lj 4, MPl_CO№l_WORLD, &status_message); for (int j = в; j < RAGR.number_of_playersj j++) (

RAGR.wins[j] += buf_wins[j];

RAGR.5um_stages_anK}unt_mor>ey[ j] += buf_sum_stages_amountjiioney[j]; if (RAGR.min_stages_araount_money[j] > buf_min_sun_stages_amountjnoney[j]) RAGR. mi n_stages_amount jnoney [ j ] = bufjnin_s un_stages_amountjnoney [ j]; if (RAGR.max_stages_amount jnoney[j] < buf_max_sim_st age s_a mount_mcn ey[j]) RAGR. max_5tages_amount jnoney [ j ] = buf_maK_s lbi_s t age s_a mo lint jnc n ey [ j ];

i

;

char* tempBuf=new char[sizeof<int)+sizeof(long long unsigned int)*RAGR.number_of_players+ sizeof(long double)*RAGR.number_of_players]; for (int i = 0j i < RAGR.nuHber_of_players; i++) { buf_wins[i] = RAGR.Wins[i]j

buf_sura_5tages_a»unt_raoney[i] = RA6R.sura_stage5_amount_raoney[i]; buf_min_su(n_5tage5_amount_money[i] = ragr. min_stages_amoLintjnoney[i]; buf_max_5um_stages_amount_nnney[i] = raqr.max_stages_amount_money[i];

}

MPI_Send(buf_Wins, RAGR. nurnber of playersj MPI_UHSIGNED_LONG_LONG, 0j 1, MPI_COMM_WORLD); MPl_Send(buf_5um_stages_amount_moreyJ RAGR.number_of_players, mpi_UNSIGNED_L.ONGJ.ONG, e, 2, MPI_COWH_WORLD); MPI_Send(buf_Bin_suii_stages_aiiiount_iiBney, RAGR. numfcer_of_players, MPIJJNSKNED_LONGJ.ONGj в, 3, HPI_C0MH_H0«LD)j MPI_Send(buf_max_sun_stages_araount_iK)ney, RAGR. number_of_players, MPIJJNSKNED_LQNGJ.ONGj e, 4, MPI_C0MH_M0«LD)j

Рис. 5. Листинг сбора локальных результатов

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

но на Рис. 5 . RAGR - объект класса relay_aП_games_result, предназначенного для обработки

данных игры с целью получения выше описанной структуры данных.

Для оценки ускорения (1) полученное с помощью параллельного решения ускорение вычислений, обратимся к закону Амдала (2).

* = р (1)

__

К^Р)^/ (2)

где Т - время вычислений в системе с одним в.э., Ts - время вычислений в системе с S в.э., ^ -время на одну операцию, Ж - общая мощность операций, Жск - мощность последовательных операций, Жпр - мощность параллельных операций, Ж - мощность операций передачи данных. Очевидно, что параллелизм предложенного решения очень велик, что и подтверждается практическими результатами, представленными в Таблице 2.

PS D:\Relay> mpiexec -n 2 .\Relay_MPI_law.exe -n 10000 ïn.csv Total games played :10000 Time : 0.581502

Count games

Summary of results :

First Player Second Player

First Player Second Player

First Player Second Player

WINS :

71.35% 71.29% Expected amount -43.796 -43. 528 Minimum amount -220 -200 Maximum amount 0 0

First Player 0

Second Player 0

PS D:\Relay;- mpiexec 4 .\ReIay MPI law.exe 1U0U0 in.csv otal games played :10000 ime :0.329698

ount games :10000

Summary ot results

l-irst player Second Player

First Player Second Player

J-irst flayer Second Player

First Player Second Player

7?.07% /0.2Í% J-xpecterl amount -43.196 -A 1.R7A Minimum amount

■220 Maximum amount 0 0

Рис. 6. Пример работы решения для моделирования на 2 и 4 вычислительных элементах

Таблица 2

Замеренное ускорение параллельного решения__

Количество в.э. 1 2 4 8

Ускорение 1 ~1.9 ~3.4 ~6.8

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

Статья написана при поддержке РФФИ по проекту 19-47-710004 р_а.

Список литературы

1. D. Kael, P Mistry, D Schaa, D.P. Zhang, Heterogeneous Computing with OpenCL 2 Third Edition, 2015, 307 p.

2. Larkin E.V., Bogomolov A.V., Privalov A.N., Dobrovolsky N.N. Relay races along a pair of selectable routes // Вестник Южно-уральского государственного университета. Серия: математическое моделирование и программирование. 2018. №1 С. 15-26.

3. J. von Neumann and O. Morgenstern: Theory of Games and Economic Behavior (Princeton Classic Editions) . Princeton, Princeton University Press; 60th Anniversary Commemorative edition (April 8, 2007), 776 p.

4. P. Levy, Processus semi-Markoviens, Proc. Intern. Congr. Math. 3 (1954), 416-426, Amsterdam, The Netherlands.

5. P. Diaconis (2009). The Markov chain Monte Carlo revolution. Bull. Amer. Math. Soc. (N.S.) 46 179-205.

6. Intel® Digital Random Number Generator (DRNG) Software Implementation Guide. Revision 2.1 October 17, 2018. [Электронный ресурс]. https://www.intel.com/content/www/us/en/developer/articles/guide/intel-digital-random-number-generator-drng-software-implementation-guide.html(дата обращения:20.02.2022).

7. Кнут Д.Э. Искусство программирования. Получисленные алгоритмы. М.: «Виль-ямс», 2018. Т. 2. 832 с.

8. Ларкин Е.В. Многостадийные соревновательные игры // Известия Тульского государственного университета. Технические науки. 2016. Вып. 5. С. 52-65.

9. Ларкин Е.В., Сычугов А.А. Соревновательные игры // Известия Тульского государственного университета. Технические науки. 2013. Вып. 7. Ч. 2. С. 108-116.

10.Ларкин Е.В., Ивутин А.Н. «Соревнования» в многопроцессорных компьютерных системах // Известия Тульского государственного университета. Технические науки. 2012. Вып. 12. Ч. 2. С.198-203.

11. Слепович И.И. Генератор псевдослучайных чисел. Учебное пособие. Саратов: СГУ, 2017. 118 с.

Гладких Илья Юрьевич, программист, gladkihiu@gmail.com, Россия, Тула, Тульский государственный педагогический университет им. Л.Н. Толстого,

Привалов Александр Николаевич, д-р техн. наук, профессор privalov.61@mail.ru, Россия, Тула, Тульский государственный педагогический университет им. Л.Н. Толстого

SOFTWARE IMPLEMENTATION OF PARALLELIZED RELAY SIMULATION

I.Yu. Gladkih, A.N. Privalov

The article describes the logical elements of the developed system for parallelized relay simulation - a software implementation of parallelized relay simulation in C++ with MPI elements. The structures of input and output data, the principles of distribution of the calculation load are described. The results ofpractical measurements of the acceleration of the parallel solution are shown.

Key words: computer modeling, game theory, relay race, computer science, parallel programming, MPI, C+ +.

Gladkikh Ilya Yurievich, programmer, gladkihiu@,gmail. com, Russia, Tula, Tula State Pedagogical University,

Privalov Aleksandr Nicolaevich, doctor of technical science, professor, privalov.61@mail.ru, Russia, Tula, Tula State Pedagogical University

i Надоели баннеры? Вы всегда можете отключить рекламу.