Технологии паралельного программирования 3.1Описание технологии OpenMP Технология OpenMP (Open Multi-Processing) это наиболее популярная и используемая сегодня технология распараллеливания. За основу берётся последовательная программа, а для его распараллеливания используется набор директив компилятора, переменные окружения и библиотечные процедуры, которые предназначены для программирования многопоточных приложений на многопроцессорных системах с общей памятью (SMP-системах).  Рисунок 3.1. SMP система · Все процессоры имеют доступ к любой точке памяти с одинаковой скоростью. · Процессоры подключены к памяти либо с помощью общей шины, либо с помощью crossbar-коммутатора. · Аппаратно поддерживается когерентность кэшей. Стандарт Open MP был основан на языке Fortran в 1997 г., но позднее в 1998 г. включил в себя и языки C/C++. На данный момент уже доступна версия 4.0 , но во время выполнения курсовой работы использовалась версия 2.0, так как новый стандарт на данный момент поддерживается только компилятором Intel. Разработкой OpenMP занимается ARB(Architecture Review Board), это некоммерческая организация, в ёё состав входят крупнейшие разработчики SMP-архитектур и ПО. Программа, созданная с применением технологии OpenMP, состоит из последовательных (однопоточных) и параллельных (многопоточных) участков. В OpenMP используется модель распараллеливания « Ветвление - Слияние». Вначале иметься только единственный поток его называют начальным потоком или ещё основной нитью(Master thread, здесь threard это легковесные процессы). Как только поток встречает параллельную конструкцию в коде программы, он создает группу потоков и становится главным потоком. В созданной группе все потоки, включая главный, выполняют код программы. После выполнения параллельной конструкции в коде, работу продолжает только главный поток.  Рисунок 3.2. Модель распараллеливания « Ветвление - Слияние». Число потоков выполняющие параллельную часть можно контролировать по разному, можно использовать OMP_NUM_THREADS или вызвать процедуру omp_set_num_threads() Память в OpenMP разделяется на: локальную и общую память. Локальная память доступна только для одной нити, а общая, для нескольких. Опишем основные возможности и положительные качества технологии распараллеливания OpenMP: 1. В OpenMP дается возможность реализовать максимально эффективно многопроцессорные вычислительные системы с общей памятью, позволяя использовать общие данные для параллельно выполняемых потоков, без каких либо затруднений для межпроцессорных передач данных. 2. В OpenMP дается возможность инкрементной (поэтапной) разработки параллельных программ. Это значит, что на ранних этапах разработки мы уже можем получить параллельную программу, достигается это благодаря директивам OpenMP, они могут добавляться в последовательную программу поэтапно. 3. В OpenMP снижена вероятность возникновения проблем при переносе параллельных программ между разными компьютерами. Программа, написанная на языке C или Fortran с использованием технологии OpenMP, будет выполняться для разных вычислительных систем с общей памятью. 4. В OpenMP простой набор директив для изучения. И разработка сравнительно простых параллельных программ не требует больших усилий, иногда достаточно добавить пару директив в последовательную программу. Но не стоит забывать, что при разработке сложных программ требуется соответствующие знания. Инструментарий Рассмотрим инструмент, который понадобиться нам для работы. А потребуется нам Visual Studio, в курсовой работе использовалось VS Express 2013. Как уже говорилось ранее, одним из достоинств технологии OpenMP является то, что последовательную программу можно распараллелить без существенной модификации. Достигается это расстановкой директив. На практике же нам приходиться менять и код программы, но этих изменений намного меньше, чем, например в MPI. Всё это означает, что для распараллелирования последовательной программы на языке C/С++ нам достаточно включить в проект поддержку пакета OpenMP. В Visual Studio после создания проекта, нужно во вкладке «Отладка» зайти в «Свойства проекта». Далее выбираем C/C++/ Язык. Выставляем в графе «Конфигурация» - «Активная (debug)», а в «Платформа» - «Активная(Win32)» как показано на рисунке 3.  Рисунок 3.3. Выбор конфигураций и платформ, для которых мы устанавливаем параметры. Поддержка OpenMP включается, как показано на рисунке 4.  Рисунок 3.4. Поддержка OpenMP включена. Возможностей Visual Studio Express 2013 хватает для того, чтобы мы могли разрабатывать параллельные программы с применением технологии OpenMP. Однако для полноценной работы следует иметь Intel® Parallel Studio. Его будем использовать для поиска параллельных ошибок в создаваемом коде. Данный дистрибутив можно скачать с официального сайта. Технология MPI. MPI - message passing interface - библиотека функций, предназначенная для поддержки работы параллельных процессов в терминах передачи сообщений. Номер процесса - целое неотрицательное число, являющееся уникальным атрибутом каждого процесса. Атрибуты сообщения - номер процесса-отправителя, номер процесса-получателя и идентификатор сообщения. Для них заведена структура MPI_Status, содержащая три поля: MPI_Source (номер процесса отправителя), MPI_Tag (идентификатор сообщения), MPI_Error (код ошибки); могут быть и добавочные поля. Идентификатор сообщения (msgtag) - атрибут сообщения, являющийся целым неотрицательным числом, лежащим в диапазоне от 0 до 32767. Процессы объединяются в группы, могут быть вложенные группы. Внутри группы все процессы перенумерованы. С каждой группой ассоциирован свойкоммуникатор. Поэтому при осуществлении пересылки необходимо указать идентификатор группы, внутри которой производится эта пересылка. Все процессы содержатся в группе с предопределенным идентификатором MPI_COMM_WORLD. При описании процедур MPI будем пользоваться словом OUT для обозначения "выходных" параметров, т.е. таких параметров, через которые процедура возвращает результаты. Заключение Примеры использования параллельных вычислительных систем или суперкомпьютеров можно найти в разных областях промышленности, медицины, образования. Вот лишь небольшой список областей человеческой деятельности, где использование суперкомпьютеров действительно необходимо: · автомобилестроение; · нефте - и газодобыча; · фармакология; · прогноз погоды и моделирование изменения климата; · сейсморазведка; · проектирование электронных устройств; · синтез новых материалов и многие, многие другие. В 1995 году корпус автомобиля Nissan Maxima удалось сделать на 10% прочнее благодаря использованию суперкомпьютера фирмы Cray (The Atlanta Journal, 28 мая, 1995г). С помощью него были найдены не только слабые точки кузова, но и наиболее эффективный способ их удаления. По данным Марка Миллера (Mark Miller, Ford Motor Company), для выполнения crash-тестов, при которых реальные автомобили разбиваются о бетонную стену с одновременным замером необходимых параметров, съемкой и последующей обработкой результатов, компании Форд понадобилось бы от 10 до 150 прототипов новых моделей при общих затратах от 4 до 60 миллионов долларов. Использование суперкомпьютеров позволило сократить число прототипов на одну треть. Ещё один пример - это развитие одной из крупнейших мировых систем резервирования Amadeus, используемой тысячами агентств со 180000 терминалов в более чем ста странах. Установка двух серверов Hewlett-Packard T600 по 12 процессоров в каждом позволила довести степень оперативной доступности центральной системы до 99.85% при текущей загрузке около 60 миллионов запросов в сутки. И подобные примеры можно найти повсюду. В свое время исследователи фирмы DuPont искали замену хлорофлюорокарбону. Нужно было найти материал, имеющий те же положительные качества: невоспламеняемость, стойкость к коррозии и низкую токсичность, но без вредного воздействия на озоновый слой Земли. За одну неделю были проведены необходимые расчеты на суперкомпьютере с общими затратами около 5 тысяч долларов. По оценкам специалистов DuPont, использование традиционных экспериментальных методов исследований потребовало бы около трех месяцев и 50 тысяч долларов и это без учета времени, необходимого на синтез и очистку необходимого количества вещества. Увеличение производительности ЭВМ, за счет чего? А почему суперкомпьютеры считают так быстро? Вариантов ответа может быть несколько, среди которых два имеют явное преимущество: развитие элементной базы и использование новых решений в архитектуре компьютеров. Попробуем разобраться, какой из этих факторов оказывается решающим для достижения рекордной производительности. Обратимся к известным историческим фактам. На одном из первых компьютеров мира - EDSAC, появившемся в 1949 году в Кембридже и имевшем время такта 2 микросекунды (2*10-6 секунды), можно было выполнить 2*n арифметических операций за 18*n миллисекунд, то есть в среднем 100 арифметических операций в секунду. Сравним с одним вычислительным узлом современного суперкомпьютера Hewlett-Packard V2600: время такта приблизительно 1.8 наносекунды (1.8*10-9 секунд), а пиковая производительность около 77 миллиардов арифметических операций в секунду. Что же получается? За полвека производительность компьютеров выросла более чем в семьсот миллионов раз. При этом выигрыш в быстродействии, связанный с уменьшением времени такта с 2 микросекунд до 1.8 наносекунд, составляет лишь около 1000 раз. Откуда же взялось остальное? Ответ очевиден - использование новых решений в архитектуре компьютеров. Основное место среди них занимает принцип параллельной обработки данных, воплощающий идею одновременного (параллельного) выполнения нескольких действий. К сожалению, чудеса в нашей жизни совершаются редко. Гигантская производительность параллельных компьютеров и суперЭВМ с лихвой компенсируется стоимостью и сложностью их использования. Но даже вопросы, возникающие вокруг суперкомпьютеров, ставят в тупик. Например, простой пример и жизни: землекоп выкопает яму за один час. Как вы думаете, 60 землекопов выкопают яму за одну минуту? Так и в компьютере: начиная с некоторого момента, они будут просто мешать друг другу, не ускоряя, а замедляя работу. Но все вопросы, сопровождающие суперкомпьютер, конечно же, решаются. Да, использовать суперкомпьютер сложнее, чем PC: нужны дополнительные знания и технологии, высококвалифицированные специалисты, более сложная структура информации. Написать эффективную параллельную программу сложнее, чем последовательную, да и вообще создание параллельного программного обеспечения для параллельных компьютеров - основная проблема суперкомпьютерных вычислений. Но без суперЭВМ сегодня не обойтись, и отрадно, что в нашей стране есть понимание необходимости развития этих технологий. В ноябре 2000 года в Президиуме РАН состоялось открытие межведомственного суперкомпьютерного центра. В процессе становления суперкомпьютерные центры в Дубне, Черноголовке, Институте прикладной математики им. М.В. Келдыша и т.п. Создана и развивается линия отечественных суперкомпьютеров МВС-100. За рубежом также происходит интенсивное развитие суперкомпьютеров всех типов (векторные, кластерные и т.п.), и использование их практически во всех отраслях человеческой жизни. А иначе и нельзя, так как параллельные компьютеры и вычисления - не будущее, а реальность. Список литературы 1. Антонов А.С. Введение в параллельные вычисления, М.: Изд-во МГУ, 2002, 346 с. 2. Борисов М. UNIX-кластеры // М.: Открытые системы, 2005г, 237 с. 3. Демьяненко В.Ю. Программные средства создания и ведения баз данных. - М.: Финансы и статистика, 2001, 316 с. 4. Кузьминский М. Векторно-параллельные суперкомпьютеры NEC // М.: Открытые системы, 2003 г, 246 с. 5. Кузьминский М. Архитектура S2MP - свежий взгляд на cc-NUMA // М.: Открытые системы, 2007г, 357 с. 6. Ляхович В.Ф. Основы информатики. - Ростов-на-Дону: Феникс, 2006, 278 с. 7. Моначов В. Язык программирования Java и среда NetBeans. - 2-е изд. - СПб.: БХВ-Петербург, 2009. - 720 с. 8. Мячев А.А. Спецификация многопроцессорных систем компании Intel // М.: Открытые системы, 2005, 336 с. 9. Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы: Учебник для вузов.3-е изд. - СПб.: Питер, 2006 359 с. 10. Самойленко В.В. Локальные сети. Полное руководство. - К., 2002, 569 с. |