ПОЗНАВАТЕЛЬНОЕ Сила воли ведет к действию, а позитивные действия формируют позитивное отношение Как определить диапазон голоса - ваш вокал
Игровые автоматы с быстрым выводом Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими Целительная привычка Как самому избавиться от обидчивости Противоречивые взгляды на качества, присущие мужчинам Тренинг уверенности в себе Вкуснейший "Салат из свеклы с чесноком" Натюрморт и его изобразительные возможности Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д. Как научиться брать на себя ответственность Зачем нужны границы в отношениях с детьми? Световозвращающие элементы на детской одежде Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия Как слышать голос Бога Классификация ожирения по ИМТ (ВОЗ) Глава 3. Завет мужчины с женщиной
Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д. Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу. Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар. | Модели параллельного программирования В рамках парадигм программирования различают модели параллельного программирования. Рассмотрим сначала модели, основанные на параллелизме задач. Модель «Процесс/канал» («Process/Channel»). Данная модель характеризуется следующими свойствами: 1. Параллельное вычисление осуществляется одним или более одновременно исполняющихся процессов, число которых может изменяться в течение времени выполнения программы. 2. Процесс - это последовательная программа с локальными данными. Процесс имеет входные и выходные порты, которые служат интерфейсом к среде процесса. 3. В дополнение к обычным операциям процесс может выполнять следующие действия: послать сообщение через выходной порт, получить сообщение из входного порта, создать новый процесс и завершить процесс. 4. Операция передачи сообщения асинхронная - она завершается сразу, не ожидая того, когда данные будут получены. Операция приема сообщения синхронная: она блокирует процесс до момента поступления сообщения. 5. Пары из входного и выходного портов соединяются очередями сообщений, называемыми каналами (channels). Каналы можно создавать и удалять. Ссылки на каналы (порты) можно включать в сообщения, так что связность графа межпроцессорных связей может изменяться динамически. 6. Процессы можно распределять по физическим процессорам произвольными способами, причем используемое отображение (распределение) не оказывает влияния на семантику программы. В частности, множество процессов можно отобразить и на один процессор. Понятие процесса позволяет говорить о местоположении данных: данные, содержащиеся в локальной памяти процесса, - расположены «близко», прочие данные «удалены». Понятие канала обеспечивает механизм указания на то, что для продолжения вычислений одному процессу требуются данные другого процесса, т.е. между процессами имеется зависимость по данным. Модель «Обмен сообщениями» («Message Passing»).В соответствии с этой моделью программы, написанные на традиционном последовательном языке программирования, исполняются процессорами компьютера. Программы обмениваются между собой данными, используя подпрограммы приема/передачи данных некоторой коммуникационной системы. На сегодняшний день модель «обмен сообщениями» является наиболее широко используемой моделью параллельного программирования. Программы этой модели, подобно программам модели «процесс/канал», создают множество процессов, с каждым из которых ассоциированы локальные данные. Каждый процесс идентифицируется уникальным именем. Процессы взаимодействуют, посылая и получая сообщения. В этом отношении модель «обмен сообщениями» является разновидностью модели «процесс/канал» и отличается только механизмом, используемым при передаче данных. Например, вместо отправки сообщения в канал «channel 2» можно послать сообщение процессу «process 3». Модель «обмен сообщениями» не накладывает ограничений ни на динамическое создание процессов, ни на выполнение нескольких процессов одним процессором, ни на использование разных программ для разных процессов. Формальные описания систем обмена сообщениями не рассматривают вопросы, связанные с манипулированием процессами, однако, при реализации таких систем обычно вводятся некоторые ограничения. Так, большинство систем обмена сообщениями при запуске параллельной программы создает фиксированное число идентичных процессов и не позволяет создавать и разрушать процессы в течение работы программы. В таких системах каждый процесс выполняет одну и ту же программу (параметризованную относительно идентификатора либо процесса, либо процессора), но работает с разными данными. Реализуемая в этом случае модель вычислений получила название SPMD (Single Program – Multiple Data, «одна программа - много данных»). SPMD-модель приемлема и достаточно удобна для широкого диапазона приложений параллельного программирования, но она затрудняет разработку некоторых типов параллельных алгоритмов. Используемая модель «обмен сообщениями» бывает двух типов. Различают модель Хоара и теговую модель. Механизм взаимодействия параллельных процессов, основанный на модели Хоара, имеет следующие особенности. Длины передаваемого и принимаемого сообщения должны быть согласованы на передающей и принимающей стороне. Информационный обмен реально начинается только после того, как отправитель явно выставил запрос send («послать сообщение»), а приемник – запрос receive («принять сообщение»). Сообщения доходят до принимающей стороны строго в порядке, в каком были отправлены передающей стороной. Данный механизм позволяет организовывать высокоэффективные информационные обмены, однако его применение связано с существенными трудностями при программировании. Более гибкой является теговая модель взаимодействия параллельных процессов. При посылке отправитель снабжает каждое сообщение специальным атрибутом – тегом, определяющим тип посылаемого сообщения. Получатель имеет возможность в каждый момент времени принимать сообщения нужного ему типа. Естественно, что при этом сообщения могут доходить до адресата не в том порядке, в котором были посланы. Данная модель более удобна для программирования, но имеет, как правило, худшие характеристики по быстродействию по сравнению с моделью Хоара за счет более громоздкой реализации. Модель «Общая память» («Shared Memory»). В модели программирования с общей памятью, все процессы совместно используют общее адресное пространство, к которому они асинхронно обращаются с запросами на чтение и запись. В таких моделях для управления доступом к общей памяти используются механизмы синхронизации – семафоров блокировки процессов. Преимущество этой модели с точки зрения программирования состоит в том, что понятие собственности данных (монопольного владения данными процессом) отсутствует, следовательно, нет необходимости явно задавать обмен данными между производителями и потребителями. Эта модель, с одной стороны, упрощает разработку программы, но с другой стороны, затрудняет обеспечение локальности данных. В основном эта модель используется при программировании мультипроцессорных вычислительных систем с общедоступной памятью. В рамках подхода, основанного на параллелизме данных, используется единственная модель - «Параллелизм данных» («Data Parallel»). В этой модели единственная программа задает распределение данных между всеми процессорами компьютера и операции над ними. Название модели происходит оттого, что она эксплуатирует параллелизм, который заключается в применении одной и той же операции к множеству элементов структур данных. Распределяемыми данными обычно являются массивы. Как правило, языки программирования, поддерживающие данную модель, допускают операции над массивами, позволяют использовать в выражениях целые массивы, вырезки из массивов. Распараллеливание операций над массивами, параллельное выполнение циклов обработки элементов массива позволяет существенно повысить производительность программы. Каждый процессор выполняет обработку того подмножества элементов массива, которое расположено в его локальной памяти. Программы с параллелизмом данных могут быть оттранслированы и исполнены как на MIMD-, так и на SIMD-компьютерах. Поскольку операции над каждым элементом данных можно рассматривать как независимые процессы, то степень детализации таких вычислений очень велика, а понятие «локальности» (распределения по процессам) данных отсутствует. Поэтому, компиляторы языков с параллелизмом данных требуют, чтобы программист предоставил информацию относительно того, как данные должны быть распределены между процессорами, другими словами, задал схему параллелизма. Обычно компилятор транслирует программу с параллелизмом данных в SPMD-программу, генерируя коммуникационный код автоматически. |