Академический Документы
Профессиональный Документы
Культура Документы
Научная Школа
Введение........................................................................................................................3
1. Опыт зарубежных ученых и практиков.............................................................4
1.1. Известные примеры запусков агент-ориентированных моделей на
суперкомпьютерах......................................................................................................4
1.2. Среда проектирования агент-ориентированных моделей для
высокопроизводительных вычислений — RepastHPC...........................................9
2. Использование графических процессоров для запуска агент-
ориентированных моделей......................................................................................15
2.1. Возможности графических процессоров........................................................15
2.2. Графические процессоры и агентные модели................................................18
3. Адаптация агент-ориентированныхмоделей для суперкомпьютера: наш
подход...........................................................................................................................23
3.1. Проблема масштабирования............................................................................23
3.2. Специализация и низкоуровневая оптимизация............................................24
3.3. Выбор системы поддержки моделирования...................................................24
3.4. Исходная агент-ориентированная модель......................................................27
3.5. Конвертация модели в суперкомпьютерную программу..............................29
3.6. Трансляция модели...........................................................................................29
3.7. Импортирование входных данных..................................................................31
3.8. Генерация классов и преобразование кода функций.....................................31
3.9. Генерация внешних объектов..........................................................................37
3.10. Генерация классов, генерация кода заголовочного и source-файлов.........37
3.11. Генерация симуляции.....................................................................................39
3.12. Дополнительные параметры..........................................................................40
3.13. Сборка готового проекта................................................................................41
3.14. Код агента........................................................................................................41
3.15. Статистика и визуализация временных срезов............................................43
3.16. Доступные для расчетов суперкомпьютеры.................................................43
3.17. Результаты........................................................................................................44
3.18. Заключение......................................................................................................45
4. Выводы....................................................................................................................48
Литература..................................................................................................................50
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
Введение
Работа содержит краткий экскурс по вопросам применения
суперкомпьютерных технологий в общественных науках, и в первую очередь, в
части технической реализации крупномасштабных агент-ориентированных
моделей (АОМ). Суть данного инструмента в том, что благодаря увеличению
мощности компьютеров стало возможным описывать поведение многих
отдельных фрагментов сложной системы. В результате мечта многих
мыслителей научиться объяснять макроявление на основе поведения его
составных частей стала воплощаться в реальность. Например, физики, умеющие
описывать поведение элементарных частиц, создали компьютерную имитацию
действий большого ансамбля таких частиц и стали изучать его поведение в
компьютере, а не в жизни. Таким образом появилось понятие искусственной
реальности.
В свою очередь, компьютерное моделирование — широчайшая,
интереснейшая и интенсивно развивающаяся область исследований,
востребованная сегодня практически во всех сферах человеческой деятельности.
Агент-ориентированный подход к моделированию универсален и удобен для
прикладников в силу своей наглядности, но при этом предъявляет высокие
требования к вычислительным ресурсам. Очевидно, что для прямого
моделирования достаточно длительных социальных процессов в масштабах
страны и планеты в целом нужны весьма значительные вычислительные
мощности.
Суперкомпьютеры позволяют на несколько порядков увеличить число
агентов и других количественных характеристик (узлов сети, размеров
территории) в моделях, первоначально разработанных для использования в
обычных настольных компьютерах. Поэтому суперкомпьютерное
моделирование является логичным и крайне желательным шагом для тех
упрощенных моделей, которые уже прошли успешную практическую апробацию
на обычных компьютерах. Увы, специфика архитектуры современных
компьютеров вовсе не гарантирует, что программное обеспечениекомпьютерной
модели немедленно заработает и на суперкомпьютере. Требуется как минимум
распараллеливание счетного ядра, а зачастую и его глубокая оптимизация,
поскольку в ином случае применение дорогостоящего суперкомпьютерного
счета, скорее всего, себя неоправдает.
В этойработемы рассмотрим опыт зарубежных ученых и практиков по
запуску АОМ на суперкомпьютерах, а также на примере АОМ, разработанной в
ЦЭМИ РАН,проанализируем этапы и методы эффективного отображения
счетного ядра мультиагентной системы на архитектуру современного
суперкомпьютера.
3
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
5
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
Аламосской национальной лаборатории в процессе построения
крупномасштабныхАОМ (EpiSims, TRANSIMS, MobiCom).
Межпроцессорные связи между вычислительными узлами в АОМ часто
требуют синхронизации происходящих в модели событий. ABM++ позволяет
разрабатывать модели, отвечающие этому требованию. К примеру, в социальных
моделях агенты часто перемещаются между различными точками пространства
(работа, дом и т.д.), а на программном уровне этому соответствует смена узла
кластера, и здесь важно, чтобы модельное время принимающего узла было
синхронизировано со временем узла, который агент только что покинул.
Также в ABM++ реализована библиотека MPIToolbox, которая соединяет
интерфейс C++ API (ApplicationProgrammingInterface) и MessagePassingInterface
(MPI) суперкомпьютера и ускоряет передачуданных между узлами кластеров.
ABM++ создавалось в UbuntuLinux — операционной системе с
компиляторами gcc/g++. В качестве интегрированной среды разработки
рекомендуется пакет Eclipseс плагином для поддержки C и C++, а также с
плагином PTP (ParallelToolsPlatform), обеспечивающим разработку и
интеграцию приложений для параллельных компьютерных архитектур. Eclipse
поддерживает интеграцию с TAU (TuningandAnalysisUtilities) PerformanceSystem
— инструментом для разностороннего анализа и отладки программ для
параллельных вычислений, что также упрощает разработку агентных моделей.
Специалисты другой исследовательской группы из того же Института
биоинформатики Вирджинии создали инструмент для изучения особенностей
распространения инфекционных заболеваний внутри различных групп населения
—EpiFast, к достоинствам которого можно отнести масштабируемость и
высокую скорость исполнения. К примеру, имитация социальной активности
жителей Большого Лос-Анджелеса (агломерации с населением свыше 17 млн
человек) с 900 млн связей между людьми на кластере с 96 двухъядерными
процессорами POWER5 заняла менее пяти минут. Такая достаточно высокая
производительность обеспечивается предложенным авторами оригинальным
механизмом распараллеливания [Bisset, Chen, Feng, Kumar, Marathe, 2009].
Как правило, для реализации моделирования социума на группе
процессоров используют несколько естественных способов. К примеру, один из
них базируется на представлении социума в виде набора неструктурированных
связей между индивидуумами. При распараллеливании эти связи равномерно
распределяются на группы, количество которых соответствует числу
процессоров. Минус такого подхода заключается в сложности отслеживания
статуса отдельного человека, т.е. если, к примеру, i-й индивидуум инфицирован,
то информация об этом должна быть синхронизирована во всех группах, так как
мы не знаем, в каких из них содержатся связи данного человека. Необходимость
такой синхронизации влечет за собой большую вычислительную нагрузку.
Другой подход основан на разделении людей — агентов модели в соответствии с
их географическим местоположением. Однако в этом случае, поскольку
население обычно расселено неравномерно, распределение вычислительной
6
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
нагрузки требует применения достаточно сложных алгоритмов для ее
выравнивания, что также создает дополнительную вычислительную нагрузку.
Предлагаемый авторами метод заключается в равномерном распределении
агентов с соответствующими им односторонними исходящими связями по
группам, количество которых равно числу процессоров.Вычислительный
алгоритм основан на взаимодействии ведущих (master) и ведомых (slave)
процессоров, организованном следующим образом: ведущий процессор «знает»,
какой из процессоров обслуживает конкретного агента, а каждый из ведомых
процессоров «знает» только обслуживаемых (локальных) агентов. В процессе
вычислений ведомые процессоры посылают ведущим процессорам запросы
относительно связей с нелокальными агентами. Ведущие процессоры не
осуществляют никаких расчетов, кроме поиска нелокального агента для каждой
внешней связи, и пересылают запросы соответствующим процессорам.
По мнению разработчиков, предложенныйими алгоритм позволяет
проводить эффективные и высокоскоростные симуляции систем с очень
большим числом агентов.
Классические модели распространения эпидемий преимущественно
основывались на использовании дифференциальных уравнений, однако такой
инструментарий затрудняет учет связей между отдельными агентами и их
многочисленных индивидуальных особенностей.АОМ позволяют преодолеть
указанные недостатки.В 1996 г. Джошуа Эпштейн и Роберт Акстелл
опубликовали описание одной из первых АОМ, в которой рассматривается
процесс распространения эпидемий [Epstein, Axtell, 1996]. Агенты модели,
отличающиеся друг от друга восприимчивостью к заболеванию, которая зависит
от состояния иммунной системы, распределены на определенной территории.
При этом в данной модели агенты, число которых всего несколько тысяч,
реализуют достаточно примитивное поведение.
В дальнейшем под руководством Джошуа Эпштейна и Джона Паркера в
Центре социальной и экономической динамики Брукингского института
(CenteronSocialandEconomicDynamicsatBrookings) была построена одна из самых
больших АОМ, включающая все население США, т. е. порядка 300 млн агентов
[Parker, 2007]. Данная модель имеет ряд преимуществ. Во-первых, она позволяет
предсказать последствия распространения заболеваний различного типа. Во-
вторых, она ориентирована на поддержку двух сред для вычислений: одна среда
состоит из кластеров с установленной 64-битной версией Linux, а другая — из
серверов с четырехъядерными процессорами и установленной системой
Windows (в этой связи в качестве языка программирования был выбран Java,
хотя разработчики и не уточняют, какую именно реализацию Java они
использовали). В-третьих, модель способна поддерживать численность агентов
от нескольких сотен миллионов до 6 млрд.
Способ распределения агентов между аппаратными ресурсами состоит из
двух фаз: сначала агенты распределяются по компьютерам, задействованным в
работе, а затем по потокам на каждом из компьютеров. В процессе работы
модели каждый поток может остановиться (в заранее обусловленное время) для
7
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
передачи сообщений другим потокам. Все подготовленные к отправке
сообщения до определенного момента хранятся в пуле сообщений, а затем
одновременно отправляются.Также в реализации модели есть две
вспомогательные утилиты: первая управляет потоками на отдельном
компьютере, а вторая следит за тем, чтобы все сообщения между потоками были
выполнены до момента возобновления вычислительного процесса.
При распределении агентов по аппаратным ресурсам следует учитывать
два обстоятельства: 1) производительность узла напрямую зависит от количества
инфицированных агентов; 2) контакты, предполагающие передачу сообщений
между потоками, требуют гораздо больше вычислительных затрат, чем
контакты, ограничивающиеся локальной информацией. Исходя из этого,
возможны различные распределения агентов. С одной стороны, можно поделить
все рассматриваемое географическое пространство на равные части, количество
которых должно соответствовать числу узлов, а затем определить для каждого
узла какой-либо географический регион. Такое распределение
позволяетсбалансировать вычислительную нагрузку между узлами. С другой
стороны, можно закрепить определенную территорию, представляющую собой
единую административную единицу, за конкретным узлом — в этом случае
вычислительную нагрузку удастся сократить за счет снижения числа контактов,
предполагающих передачу сообщений между потоками. Если первый способ
влечет за собой увеличение вычислительной нагрузки за счет ресурсоемких
контактов, то второй в ряде случаев чреват значительным дисбалансом между
аппаратными ресурсами. К примеру, вспышка какого-либо заболевания в одном
из регионов загрузит один из вычислительных узлов, в то время как некоторые
другие будут простаивать.
Рассматриваемая модель (USNationalModel) включает 300 млн агентов,
перемещающихся по карте страны в соответствии с матрицей корреспонденций
размерностью 4000×4000, специфицированной с помощью гравитационной
модели. На USNationalModel был проведен вычислительный эксперимент,
имитирующий 300-дневный процесс распространения болезни, которая
характеризуется 96-часовым периодом инкубации и 48-часовым периодом
заражения. В исследовании, в частности, было установлено, что
распространение заболевания идет на спад, после того как 65% зараженных
выздоровели и приобрели иммунитет. Эту модель неоднократно использовали
специалисты Университета Джонса Хопкинса (JohnsHopkinsUniversity), а также
Департамента национальной безопасности США для исследований,
посвященных стратегии быстрого реагированиянаразличного рода эпидемии
[Epstein, 2009].
В 2009 г.была созданавторая версияUSNationalModel, включающая 6,5
млрд агентов, спецификация действий которых проводилась с учетом
имеющихся статистических данных. С ее помощью имитировались последствия
распространения вируса гриппа A(H1N1/09) в масштабах всей планеты.
Ранее подобная модель была разработана в Лос-Аламосской национальной
лаборатории (США), и результаты работы с ней были представлены в широкой
8
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
печати 10 апреля 2006 г. [Ambrosiano, 2006].Для технической реализации модели
был использован один из мощнейших по тем временам суперкомпьютеров с
именем Pink, состоящий из 1024 узлов, с двумя процессорами с частотой 2.4 ГГц
и 2 ГБ памяти на каждом.С помощью этой крупномасштабной модели,
включающей 281 млн агентов, были рассмотрены сценарии распространения
различных вирусов, в том числе и H5N1, с учетом тех или иных оперативных
вмешательств: вакцинации, закрытия школ и введения карантина на некоторых
территориях.
Естественно, для подобных задач можно использовать не только
суперкомпьютеры, но и более дешевые решения. Показателен пример ученых
Университета Ньюкасла из Австралии (TheUniversityofNewcastle, Australia),
построивших кластер, включающий 11 узлов — отдельных персональных
компьютеров, объединенных в сеть с пропускной способностью до 100 Мбит/с
[Lynar, Herbert,Chivers, 2009].Программное обеспечение узлов кластера было
одинаковое: операционная система DebianGNU/Linux и JavaParty —
кроссплатформенное программное расширение языка Java (ПО JavaParty
располагаетсредствами для распределения потоков выполнения кода по узлам
кластеров).Для оценки производительности кластера были использованы три
версии одной АОМ, в рамках которой тестировались различные стратегии
агентов, принимающих участие в аукционе. Версии различались сложностью
стратегий агентов.
Основной вывод тестирования заключается в том, что использование
кластеров оправданно лишь тогда, когда вычислительная нагрузка отдельных
узлов достаточно интенсивная; в противном случаераспределение потоков,
наоборот, уменьшает скорость работы модели. Отметим от себя, что такое
поведение кластерных приложений неспецифично.
12
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
метод step, а также осуществляется изменение состояния агентов и запись
данных.
…
voidModel :: initSchedule () {
ScheduleRunner& runner = RepastProcess :: instance () ->
getScheduleRunner ();
runner.scheduleStop (2000) ;
runner.scheduleEvent (1, 1, Schedule :: FunctorPtr (new
MethodFunctor<Model > (this ,& Model :: step)));
runner.scheduleEvent (1.1 , 1, Schedule :: FunctorPtr (new
MethodFunctor<DataSet> (dataSet ,&DataSet :: record)));
Schedule :: FunctorPtrdsWrite = Schedule :: FunctorPtr (new
MethodFunctor<DataSet> (dataSet ,&DataSet :: write));
runner.scheduleEvent (25.2, 25, dsWrite);
runner.scheduleEndEvent (dsWrite);
}
…
13
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
14
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
3
http://www.r-bloggers.com/cpu-and-gpu-trends-over-time/
15
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
Ресурс дальнейшего увеличения производительности основные
разработчики процессоров — компании Intel и AMD — видят в увеличении
числа ядер. Так, в 2011г. получили распространение 8-ядерные процессоры от
компании Intel. Эта же компания еще в 2009 г. продемонстрировала опытный
образец 48-ядерного процессора, представляющего собой одночиповый
облачный компьютер (Single-chipCloudComputer, SCC), дальнейшее развитие
которого состоит в увеличении числа ядер до ста уже в ближайшие годы 4.
Однако в настоящее время в CPU число ядер несоизмеримо меньше, чем в GPU
(рис. 2).
4
http://techresearch.intel.com
16
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
tx++;
ty++;
if (xIndex< width &&yIndex< height)
{
for (ii = -1, neighbrs = 0; ii <= 1; ii++)
{
for (jj = -1; jj<= 1; jj++)
{
if (ii != 0 || jj != 0)
neighbrs += GoLArray[tx+ii][ty+jj];
}
}
if (GoLArray[tx][ty])
{
if (neighbrs == 2 || neighbrs == 3)
{
out[index] = 1;
}
else
{
out[index] = 0;
}
}
else
{
if (neighbrs == 3)
20
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
{
out[index] = 1;
}
else
{
out[index] = 0;
}
}
}
}
…
21
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
В настоящее время в распоряженииразработчика решений с
использованиемCUDA имеется множество инструментов: NVIDIAParallelNsight,
CUDASDK и др., библиотеки CUDABLAS, CUDAFFT и др. Кроме того, есть
компиляторы с автоматическим распараллеливанием —PGI Fortran, CAPS HMPP
C и др.
Особенно приятно, что большинство пакетов для символьных вычислений
(MATLAB, Mathematica) поддерживает CUDA, причем многие технические
сложности, к примеру связанные с управлением памятью GPU, эти программы
осуществляют в автоматическом режиме.
Резюмируя, отметим, что как GPU приближаются к CPU, становясь более
универсальными за счет увеличивающихся возможностей по расчетам чисел с
двойной и одинарной точностью, так и в CPU растет число ядер, а
соответственно и способность к параллельным расчетам. Более того, известно,
что у крупнейшего производителя CPU— компании Intel— есть свои разработки
в области GPU (к примеру, процессор Larrabee), да и у компании AMD тоже. Все
это дает основания предполагать, что GPU и CPU в будущем сольются. На
данный же момент можно говорить о несомненной эффективности GPU для
решения задач, связанных с запуском АОМ.
В следующем разделе мы переходим к описанию разработанного нами
подхода к запуску агентных моделей на суперкомпьютерах.
22
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
3.1.Проблема масштабирования
Важно понимать, что масштабированиепрограмм для суперкомпьютеров
является фундаментальной проблемой. Хотя обычная и суперкомпьютерная
программы реализуют один и тот же функционал, целевые функции их
разработки,как правило, разные.
При начальной разработке сложного прикладного программного
обеспечения в первую очередь стараются сократить издержки на
программирование, обучение персонала, повысить переносимость между
23
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
платформами и т.д., а оптимизацию откладывают на потом. И это вполне
разумно, так как на ранних стадиях приоритетом разработки является
исключительно функционал.
Однако когда разработанное программное обеспечение уже начало
внедряться, часто выясняется, что на больших реальных данных не хватает
производительности. А поскольку современные суперкомпьютеры— этововсе не
разогнанные в тысячи раз персональные компьютеры, для запуска на
суперкомпьютере программу приходится существенно видоизменять. Причем
эффективно сделать это без специальных знаний и навыков удается далеко не
всегда.
При грамотно проведенной работе значительное повышение
эффективности обычно достигается на трех уровнях:
1) распараллеливание счета;
2) специализация вычислительных библиотек по задачам;
3) низкоуровневая оптимизация.
adevs::AbstractSimulator< X >
adevs::Atomic< X >
adevs::Bag< T >
adevs::Bag< T >::iterator
adevs::CellEvent< X >
adevs::CellSpace< X >
adevs::corrected_euler< X >
adevs::crand
adevs::DESS< X >
adevs::Devs< X >
adevs::Digraph< VALUE, PORT >
adevs::Event< X >
adevs::event_locator< X >
adevs::EventListener< X >
adevs::exception
adevs::Hybrid< X >
adevs::InterPoly
adevs::linear_event_locator< X >
adevs::LpGraph
adevs::MessageManager< X >
adevs::ModelWrapper<ExternalType, InternalType>
adevs::mtrand
adevs::Network< X >
adevs::NullMessageManager< X >
adevs::ode_solver< X >
adevs::ode_system< X >
adevs::ParSimulator< X >
adevs::PortValue< VALUE, PORT >
adevs::random_seq
adevs::rv
adevs::Set< T >
adevs::SimpleDigraph< VALUE >
adevs::Simulator< X >
26
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
процесса счета на базе библиотеки Qt —кросс-платформенного инструментария
разработки ПОна языке программирования C++.
Далее мы переходим к краткому описанию разработанной модели и
процедуры ее последующего запуска на суперкомпьютере.
3.6.Трансляция модели
Модели в проекте AnyLogic хранятся в виде XML-файла, содержащего
дерево необходимых для генерации кода параметров, как то: классы агентов,
параметры, элементы презентации, описания UML-диаграмм поведения агентов.
В листинге12 приведен фрагмент XML-кода (дерева, отображающего
структуру модели), сгенерированного программой AnyLogic.
…
<?xmlversion="1.0"encoding="UTF-8"?>
<!--
*************************************************
AnyLogic Project File
*************************************************
-->
<AnyLogicWorkspaceWorkspaceVersion="1.9"AnyLogicVersion="6.5.0.201004141159"AlpVersio
n="6.5.0">
<Model>
<Id>1245270665890</Id>
<Name><![CDATA[Society]]></Name>
<ExcludeFromBuild>false</ExcludeFromBuild>
<EngineVersion>6</EngineVersion>
<JavaPackageName><![CDATA[society]]></JavaPackageName>
<ActiveObjectClasses>
<!-- ========= Active Object Class ======== -->
<ActiveObjectClass>
<Id>1245270665891</Id>
<Name><![CDATA[Main]]></Name>
<ExcludeFromBuild>false</ExcludeFromBuild>
<ClientAreaTopLeft><X>0</X><Y>0</Y></ClientAreaTopLeft>
<PresentationTopGroupPersistent>true</PresentationTopGroupPersistent>
29
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
<IconTopGroupPersistent>true</IconTopGroupPersistent>
<Import><![CDATA[import java.awt.Rectangle;]]></Import>
<StartupCode><![CDATA
// присваиваниерегионамграниц
regions.get(0).set_border(Belgorodskaya_1);
regions.get(1).set_border(Bryanskaya_1);
regions.get(2).set_border(Vladimirskaya_1);
…
2. Генерация классов
Генерация классов (более подробно):
1) построение списка классов;
2) считывание основных параметров класса;
3) считывание переменных;
4) считывание параметров;
5) считывание функций;
6) генерация списка функций;
7) считывание кода функций;
8) преобразование кода функций Java -> C++;
9) считывание используемых фигур и элементов управления;
10) генерация кода инициализации фигур и элементов управления;
11) генерация кода конструктора, деструктора, визуализатора;
12) генерация структуры класса;
13) генерация кода заголовочного и source-файлов.
3. Генерация симулятора
Поиск вершины, хранящей информацию о процессе симуляции
(управляющие элементы, значения важных констант, элементы презентации и
т.д.).
31
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
32
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
for (Class element : containers)
{
body
}
container.add(element)
container.get(element)
container.append(&element)
container.at(index)
Преобразование указателей
В Java нет столь явного, как в С++, различия между объектом и указателем
на объект, поэтому структуры работы с ними не отличаются. Поэтому вводится
список классов, в которых важно использовать операции с указателем на объект,
а не с самим объектом, и отслеживаются все переменные этих классов с
последующей заменой в пределах данной функции при обращении к ним на
соответствующие обращения к указателям.
34
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
}
QString *filename = new QString(Name.nodeValue().split("\n").join(" ").toUtf8());
DocRedactorClass(filename,agent,packagename);
status->append(QString("Init Class ...").append(*filename));
status->append(" ");
j=nextChildByName(item,"Import",-1);
if (j>-2)
{
Include.setNodeValue(item->child(j)->child(0)->
node().nodeValue().split("\n").join(" "));
cur->appendChild(Include);
}
j=nextChildByName(item,"StartupCode",-1);
QStringvv="";
if (j>-2)
{
StartUp.setNodeValue(item->child(j)->
child(0)->node().nodeValue().split("\n").join(" "));
// QStringaa=item->child(j)->child(0)->node().nodeValue().toAscii();
cur->appendChild(StartUp);
vv=item->child(j)->child(0)->node().nodeValue(); //.toUtf8();
}
if (flag)
{
Class.AddConstructor(&vv);
status->append("Translate Constructor ... \n");
}
j=nextChildByName(item,"AgentProperties",-1);
if (j>-2)
{
DomItem *item2=item->child(j);
QDomElementSpType=cTree.createElement("SpaceType");
QDomElementEnvDefLoc=cTree.createElement("DefineLocationfromEnv");
j=nextChildByName(item2,"SpaceType",-1);
if (j>-2)
{
SpType.setNodeValue(item2->child(j)->
child(0)->node().nodeValue().split("\n").join(" "));
AgentProperties.appendChild(SpType);
}
j=nextChildByName(item2,"EnvironmentDefinesInitialLocation",-1);
if (j>-2)
{
EnvDefLoc.setNodeValue(item2->child(j)->
child(0)->node().nodeValue().split("\n").join(" "));
AgentProperties.appendChild(EnvDefLoc);
}
cur->appendChild(AgentProperties);
}
j=nextChildByName(item,"DatasetsCreationProperties",-1);
if (j>-2)
35
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
{
DomItem *item2=item->child(j);
QDomElement AC=cTree.createElement("AutoCreate");
QDomElement RC=cTree.createElement("Recurrence");
j=nextChildByName(item2,"AutoCreate",-1);
if (j>-2)
{
AC.setNodeValue(item2->child(j)->
child(0)->node().nodeValue().split("\n").join(" "));
DataCreationProperties.appendChild(AC);
}
j=nextChildByName(item2,"RecurrenceCode",-1);
if (j>-2)
{
RC.setNodeValue(item2->child(j)->
child(0)->node().nodeValue().split("\n").join(" "));
DataCreationProperties.appendChild(RC);
}
cur->appendChild(DataCreationProperties);
}
j=nextChildByName(item,"Variables",-1);
if (j>-2)
{
TVariablesGenerate(item->child(j),&Variables,flag,&Class);
cur->appendChild(Variables);
}
j=nextChildByName(item,"Functions",-1);
if (j>-2)
{
TFunctionsGenerate(item->child(j),&Functions,flag,&Class);
cur->appendChild(Functions);
}
j=nextChildByName(item,"EmbeddedObjects",-1);
if (j>-2)
{
TContainersGenerate(item->child(j),&EmbeddedObjects,flag,&Class);
cur->appendChild(EmbeddedObjects);
}
j=nextChildByName(item,"Shapes",-1);
if (j>-2)
{
TShapesGenerate(item->child(j),&Shapes,flag,&Class,"");
cur->appendChild(Shapes);
}
return 0;
}
…
36
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
3.9.Генерация внешних объектов
В процессе генерации внешних объектов создается отдельная функция
Main::initShapes(), в которой содержится вся «графическая информация», т. е.в
рамках функции происходит инициализация всех фигур, классы которых
реализованы также в shapes.h.Соответствующий пример приведен в следующем
отрывке кода (листинг 19).
…
points[125]=0;
points[126]=0;
points[127]=0;
Krasnodarsky_3.setPoints(64,points);
Krasnodarsky_3.setXX(65);
Krasnodarsky_3.setYY(549);
}
//Krasnodar
{
Krasnodar.setXX(51);
Krasnodar.setYY(565);
Krasnodar.rx=2;
Krasnodar.ry=2;
Krasnodar.center.setX(0);
Krasnodar.center.setY(0);
}
//Adygeya_3
{
int* points=new int[46];
points[0]=0;
points[1]=0;
points[2]=2;
points[3]=-3;
…
{
public:
Person(adevs::Simulator<IType> *sim);
~Person();
//Events
voidYearFire();
voidBabyBornFire();
int year;
intbabyborn;
//Table Functions
double radius(double T);
voidset_LifeLength(double T);
voidset_Age(double T);
voidset_Region(TRegion *T);
voidset_baby(double T);
voidfindLocation();
voidfindBabyLocation(TRegion *r);
voidInitShapes();
voidvisualise(QPainter *image );
/// Internal transition function.
voiddelta_int();
/// External transition function.
voiddelta_ext(double e, constadevs::Bag<IType>&xb);
/// Confluent transition function.
voiddelta_conf(constadevs::Bag<IType>&xb);
/// Output function.
voidoutput_func(adevs::Bag<IType>&yb);
/// Time advance function.
double ta();
/// Output value garbage collection.
voidgc_output(adevs::Bag<IType>& g);
//Status
typedefenum {NRed,NBlue,NGreen} State;
typedefenum {unborn,startPoint,endPoint,normal,asc,sc,transition1,transition2,transition3,
transition4,transition5,transition6,transition7,transition8,transition9,transition10,
transition11,transition12,transition13,transition14,transition15,transition16,
transition17,transition18,transition19,transition20}
Transition;
State Status;
Transition Current;
Branch Prof;
voidtest_Stat();
doubletest_Trans();
doubletest_Prof();
};
#endif
…
3.11.Генерация симуляции
Для генерации симуляции оказалось достаточно заранее написанных
файлов main.cpp, mainwindow.cpp, mainwindow.h, в которых шаблоны задают тип
основного класса и подключаемые заголовочные файлы. При компоновке
исходного кода шаблоны заменяются на полученные ранее (на стадии
генерации) названия классов.Этого достаточно для двухпоточной симуляции,
которую позднее можнозаменить на соответствующий модуль для
многопроцессорной симуляции.В листинге21 приведен участок кода,
отвечающий за запуск симулятора.
…
void MainWindow::init()
{
srand(time(NULL));
store=new adevs::Digraph<Man*>();
int i;
model=new #CONTAINERCLASSNAME(store);
tim=0;
inited=1;
sim= new adevs::Simulator<IType>(store);
}
void MainWindow::deinit()
{
inited=0;
delete store;
delete #CONTAINERCLASSNAME;
}
void Proceed(adevs::Simulator<IType> *sim, MainWindow *a)
{
while (inited)
{
while (sim->nextEventTime()<tim) sim->execNextEvent();
tim+=temp;
39
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
symb=1;
while ((symb) && (inited)) {}
}
}
void MainWindow::startButtonClicked()
{
if (!startButtonClick)
{
startButtonClick=1-startButtonClick;
startButton->setText("Stop");
init();
repaint();
f1= QtConcurrent::run(Proceed,sim,this);
}
else
{
startButtonClick=1-startButtonClick;
startButton->setText("Start");
inited=0;
f1.waitForFinished();
deinit();
}
}
…
3.12.Дополнительные параметры
На этапе разбора дерева (п. 3.6) параллельно формируется сходное по
строению дерево для генерации C++ кода (рис. 10), с помощью которого на этапе
подготовки к трансляции можно задать необходимые параметры компиляции
(визуализацию тех или иных частей, визуальнуювалидацию распознавания кода,
дополнительные флаги сборки и т.д.).
После этого при команде трансформации с учетом данных параметров и
происходит окончательная компиляция.
40
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
double Person::test_Trans()
{
switch (Current) // Current — текущеесостояниеагента
{
caseunborn:
{
return 0;
}
caseendPoint:
{
if (Region != 0)
{
Region->person = Region->person - 1;
}
get_Main()->remove_people(this);
return MAX;
}
casestartPoint:
{
Current=normal;
return YEAR;
}
}
}
…
42
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
3.15.Статистика и визуализация временных срезов
Ввиду неинтерактивностизапуска программы на больших
суперкомпьютерах сбор выходных данных и визуализация были разделены (это
связано с неравномерностью нагрузки на кластеры в разное время суток, а
монопольный доступ попросту невозможен).После пересчета модели
получившаяся на выходе информация может быть сновавизуализирована, к
примеру, следующим образом (рис. 11).
Таблица 1
Доступные для исследовательской группы суперкомпьютеры
Позиция
Суперкомпьютеры Узлы CPU Ядра RAM/узел TFlops
в Топ-50
1 «Ломоносов» (МГУ) 5 130 10 260 44 000 12GB 414
43
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
4 МВС-100K (МСЦ РАН) 1 256 2 332 10 344 8GB 123
5 «Чебышев» (МГУ) 633 1 250 5 000 8GB 60
3.17.Результаты
За счет применения суперкомпьютерных технологий и оптимизации
программного кода удалось достичь очень высокой производительности.
Сама по себе оптимизация кода и использование C++ вместо
Javaпозволили увеличить скорость выполнения программы. Так, модель
тестировалась при следующих начальных условиях:1) количество агентов — 20
тыс.; 2) прогнозируемый период — 50 лет. По итогам расчетов оказалось, что
время счета модели с использованием ADEVS составило 48 секунд на одном
процессоре, а время счета модели также на одном процессоре с использованием
AnyLogic составило 2 минуты 32 секунды, — а это значит, что среда разработки
была выбрана удачно.
Как уже говорилось выше (п. 3.4), обычный персональный компьютер с
хорошей производительностью способен осуществлять вычисления с
удовлетворительной скоростью над совокупностью агентов числом около 20
тыс. (поведение каждого из них задается приблизительно 20 функциями), и при
этом среднее время пересчета одной единицы модельного времени (один год)
составляет около минуты. При большем числе агентов, к примеру 100 тыс.,
компьютер попросту «зависает».
Задействование 1000 процессоров суперкомпьютера и выполнение
оптимизированного кода позволило увеличить число агентов до 100 млн, а число
модельных лет — до 50. При этом такой гигантский массив вычислений был
выполнен за период времени, приблизительно равный 1 минуте 30 секундам
(этот показатель может несколько меняться в зависимости от типа используемых
процессоров).
Результаты моделирования показали, что при сохранении текущих
тенденций население Сибирского и Дальневосточного федеральных округов
значительно сократится, в то время как в регионах Южного федерального
округа, наоборот, произойдет существенный прирост.Кроме того, проведенное
моделирование дает основания прогнозировать постепенное снижение ВВП, а
также ряда других макроэкономических показателей.
По результатам экспериментов с разработанной АОМ выяснилось, что
масштабирование модели само по себе имеет определенное значение. Так, при
запуске одной и той же версии модели на 50 модельных лет с одинаковыми
параметрами (за исключением числа агентов: в первом случае было 100 млн
агентов, а во втором — 100 тыс. агентов) были получены результаты, а именно
масштабированное число агентов, отличающиеся приблизительно на 4,5%.
44
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
Можно предположить, чтов сложных динамических системах одни и те же
параметры (рождаемость, продолжительность жизни и т. д.) могут приводить к
разным результатам в зависимости от размера социума.
3.18. Заключение
Хотя подобная работа может быть проделана практически для любой
начальной реализации, в идеале нужны системы, которые ликвидировали бы
этот непростой этап,который сегодня затрудняет широкое внедрение
суперкомпьютерного моделирования.
Тот факт, что в исходном представлении модели значительную роль играет
код на языке программирования, отражает фундаментальное свойство агент-
ориентированного подхода: модель — это программа.
Декларативный подход (набор правил вместо обычной программы) может
сильно упростить задачу определения поведения системы.
Проиллюстрируем вышесказанное (рис.12). При возникновении новой
задачи мы получаем для нее некоторые исходные данные, а аналитики
определяют, к какому классу задач она относится, с целью подбора
соответствующей спецификации для построения соответствующей модели. Для
этого используется наиболее адекватный DSL (DomainSpecificLanguage),
который позволяет описывать модели (в качестве IDE, к примеру, может быть
применен Eclipse). Для этого языка, как правило,уже имеется ряд наработок на
прошлых задачах этого класса, которые содержат ужеадаптированные
специфические библиотеки. В совокупности все это образуетметаязык, который
затем реализуется в некоторой среде разработки, и именно в ней, с точки зрения
прикладников, в итоге и решается задача. После тестовых прогонов готовой
программы на локальной машине следует финальная стадия — запуск на
суперкомпьютере[Макаров, Бахтизин, Васенин, Роганов, Трифонов, 2011].
45
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
46
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
47
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
4. Выводы
Итак, в работе мы рассмотрели наиболее известный и успешный опыт
зарубежных ученых и практиков по запуску АОМ на суперкомпьютерах, а также
описали этапы и методы эффективного отображения счетного ядра
мультиагентной системы на архитектуру современного суперкомпьютера на
примере агентной модели, разработанной в ЦЭМИ РАН.
Как было показано, суперкомпьютеры позволяют на несколько порядков
увеличить число агентов и других количественных характеристик (количество
узлов сети, размер территории) в моделях, первоначально разработанных для
использования наобычных настольных компьютерах.
Можно сделать однозначный вывод о том, что суперкомпьютерное
моделирование является логичным и крайне желательным шагом для тех
упрощенных моделей, которые уже прошли успешную практическую апробацию
на обычных компьютерах.
Вместе с тем прямое перенесение компьютерной модели на
суперкомпьютер практически невозможно, так как значительное повышение
эффективности обычно достигается на трех уровнях:
1) распараллеливание счета;
2) специализация вычислительных библиотек по задаче;
3) низкоуровневая оптимизация.
При этом возникает принципиальная проблема, связанная с интенсивным
межагентным взаимодействием и заключающаяся в эффективном
распараллеливании программного кода между процессорами.
Опыт зарубежных исследователей, равно как и наш, показывает, что
существуют два способа ее решения.
Способ 1
При распараллеливании кодаагенты модели равномерно распределяются
на группы, количество которых соответствует числу процессоров. Минус такого
подхода заключается в сложности отслеживания статуса отдельного человека, т.
е. еслиi-й индивидуум, к примеру, инфицирован (в случае агентной модели
распространения эпидемий), то информация об этом должна быть
синхронизирована во всех группах, так как мы не знаем, в каких из них
содержатся связи данного человека. Необходимость синхронизировать
информацию влечет за собой большую вычислительную нагрузку.
Способ 2
Основан на разделении людей — агентов модели — в соответствии с их
географическим местоположением (исходя из первоначального предположения о
том, что в основном общение между агентами происходит в рамках небольшой
социальной группы, проживающей приблизительно в одной местности). В этом
случае географическое пространство делится на равные части, количество
которых соответствует числу узлов.
Если первый способ влечет за собой увеличение вычислительной нагрузки
за счет ресурсоемких контактов, то второй чреват опасностью значительного
дисбаланса между аппаратными ресурсами. К примеру, вспышка какого-либо
48
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
заболевания в одном из регионов загрузит один из вычислительных узлов, в то
время как другие будут простаивать. Таким образом, конкретный способ
распараллеливания зависит от специфики решаемой задачи.
Помимо этого, был рассмотрен опыт реализации АОМ с использованием
графических процессоров, и уже сейчас можно говорить о несомненной
эффективности GPU для решения задач, связанных с запуском агентных
моделей.
49
3.Адаптация агент-ориентированных моделей для суперкомпьютера: наш подход
Литература
1. Берилло А. NVIDIACUDA – неграфические вычисления на графических
процессорах // Информационный ресурс сети интернет IXBT.com, 23.09.2008 г. -
http://www.ixbt.com/video3/cuda-1.shtml.
2. Макаров В.Л., Бахтизин А.Р., Васенин В.А., Роганов В.А., Трифонов И.А.
Средства суперкомпьютерных систем для работы с агент-ориентированными
моделями / Программная инженерия, № 3, 2011.
3. Ambrosiano Nancy (2006): Avian flu modeled on supercomputer. Los Alamos
National Laboratory NewsLetter, Vol. 7, No. 8, 2006.
4. Collier Nick (2012): Repast HPC Manual, February 23, 2012
[http://repast.sourceforge.net].
5. Deissenberg Christophe, Sander van der Hoog, Herbert Dawid (2008): EURACE:
A Massively Parallel Agent-Based Model of the European Economy / Document de
Travail n°2008-39, 24 Juin 2008.
6. Douglas J. Roberts, Diglio A. Simoni, Stephen Eubank. A National Scale
Microsimulation of Disease Outbreaks. RTI International, Research Triangle Park,
NC; Virginia Bioinformatics Institute, Blacksburg, VA, 2007
7. Epstein J.M., Axtell R.L. (1996): Growing Artificial Societies: Social Science
from the Bottom Up Ch. V., MIT Press.
8. Epstein J.M. (2009): Modelling to contain pandemics / Nature 460, 687, 6 August
2009.
9. KalyanPerumalla and Brandon Aaby (2008): Data Parallel Execution Challenges
and Runtime Performance of Agent Simulations on GPUs. Proceedings of Spring
Computer Simulation Conference, Ottawa, Canada, April 2008.
10. Keith R. Bisset, Jiangzhuo Chen, XizhouFeng, V.S. Anil Kumar, Madhav V.
Marathe. EpiFast: A Fast Algorithm for Large Scale Realistic Epidemic Simulations
on Distributed Memory Systems ICS’09, June 8-12, 2009, Yorktown Heights, New
York, USA.
11. Parker Jon (2007): A Flexible, Large-Scale, Distributed Agent Based Epidemic
Model. Center on Social and Economic Dynamics, Working Paper No. 52.
12. Timothy M. Lynar, Ric D. Herbert and William J. Chivers. Implementing an
agent based auction model on a cluster of reused workstations. International Journal of
Computer Applications in Technology, Volume 34 Issue 4, 2009.
13. http://www.r-bloggers.com/cpu-and-gpu-trends-over-time/
14. http://techresearch.intel.com
15. http://repast.sourceforge.net/repast_hpc.html
16. http://www.nvidia.ru
50