чем длиннее интервал параллельного использования старой и новой систем
Внедрение
При стратегии параллельного перехода, в организации одновременно функционируют и старая, и замещающая ее система до тех пор, пока каждый сотрудник не убедиться в том, что новая система функционирует корректно. Это наиболее безопасный способ перехода, так как при возникновении ошибок, данные из старой системы могут использоваться в качестве резервной копии. Однако такой подход является очень дорогостоящим, и при одновременном функционировании двух систем, могут потребоваться дополнительные ресурсы.
При стратегии прямого перехода, в означенный день старая система полностью заменяется новой. На первый взгляд, такая стратегия кажется менее дорогостоящей, чем стратегия параллельного перехода. Однако этот подход является достаточно рискованным и потенциально может быть более дорогостоящим, чем параллельный переход в том случае, если возникают серьезные проблемы при функционировании новой системы. При таком подходе отсутствует система, к которой можно будет вернуться.
При пофазовой стратегии перехода, новая система вводится поэтапно либо по отдельным функциям, либо по подразделениям организации.
План перехода на новую систему представляет собой график всех работ, которые необходимо выполнить для ввода в действие новой системы. Обычно, больше всего времени занимает конвертация данных. Данные из старой системы должны быть перенесены в новую либо вручную, либо при помощи специальных про- граммных модулей. Затем, эти данные должны быть тщательно проверены на соответствие и полноту.
Переход от старой системы к новой подразумевает, что конечные пользователи должны быть обучены работе с новой системой. В процессе перехода подготавливается подробная документация, описывающая работу системы, как с технической точки зрения, так и с точки зрения конечных пользователей, для ее дальнейшего использования при обучении и в ежедневной работе. Недостаток обучения и документации может повлечь за собой несостоятельность системы. Таким образом, этот этап разработки системы является очень важным.
В России решили ограничить использование личных автомобилей
В рамках транспортной стратегии России до 2035 года россиян решили ограничить в использовании личных автомобилей ради общественного транспорта. Об этом пишет «Коммерсантъ» со ссылкой на соответствующее сообщение на сайте правительства.
Материалы по теме
Не въезжаем.
Россия годами загрязняла природу выбросами.
Такие меры направлены на то, чтобы владельцы машин наносили меньший вред окружающей среде. В рамках плана предлагается минимизировать использование транспортных средств с неэкологичными двигателями, установить «цифровой контроль» за дорожным шумом и более чем в тысячу раз нарастить число заправок для электромобилей. Гражданам, которые в таких условиях останутся верны своим автомобилям, предложат «совместное использование транспортных средств» с другими россиянами, пишет «Ъ».
Документ в том числе включает долгосрочные планы по развитию автомобильного, железнодорожного, водного, воздушного и других видов транспорта на ближайшие 15 лет. На эти цели предполагается потратить 60 триллионов рублей.
Детали стратегии
Как пишет издание, авторы стратегии указали на необходимость снизить выбросы в атмосферу. Они отмечают, в частности, что 61 процент загрязняющих веществ, эмитируемых транспортом, приходится на автотранспорт. При этом с помощью обновления парка проблему решить невозможно, поскольку 82 процента от всех вредных выбросов появляется за счет стирания дорожного покрытия и «составных частей» автомобиля.
Материалы по теме
Почти даром
Точка невозврата.
По этой причине в правительстве предлагают ограничить использование личных авто, пересаживая их владельцев на общественный транспорт. Такой вариант, сказано в стратегии, является «безальтернативным».
Авторы документа в качестве одного из сценариев рассматривают поэтапное установление ограничений на использование транспортных средств «низких экологических классов». Это предполагается осуществить в том числе за счет создания специальных экологических зон, куда запрещено въезжать машинам с неэкологичными двигателями.
Для борьбы с шумом от транспорта авторы инициативы предлагают ограничить скоростной режим внутри жилых кварталов, ставить шумозащитные экраны, а также внедрять «цифровые методы контроля уровня шума».
Кроме того, правительство намерено построить сеть заправок для электромобилей в России. По предварительным оценкам, необходимо около 250 тысяч станций для европейской части России.
В городах собираются развивать улично-дорожную сеть, за их пределами — ликвидировать «узкие места» на нынешних дорогах, а также строить новые обходы.
В городах США 30-35 процентов застроенной территории выделяется под дороги или улицы, в Европе — порядка 25 процентов. Российские же города, даже самые развитые, балансируют на отметке в 10 процентов. Поэтому введение ограничений по использованию автомобилей неизбежно. Нужно задумываться и о регулировании размера автопарка, как это сделано в Сингапуре, Японии
Другие планы транспортной стратегии
В рамках транспортной стратегии также предполагается, что более 80 процентов пассажиров автомобильного, железнодорожного и воздушного транспорта в России должны будут предоставлять свои биометрические данные для проезда.
Благодаря этому увеличится уровень комфорта и безопасности пассажиров. Также ожидается, что к 2035-му 30 процентов общественного транспорта станет беспилотным в 20 крупнейших городах России. При этом доля беспилотных грузоперевозок по основным магистралям возрастет до 50 процентов.
Также высказывались идеи о появлении к 2035 году бесплатного общественного транспорта. Однако инициативу отказались включать в новую версию документа.
Параллельные заметки №1 – технология OpenMP
В ближайшие несколько постов мы расскажем о практическом использовании многоядерных процессоров. Ведь все-таки что бы ни говорилось о многоядерности, в любом случае программы надо «обучать» эффективному использованию нескольких ядер. А в этом первом посте будет анонс и первая «вводная» заметка.
Технологии параллельного программирования
Сразу же надо сказать, что существует довольно много разных технологий параллельного программирования. Причем эти технологии отличаются не только и не столько языками программирования, сколько архитектурными подходами к построению параллельных систем.
Например, какие-то технологии предполагают построение параллельных решений на основе нескольких компьютеров (как одного, так и разных типов), другие же предполагают именно работу на одной машине с несколькими процессорными ядрами.
Системы на базе нескольких компьютеров относят к классу систем для распределенных вычислений. Подобные решения используются довольно давно, их хорошо понимают профессионалы индустрии, по ним имеется довольно много литературы. Наиболее яркий пример технологии распределенных вычислений — MPI (Message Passing Interface — интерфейс передачи сообщений). MPI является наиболее распространённым стандартом интерфейса обмена данными в параллельном программировании, существуют его реализации для большого числа компьютерных платформ. MPI предоставляет программисту единый механизм взаимодействия ветвей внутри параллельного приложения независимо от машинной архитектуры (однопроцессорные/многопроцессорные с общей/раздельной памятью), взаимного расположения ветвей (на одном процессоре или на разных).
Так как MPI предназначен для систем с раздельной памятью, то использовать его для организации параллельного процесса в системе с общей памятью не лучшая идея. Это будет слишком избыточно и сложно, поэтому-то и начали развиваться решения вроде OpenMP. Хотя, конечно же, ничто не мешает делать MPI-решения для одной машины.
А вот системы параллельного программирования для работы на одной машине, начали развиваться относительно недавно. Нет, конечно же, не стоит думать, что это принципиально новые идеи, но именно с приходом (вернее с предстоящим приходом) многоядерных систем на рабочий стол, программистам стоит обратить свое внимание на такие технологии как OpenMP, Intel Thread Building Blocks, Microsoft Parallel Extensions и ряд других.
Очень важно, чтобы технология параллельного программирования поддерживала возможность делать программу параллельной постепенно. Да, понятно, что идеальную параллельную программу надо сразу писать параллельной, а еще лучше на каком-нибудь функциональном языке, где вопрос распараллеливания вообще не стоит… Но программисты живут и работают в реальном мире, в котором вместо новомодного функционального F# есть 10 МБайт кода в лучшем случае на C++, а то и вообще на C. И этот код надо постепенно распараллеливать. В этом случае технология OpenMP (к примеру) будет очень удачным выбором. Она позволяет, выбрав в приложении наиболее нуждающиеся в параллелизации места, в первую очередь сделать параллельными именно их. На практике это выглядит так. С помощью какого-либо инструмента для профилирования программист ищет в программе «узкие места», которые работают наиболее долго. Почему с помощью инструмента? Потому что силой мысли в малоизвестном проекте размером в 10 Мбайт найти «узкие места» не удастся. Затем эти узкие места программист делает параллельными с помощью OpenMP. После этого, можно искать следующие узкие места и так далее, до тех пор, пока не будет получена желаемая производительность приложения. Процесс разработки параллельной версии можно прерывать, выпускать промежуточные релизы, возвращаться к нему по мере необходимости. Именно поэтому в частности технология OpenMP стала довольно популярной.
Что же такое OpenMP?
OpenMP (Open Multi-Processing) — это набор директив компилятора, библиотечных процедур и переменных окружения, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью (SMP-системах).
Первый стандарт OpenMP был разработан в 1997 г. как API, ориентированный на написание легко переносимых многопоточных приложений. Сначала он был основан на языке Fortran, но позднее включил в себя и языки Си и Си++.
Интерфейс OpenMP стал одной из наиболее популярных технологий параллельного программирования. OpenMP успешно используется как при программировании суперкомпьютерных систем с большим количеством процессоров, так и в настольных пользовательских системах или, например, в Xbox 360.
Разработку спецификации OpenMP ведут несколько крупных производителей вычислительной техники и программного обеспечения, чья работа регулируется некоммерческой организацией «OpenMP Architecture Review Board» (ARB).
В OpenMP используется модель параллельного выполнения «ветвление-слияние». Программа OpenMP начинается как единственный поток выполнения, называемый начальным потоком. Когда поток встречает параллельную конструкцию, он создает новую группу потоков, состоящую из себя и некоторого числа дополнительных потоков, и становится главным в новой группе. Все члены новой группы (включая главный) выполняют код внутри параллельной конструкции. В конце параллельной конструкции имеется неявный барьер. После параллельной конструкции выполнение пользовательского кода продолжает только главный поток. В параллельный регион могут быть вложены другие параллельные регионы, в которых каждый поток первоначального региона становится основным для своей группы потоков. Вложенные регионы могут в свою очередь включать регионы более глубокого уровня вложенности.
Число потоков в группе, выполняющихся параллельно, можно контролировать несколькими способами. Один из них — использование переменной окружения OMP_NUM_THREADS. Другой способ — вызов процедуры omp_set_num_threads(). Еще один способ — использование выражения num_threads в сочетании с директивой parallel.
Анонс ближайших заметок по параллельному программированию
Этой записью мы начинаем небольшой цикл публикаций посвященных знакомству с технологией OpenMP и инструментарием для разработки параллельных приложений. В следующих заметках вы узнаете:
• какие инструменты нужны для разработки параллельных программ;
• как создать с нуля параллельную программу;
• как добавить в существующую программу параллельное выполнение с помощью технологии OpenMP;
• какие типовые проблемы возникают при разработке OpenMP –приложений и как их диагностировать;
• оптимизация параллельных программ.
Ждите следующего выпуска уроков, а в комментариях, пожалуйста, отпишите, какие темы параллельного программирования интересуют вас. И тогда мы будем делать дальнейшие заметки с учетом ваших пожеланий.
Содержание
Обзор
Другие виды усыновления
Место в процессе внедрения
Процесс
На рисунке 1 представлен обзор параллельного процесса внедрения. В левой части изображен поток действий, которые способствуют процессу. Действия, которые выполняются одновременно, отмечены толстой черной линией. Когда параллельное выполнение действий завершено, действия снова объединяются в аналогичную черную линию. Если нет стрелки от одного действия к другому, это указывает на то, что они являются агрегатами более крупного действия, указанного выше. Мероприятия разделены на четыре основных этапа:
Основные этапы подразделяются на другие виды деятельности, которые будут кратко описаны в таблицах с 1-1 по 1-4.
Правая часть модели описывает данные, участвующие в процессах. Некоторые из этих концепций, изображенных в виде пары перекрывающихся открытых прямоугольников, можно разделить на несколько концепций. Пара перекрывающихся закрытых прямоугольников указывает на закрытую концепцию, что означает, что ее можно разделить на большее количество концепций, но это не представляет дальнейшего интереса для параллельного процесса принятия. Рисунок в форме ромба указывает на то, что связанное с ним понятие служит совокупным понятием и что эти понятия состоят из других понятий. Наконец, открытая стрелка представляет отношение суперкласс-подкласс. Понятие, связанное со стрелкой, является суперклассом связанных с ним понятий. Этот синтаксис на рисунке 1 соответствует стандартам Unified Modeling Language ( UML ). Концепции на рисунке 1 определены в таблице 2. Более подробный контекст для этих подмерений в процессе будет дан под таблицами.
Понятия из рисунка 1 определены в таблице 2-1 ниже.
Основные функционирующие объекты, составляющие продукт, например, аппаратное обеспечение, программное обеспечение. Также организованный и дисциплинированный подход к выполнению задачи, например, система отчетов о сбоях (ISO 9000)
Определение стратегии параллельной реализации
Риск против затрат
Когда необходимо внедрить новую систему в соответствии с подходом «большого взрыва», высок риск отказа (Lee, 2004). Когда организация сильно требует изменения старую (унаследованную) систему, компромисс между дополнительными затратами на менее рискованный параллельный подход должен быть в пользу этих дополнительных затрат (Lee, 2004), несмотря на это, как мы видим, что внедрение ERP в большинстве случаев следует за большим взрывом (Microsoft, 2004, Yusuf, 2004).
Разработка сценария реализации
IT-требования
Организационные требования
Параллельный процесс внедрения является очень напряженным и требует хорошо подготовленных сотрудников, которые могут справляться с допущенными ошибками без консервативного стремления к старой системе. (Исон, 1988)
Планирование времени
Подготовка организации
Оценка требований
Оценка требований включает переопределение сценария реализации. Разработанные ИТ-требования и (если возможно) организационные требования должны быть протестированы. Можно запустить некоторые тесты, в которых можно оценить организационные обязанности (Rooijmans, 2003), а также ИТ-требования. Здесь также снова важны поддержка и участие высшего руководства (Eason, 1988). Если они не предоставляют ресурсы для оценки, реализация может быть неудачной как прямое следствие. После этой оценки сценарий реализации переопределяется в более явный сценарий преобразования.
Сценарий конверсии
Таким образом, сценарий преобразования представляет собой план организационных изменений во всех аспектах. Однако есть две темы, которым еще не было уделено должного внимания в контексте параллельного внедрения.
Преобразование
Система контроля
Оценка / Практическая значимость
Из тематических исследований можно извлечь несколько уроков: пример системы DMV штата Невада, описанный Ли (2004), показывает, что внедрение нового процесса также может иметь политические последствия. Когда система, которая будет изменена, влияет на широкую публику, и это не только внутренняя система, которая изменяется, есть еще некоторые давления, которые влияют на организацию. В этом случае такие понятия, как имидж и репутация компании, могут кардинально измениться, если клиенты будут сталкиваться с большими задержками, например, при общении или заказе товаров. Предлагается, чтобы, если система политически чувствительна, больше внимания следует уделять методу преобразования и, предпочтительно, выбрать параллельное внедрение, поскольку существует меньший риск.
Серия уроков, извлеченных из ряда реальных сценариев внедрения новой системы портфелей, выполненных консалтинговой фирмой (Venture, 2004), показывает некоторые интересные уроки, извлеченные из этой области. они, кажется, идеально подходят для решения проблем, упомянутых для общего параллельного процесса усыновления, основанного на сочетании научных исследований. Чтобы обобщить:
Есть также по крайней мере две трудности с параллельным преобразованием, которые могут сделать его использование непрактичным в 21 веке, хотя это было основным продуктом отраслевой практики, когда входные данные состояли из колоды перфокарт или катушек с лентой. Эти:
1. Непрактично ожидать, что конечные пользователи, будь то клиенты, рабочие производственной линии или почти кто-либо другой, будут вводить каждую транзакцию дважды через разные интерфейсы.
2. Различия во времени между двумя многопользовательскими интерактивными системами могут давать разные результаты, даже если обе системы работают правильно, внутренне согласованы и могут успешно использоваться сами по себе.
В результате параллельное преобразование сегодня ограничено несколькими конкретными ситуациями, такими как системы бухгалтерского учета, где абсолютная проверяемость результатов является обязательной, где все пользователи являются внутренними по отношению к организации и понимают это требование, и где порядок действий не может быть разрешен. влияют на вывод. На практике сегодня более актуальны методы пилотного и поэтапного преобразования.
Введение в проблематику разработки параллельных программ
В связи с тем, что разработка параллельного программного обеспечения на сегодняшний день представляется достаточно сложной задачей, крайнюю актуальность приобретают вопросы теоретической подготовки специалистов и изучение методологии проектирования таких систем. В рамках статьи приведена историческая и техническая информация, подготавливающая программиста к усвоению знаний в области разработки параллельных вычислительных систем.
Читателю
Данный документ является частью серии статей, посвященных вопросам создания качественных и эффективных программных решений для современных 64-битных многоядерных систем. Ознакомиться с другими статьями вы можете на сайте http://www.viva64.com.
Введение
Программистам, начинающим использовать многопроцессорные ЭВМ, очень трудно сориентироваться во всех тонкостях их использования при разработке программ по прикладным задачам. Как показывает практика, трудности начинаются, когда к разрабатываемому параллельному программному обеспечению предъявляется требование его эффективности и мобильности. Это связано с тем, что универсальные средства, облегчающие труд программиста и обеспечивающие полноценный доступ к отладочной информации, находятся в стадии разработки. Проблема заключается в отсутствии стандартов в области создания и отладки программ для параллельных систем, по причине молодости компьютерной отрасли. Соответственно на настоящий момент отсутствуют логически завершенные учебные курсы по параллельному программированию для начинающих.
Необходимо отметить, что при составлении программных средств под суперЭВМ (как средств управления, так и средств для решения прикладных задач) особое внимание следует уделять технике программирования, то есть построению логической архитектуры программы. Здесь подразумевается развитие и дополнение алгоритмов распараллеливания, повышающих эффективность их выполнения на многопроцессорных ЭВМ.
1. История развития многопроцессорных комплексов и параллельных вычислений
В наше время круг задач, требующих для своего решения применения мощных вычислительных ресурсов, еще более расширился. Это связано с тем, что произошли фундаментальные изменения в самой организации научных исследований. Вследствие широкого внедрения вычислительной техники, значительно усилилось направление численного моделирования и численного эксперимента [2]. Численное моделирование, заполняя промежуток между физическими экспериментами и аналитическими подходами, позволило изучать явления, которые являются либо слишком сложными для исследования аналитическими методами, либо слишком дорогостоящими или опасными для экспериментального изучения. При этом численный эксперимент позволил значительно удешевить процесс научного и технологического поиска. Стало возможным моделировать в реальном времени процессы интенсивных физико-химических и ядерных реакций, глобальные атмосферные процессы, процессы экономического и промышленного развития регионов и т.д. Очевидно, что решение таких масштабных задач требует значительных вычислительных ресурсов.
Принципиально важными решениями в повышении производительности вычислительных систем были: введение конвейерной организации выполнения команд; включение в систему команд векторных операций, позволяющих одной командой обрабатывать целые массивы данных; распределение вычислений на множество процессоров. Сочетание этих 3-х механизмов в архитектуре суперкомпьютера Earth Simulator, состоящего из 5120 векторно-конвейерных процессоров, и позволило ему достичь рекордной производительности, которая в 20000 раз превышает производительность современных персональных компьютеров.
Условность разделения связана в первую очередь с быстрым прогрессом в развитии микроэлектронных технологий. Производительность компьютеров в каждом из классов удваивается в последние годы примерно за 18 месяцев (в соответствии с так называемым законом Мура). В связи с этим, суперкомпьютеры начала 90-х годов зачастую уступают в производительности современным рабочим станциям, а персональные компьютеры начинают успешно конкурировать по производительности с рабочими станциями. Тем не менее, попытаемся каким-то образом классифицировать их.
Персональные компьютеры. Как правило, в этом случае подразумеваются однопроцессорные системы на платформе Intel или AMD, работающие под управлением однопользовательских операционных систем (Microsoft Windows и др.). Используются в основном как персональные рабочие места.
Рабочие станции. Это чаще всего компьютеры с RISC процессорами с многопользовательскими операционными системами, относящимися к семейству ОС UNIX. Содержат от одного до четырех процессоров. Поддерживают удаленный доступ [6]. Могут обслуживать вычислительные потребности небольшой группы пользователей.
Суперкомпьютеры. Отличительной особенностью суперкомпьютеров является то, что это, как правило, большие и, соответственно, чрезвычайно дорогие многопроцессорные системы. В большинстве случаев в суперкомпьютерах используются те же серийно выпускаемые процессоры, что и в рабочих станциях. Поэтому зачастую различие между ними не столько качественное, сколько количественное. Например, можно говорить о 4-х процессорной рабочей станции фирмы SUN и о 64-х процессорном суперкомпьютере фирмы SUN. Скорее всего, в том и другом случае будут использоваться одни и те же микропроцессоры.
Кластерные системы. В последние годы широко используются во всем мире как дешевая альтернатива суперкомпьютерам. Система требуемой производительности собирается из готовых серийно выпускаемых компьютеров, объединенных опять же с помощью некоторого серийно выпускаемого коммуникационного оборудования. Таким образом, многопроцессорные системы, которые ранее ассоциировались в основном с суперкомпьютерами, в настоящее время прочно утвердились во всем диапазоне производимых вычислительных систем, начиная от персональных компьютеров и заканчивая суперкомпьютерами на базе векторно-конвейерных процессоров. Это обстоятельство, с одной стороны, увеличивает доступность суперкомпьютерных технологий, а с другой, повышает актуальность их освоения, поскольку для всех типов многопроцессорных систем требуется использование специальных технологий программирования для того, чтобы программа могла в полной мере использовать ресурсы высокопроизводительной вычислительной системы [7, 8]. Обычно это достигается разделением программы с помощью того или иного механизма на параллельные ветви, каждая из которых выполняется на отдельном процессоре.
2. Использование многопроцессорных систем
Суперкомпьютеры разрабатываются в первую очередь для того, чтобы с их помощью решать сложные задачи, требующие огромных объемов вычислений. При этом подразумевается, что может быть создана единая программа, для выполнения которой будут задействованы все ресурсы суперкомпьютера. Однако не всегда такая единая программа может быть создана или ее создание целесообразно. В самом деле, при разработке параллельной программы для многопроцессорной системы мало разбить программу на параллельные ветви. Для эффективного использования ресурсов необходимо обеспечить равномерную загрузку всех процессоров, что в свою очередь означает, что все ветви программы должны выполнить примерно одинаковый объем вычислительной работы. Однако не всегда этого можно достичь. Например, при решении некоторой параметрической задачи для разных значений параметров, время поиска решения может значительно различаться. В таких случаях, видимо, разумнее независимо выполнять расчеты для каждого параметра с помощью обычной однопроцессорной программы [9]. Но даже в таком простом случае могут потребоваться суперкомпьютерные ресурсы, поскольку выполнение полного расчета на однопроцессорной системе может потребовать слишком длительного времени. Параллельное выполнение множества программ для различных значений параметров позволяет существенно ускорить решение задачи. Наконец, следует отметить, что использование суперкомпьютеров всегда более эффективно для обслуживания вычислительных потребностей большой группы пользователей, чем использование эквивалентного количества однопроцессорных рабочих станций, так как в этом случае с помощью некоторой системы управления заданиями легче обеспечить равномерную и более эффективную загрузку вычислительных ресурсов.
В отличие от обычных многопользовательских систем, для достижения максимальной скорости выполнения программ операционные системы суперкомпьютеров, как правило, не позволяют разделять ресурсы одного процессора между разными, одновременно выполняющимися программами. Поэтому, как два противоположных варианта, возможны следующие режимы использования n-процессорной системы:
3. Параллелизм в задачах численного моделирования
3.1. Статистическая и динамическая балансировка
Отметим, что метод геометрического параллелизма является методом статической балансировки загрузки, заранее определяя обрабатываемую каждым процессором часть сетки. Статическая балансировка эффективна при условии, что априорной информации достаточно для предварительного распределения общей вычислительной нагрузки поровну между процессорными узлами. Метод коллективного решения является методом динамической балансировки загрузки. В его рамках перед началом вычислений не известно, какие именно узлы сетки будут обработаны тем или иным процессором. Процессоры получают задания динамически, по мере выполнения уже поступивших, что обеспечивает равномерную загрузку процессорных узлов при наличии большого набора независимых заданий.
3.2. Параллелизм типа «коллективного решения»
Параллелизм типа «коллективного решения» удобен при проведении вычислений, распадающихся на большое количество однотипных задач, каждая из которых решается независимо от остальных. Передачи данных между такими задачами нет, а значит, полностью отсутствует необходимость их взаимной синхронизации.
Рассмотрим в качестве примера разностную сетку как набор независимых узлов, в каждом из которых следует определять ряд параметров на каждом временном слое с помощью решения системы ОДУ с соответствующими начальными данными [12]. Решение системы в каждом узле зависит только от локальных значений переменных в этом узле. При этом вычислительная нагрузка в различных узлах значительно отличается. При построении параллельной программы с помощью классического метода «коллективного решения» используется следующая стратегия распределения вычислительной нагрузки.
В начале очередного шага каждый из процессоров ожидает новую порцию данных, обрабатывает ее, возвращает результат и снова переходит к ожиданию очередного задания, пока не получит в ответ вместо задания сообщение, что все узлы сетки уже обработаны.
Отсутствие необходимости выполнения синхронизации между элементарными задачами позволяет передавать разным процессорам разное количество расчетных узлов по мере окончания обработки данных. Тем самым решается проблема равномерной загрузки процессоров, даже если время решения системы уравнений для разных узлов сетки или производительность процессоров сильно отличается.
В случае неоднородной вычислительной нагрузки при расчете разных узлов пространственной сетки использование принципа «коллективного решения» потенциально позволяет значительно снизить время простоя и повысить эффективность распараллеливания по сравнению с рассмотренным далее методом геометрического параллелизма. Преимущества этого метода в полной мере могут быть реализованы, если данные для обработки изначально сосредоточены на одном из процессоров, который в этом случае может выполнять управляющие функции. При исходных данных, изначально распределенных между процессорами случайным образом, использование метода требует предварительного сбора данных, соответствующих всем расчетным точкам, на одном из процессоров. Необходимость предварительного копирования данных со всех процессоров на один и последующего возврата результатов с этого одного процессора процессорам-«владельцам» точек в значительной мере снижают эффективность данного метода, что делает его мало пригодным для практического применения при решении многих задач численного моделирования.
3.3. Геометрический параллелизм
Исходную задачу мы можем разбить на группу областей, независимых друг от друга на каждом расчетном шаге и пересекающихся только по границе разбиения. Т.е. мы рассчитываем (n+1)-м временной слой в каждой области, затем согласуем границы и переходим к расчету следующего слоя.
Появятся по две «фиктивные» точки слева для первой области и справа для последней области. Таким образом, мы получаем четыре независимых на каждом шаге по времени процесса. Для перехода к следующей итерации необходимо согласование границ, так как первая область должна передать второй ее левую границу для следующего шага по времени, в свою очередь, вторая область должна предать первой ее правую границу, и т.д.
Данная методика может быть обобщена на большинство численных методов, основанных на уравнениях для моделирования физических процессов.
4. Эффективность параллельной программы
4.1. Понятие эффективной параллельной программы
Применение суперЭВМ налагает особые требования на вновь создаваемые программные средства, обеспечивающие надежную и экономичную реализацию алгоритма при решении прикладных задач. Эффективность использования суперЭВМ проявляется при создании сложных исследовательских комплексов и экспертных систем.
Частично проблема выбора оптимального числа параллельных ветвей в соответствии с критерием минимума суммарных затрат времени может быть решена в автоматах генерации параллельной программы. Частный случай разрешения этой проблемы для вычислительных систем с MIMD архитектурой рассмотрен в статье Костенко В.А. «К вопросу об оценке оптимальной степени параллелизма» [14].
Эффективность использования многопроцессорных вычислительных систем в значительной мере определяется качеством прикладных параллельных программ. Программа считается эффективной, когда во время ее выполнения загружены все процессоры, выделенные под процессы. Но практически это не реализуемо.
4.2. Свойства идеальной параллельной программы
Отметим, что идеальная параллельная программа обладает следующими свойствами:
Увеличение степени эффективности параллелизма (уменьшение временных затрат на накладные расходы) достигается следующими способами:
4.3. Адаптации программ к архитектуре параллельных компьютеров
Основные этапы самого процесса адаптации программ к архитектуре параллельных компьютеров, а также описание задач, возникающих на каждом из этих этапов, представлены в статье Антонова А.С. «Эффективная адаптация последовательных программ для современных векторно-конвеерных и массивно- параллельных супер-ЭВМ» [15]. На некоторые из задач, с которыми столкнулись авторы проведенного исследования, хотелось бы обратить особое внимание. Среди них:
Отметим, что решение этих задач позволяет осуществить эффективный перенос последовательной программы на параллельную архитектуру.
Процесс разработки параллельной программы очень длителен и трудоемок, не смотря на то, что, как правило, на момент ее создания уже имеется реализация ее «последовательного» аналога. Обычно программа разрабатывается на машине с одной архитектурой, а ее практическое применение производится на другой, с отличной от первой топологией, но при этом более мощной. Такой подход позволяет экономить машинное время на более мощных суперЭВМ, число которых на порядок меньше, по сравнению с более дешевыми моделями суперкомпьютеров.
При переносе параллельной программы на машины с различной архитектурой перед программистом встает проблема неработоспособности однажды разработанных параллельных процедур.
На сегодняшний день не существует универсальных средств адаптации программ к конкретной архитектуре суперЭВМ, поэтому большую часть этой проблемы приходится решать вручную, что делает процесс очень трудоемким [15]. Для облегчения труда программиста в математических институтах РАН разрабатываются библиотеки эффективных процедур и алгоритмов под конкретные архитектуры суперЭВМ (УРО РАН, НИВЦ МГУ им. М.В.Ломоносова). Обращение к этим библиотекам может частично облегчить труд программиста-прикладника не только на этапе модификации программы под более мощные суперЭВМ, но и на этапе первичной разработки параллельной программы.
5. Проблемы отладки и мониторинга
Проблема отладки и мониторинга очень актуальна, ввиду отсутствия менеджеров, которые предоставляли бы разработчику прикладного ПО промежуточную информацию, особенно актуальную на начальном этапе проектирования [16]. Ситуация становится еще сложнее, если речь идет об управлении распределенными разнородными системами. В общем случае задача отладки и мониторинга таких систем ставится следующим образом [17, 18]. Имеется сеть разнородных по аппаратным и/или программным платформам узлов, на каждом из которых параллельно выполняется множество процессов (нитей) [19]. Имеется также совокупность пользователей, каждый из которых желает отслеживать и/или воздействовать на свое подмножество программных и/или аппаратных компонентов.
Трактовка отладки/мониторинга как контролируемого выполнения меняет место отладки в жизненном цикле систем, позволяет применить архитектурные и протокольные решения, характерные для средств управления. Это делает средства отладки масштабируемыми, способными обслуживать распределенные разнородные системы.
Для дальнейшего развития средств отладки/мониторинга важно формирование набора спецификаций, определяющих функциональность разрабатываемых программ-менеджеров [20].
Программы представляют собой сложные динамические системы. Особенно это относится к параллельным и интерактивным программам (работающим в диалоговом режиме), которые включают в себя сложные взаимодействия между процессами программы и взаимодействие с внешним миром. Исследование таких программ нельзя проводить в терминах отношений между входными и выходными значениями программы, как это обычно делается для последовательных программ. Это показывает, что проверка и доказательство правильности работы таких программ требует разработки адекватных средств формальной спецификации. В частности, необходимо иметь возможность формально выражать отношения между состояниями системы в моменты времени, когда происходят те или иные события при работе программной системы. В статье Валиева М.К. «Применение временной логики к спецификации программ» [21] обсуждается подход к анализу параллельной программы, основанный на применении методов математической логики.
Функция управления процессами является одной из важнейших задач операционной системы. Для выполнения этой задачи на суперЭВМ может использоваться технология семафоров [22], которая заключается в блокировке и разблокировке процессов.
Семафоры традиционно использовались для синхронизации процессов, обращающихся к разделяемым данным. Каждый процесс должен исключать для всех других процессов возможность одновременного обращения к своим данным.
6. Моделирование объектов распараллеливания
Сформулировав задачу и обозначив конечную цель, исследователь включается в поиск решения. Одним из путей его нахождения является моделирование. Пройденный путь становится методом.
Процесс моделирования предполагает как движение «от предмета к модели» (отражение действительности в системе понятий), так и движение «от модели к предмету» (испытание истинности модели на ее возможностях). Компьютер является естественным средством проведения такого рода «исследовательских» циклов.
Специалисты по теории разработки программного обеспечения при описании процесса его создания весьма редко уделяют внимание моделированию. С другой стороны специалисты по моделированию обосновывают настоятельную необходимость широкого использования своих методов при проектировании любых сложных систем [24]. Так как программный комплекс является сложной системой с большим количеством уровней и компонентов, а также со сложной структурой связей между ними, то при разработке таких систем необходимо применять моделирование.
Таким образом, можно констатировать, что наиболее удобным средством анализа вычислительных алгоритмов параллельных вычислений являются графы [26].
6.1. Уровни декомпозиции объектов распараллеливания
Для предоставления пользователям суперЭВМ возможности одновременного выполнения большого числа научных вычислений или многопоточной обработки запросов в базе данных на многопроцессорных ЭВМ должно быть проинсталлировано соответствующее серверное обеспечение. В данном случае, функции распараллеливания лежат не только на прикладном программном обеспечении, но и на операционной системе.
Результаты реализации такого подхода относятся, прежде всего, к «операционному параллелизму». В таких системах может оказаться полезным метод, основанный на построении расписания моментов запуска и окончания каждого из конкурирующих процессов. Это дает возможность не только наиболее эффективно решить проблему синхронизации процессов, но и существенно минимизировать системные затраты и непроизводительные простои процессоров. Метод по управлению взаимодействием между параллельными процессами осуществляется с помощью технологии «семафоров» [29].
Целью любой работы, связанной с параллельным программированием, является рассмотрение взаимосвязей между структурой математического алгоритма и архитектурой многопроцессорной вычислительной системы. В зависимости от сложности поставленной задачи возможна реализация различных видов взаимосвязей. Последние называются уровнями декомпозиции исходной задачи. Они могут быть определены следующим образом [31]:
Последний не рекомендуется к использованию на суперЭВМ с распределенной памятью, у которых на каждый процессор выделена локальная память. Исследователями большинства прикладных задач рекомендуется останавливать процесс их декомпозиции на втором уровне.
6.2. Возможность распараллеливания объектов в алгоритмах численного моделирования
Далее рассмотрим, какие объекты в алгоритмах решений задач поддаются распараллеливанию.
Основные численные методы (метод конечных элементов, метод конечных разностей и другие) сводят исходную задачу к формированию системы линейных алгебраических уравнений (СЛАУ) и последующему ее решению [32, 33]. В последовательной программе, например, реализующей метод конечных элементов, основная часть времени приходится на формирование самой СЛАУ (расчет коэффициентов), а не на ее решение. Важно также отметить, что элементы матрицы СЛАУ зависят только от своего положения в ней и не зависят друг от друга. В этом случае складывается благоприятная ситуация для применения параллельных алгоритмов формирования СЛАУ. При этом необходимо выполнить следующие операции:
В статье [34] приводится пример описания параллельного алгоритма формирования СЛАУ, а также особенности применения технологии MPI.
В статье [35] рассматривается реализация метода Гауса для решения разреженных систем линейных алгебраических уравнений на ЭВМ с параллельными процессами и общей памятью. Отмечается, что разбиение на несколько потоков команд возможно либо по функциональному признаку, либо непосредственно по данным. В предложенной постановке задачи возможна только реализация разбиения по данным. При этом обращается внимание на допустимость выделения из задачи несвязных областей.
В той же статье указывается на привязку предлагаемого параллельного алгоритма к конкретной архитектуре ЭВМ, но при этом отмечается, что эффективность алгоритма распараллеливания зависит от соотношения числа процессов и числа процессоров, а также от объема обрабатываемой информации за один цикл.
В статье [37] представлены алгоритмы вычислительных процедур, а также полученные с их помощью результаты, основанные на методологии сверхточной параллельной арифметики. Эту методологию предлагается применять для решения прикладных задач линейной алгебры и математической физики. Упомянутая работа посвящена созданию алгоритмических и программных средств поддержки точных матричных вычислений, основанных на комплексном использовании параллелизма MIMD-систем [38] и многоразрядной арифметики с динамической длиной операндов. Особое внимание уделяется влиянию округлений в базовых матричных операциях на точность вычисления матричных задач. В работу включены библиотека программ, а также тестовые примеры, демонстрирующие эффективность разработанного подхода. Представленные результаты демонстрируют возможность выполнения на параллельных ЭВМ точных матричных вычислений с одновременной передачей сообщений. Разработанный пакет прикладных программ может быть легко адаптирован к выполнению на параллельных компьютерах различных типов.
Очевидно, что использование многоразрядной арифметики не является типичным для суперкомпьютеров. Ее применение неизбежно ведет к замедлению выполнения приложения. Однако потери времени в этом случае могут быть компенсированы не только проведением расчетов с максимальным использованием стандартных типов данных, но также и адаптацией высокоэффективных параллельных алгоритмов, изначально приспособленных к исполнению на однопроцессорной ЭВМ, к средствам высокоточной обработки. Многоразрядная арифметика должна применяться только в самых «тяжелых» участках алгоритма. Но даже в этом случае динамическая длина операндов помогает обрабатывать только ограниченное количество разрядов. Именно таким образом предлагается достигать баланс между скоростью и точностью вычислений.
В статье [39] подробно анализируется векторно-конвейерная архитектура суперЭВМ семейства CRAY. В результате проведенных исследований обнаружены факторы программирования, снижающие производительность суперЭВМ. К ним относятся:
Здесь также приводятся примеры (в программных кодах), демонстрирующие выход из неблагоприятных ситуаций.
В статье предлагаются три основных вида декомпозиции (сегментации) для планируемого к разработке программного комплекса «Поток-3» в процессе подготовки к параллелизации составляющих его алгоритмов:
Одним из глобальных видов структурирования высокого уровня для решаемой проблемы является декомпозиция исследуемого физического процесса по составляющим его подпроцессам и, соответственно, сегментация общего алгоритма решения полной задачи на ряд алгоритмов решения составляющих подзадач.
Предлагается сегментный алгоритм параллельного проведения вычислений по физическим процессам, при этом работа всех модулей-сегментов вычислительного ядра программы инициируется одновременно. Кроме того, в каждом сегменте может одновременно стартовать работа подсегментов.
Исключительно важное значение при распараллеливании вычислительных процедур приобретает синхронизация вычислений и маршрутизация данных, неудачная организация которых приводит либо к неверному счету, либо к большим накладным расходам компьютерного и астрономического времени из-за всякого рода задержек счета на ожидание данных и, соответственно, бездействия процессоров в некоторых сегментах. Предполагается, что последнее приводит к неоптимальности, или даже невозможности использования реконфигурируемого процессорного пространства.
Геометрическая декомпозиция (сегментация) полной задачи и последующая параллелизация вычислений позволяет существенно снизить величину астрономического времени, требуемого на вычисления. Геометрическая декомпозиция заключается в разделении всей области интегрирования на карту подобластей (сегментов), а также в одномоментном расчете состояния физического процесса в каждой из подобластей с последующей сшивкой решений. В статье приводятся требования к математической постановке задачи, допускающие геометрическую декомпозицию.
Применение последнего вида декомпозиции предполагает повышенное внимание к эффективности параллельной программы.
Заключение
При разработке реальных параллельных программ, как правило, достижение высокой эффективности требует многократных изменений программы для поиска наилучшей схемы ее распараллеливания. Успешность такого поиска определяется простотой модификации программы.
Библиографический список использованной литературы
Дополнительная литература
Об Авторе
Занимается вопросами создания программных решений в области повышения качества и быстродействия ресурсоемких приложений. Является одним из разработчиков статического анализатора Viva64 для верификации 64-битного программного обеспечения. Участвует в разработке открытой библиотеки VivaCore для работы с Си/Си++ кодом.