ПОЗНАВАТЕЛЬНОЕ Сила воли ведет к действию, а позитивные действия формируют позитивное отношение Как определить диапазон голоса - ваш вокал
Игровые автоматы с быстрым выводом Как цель узнает о ваших желаниях прежде, чем вы начнете действовать. Как компании прогнозируют привычки и манипулируют ими Целительная привычка Как самому избавиться от обидчивости Противоречивые взгляды на качества, присущие мужчинам Тренинг уверенности в себе Вкуснейший "Салат из свеклы с чесноком" Натюрморт и его изобразительные возможности Применение, как принимать мумие? Мумие для волос, лица, при переломах, при кровотечении и т.д. Как научиться брать на себя ответственность Зачем нужны границы в отношениях с детьми? Световозвращающие элементы на детской одежде Как победить свой возраст? Восемь уникальных способов, которые помогут достичь долголетия Как слышать голос Бога Классификация ожирения по ИМТ (ВОЗ) Глава 3. Завет мужчины с женщиной ![Оси и плоскости тела человека](/img/image001.jpg)
Оси и плоскости тела человека - Тело человека состоит из определенных топографических частей и участков, в которых расположены органы, мышцы, сосуды, нервы и т.д. Отёска стен и прирубка косяков - Когда на доме не достаёт окон и дверей, красивое высокое крыльцо ещё только в воображении, приходится подниматься с улицы в дом по трапу. Дифференциальные уравнения второго порядка (модель рынка с прогнозируемыми ценами) - В простых моделях рынка спрос и предложение обычно полагают зависящими только от текущей цены на товар. | Парадигмы параллельного программирования Как уже было отмечено,параллельная программа – это программа, содержащая части, называемые ветвями, которые могут выполняться одновременно на разных обрабатывающих устройствах (процессорах). Процесс написания подобных программ называют параллельным программированием. При любом подходе к составлению параллельной программы программист вынужден, приступая к решению конкретной прикладной задачи, решить, хотя бы в самых общих чертах, три вопроса: · как будут распределены данные по обрабатывающим устройствам (процессорам); · как будет распределена по обрабатывающим устройствам (процессорам) обработка данных; · в какие моменты данные из одних обрабатывающих устройств потребуются в других и, следовательно, когда их туда передавать. Совокупность решений этих вопросов часто называют схемой параллелизмадля данной задачи. Построение схемы параллелизма является целиком и полностью задачей программиста, а не инструментальной системы. Решив данную задачу, программист приступает к записи тем или иным образом построенной схемы параллелизма. Существует много способов записи схемы параллелизма, различающихся не только формой записи (программным интерфейсом), но и самим набором понятий, которыми оперирует программист, разрабатывая параллельную программу. Набор данных понятий называют парадигмой параллельного программирования. В рамках парадигмы для разработки программ используют модели программирования. Отметим, что разделение на парадигмы и модели является довольно условным (в литературе часто можно встретить, что та или иная модель называется парадигмой и наоборот), но мы считаем, что для обучения такое разделение целесообразно. В настоящее время существуют две основных парадигмы распараллеливания вычислений: параллелизм данных и параллелизм задач. Рассматриваемые парадигмы программирования различаются методами записи схемы параллелизма. Основная идея подхода, основанного на параллелизме данных, заключается в том, что одна операция выполняется сразу над всеми элементами массива данных. Различные фрагменты такого массива обрабатываются на векторном процессоре или на разных процессорах параллельной машины. Функции распределения данных между процессорами выполняются программно. Векторизация или распараллеливание в этом случае чаще всего выполняется уже на этапе компиляции – перевода исходного текста программы в машинные команды. Схему параллелизма программист задает с помощью опций векторной или параллельной оптимизации компилятору, директив параллельной компиляции. Для реализации данной парадигмы обычно используются специализированные языки программирования для описания параллельных вычислений. К особенностям данного подхода относятся: · централизованное программное управление обработкой данных; · глобальное пространство имен в программе, то есть для программиста существует одна единственная память, а детали структуры данных, доступа к памяти и межпроцессорного обмена данными от него скрыты. В рамках данного подхода от программиста формально не требуется больших усилий по векторизации или распараллеливанию вычислений. Тем не менее, практика показывает, что если программист плохо представляет себе, каким образом обрабатываемые данные будут размещены по процессорам, как будет организована их обработка и информационный обмен между процессорами, то эффективность разрабатываемых параллельных программ будет крайне низка. Парадигма программирования, основанная на параллелизме задач, подразумевает, что вычислительная задача разбивается на несколько относительно самостоятельных подзадач (ветвей), и каждый процессор загружается своей собственной подзадачей. Компьютер при этом, как правило, представляет собой MIMD-машину. Для каждой подзадачи пишется своя собственная программа на последовательном языке программирования, таком как Fortran, С или на языках параллельного программирования, например, OCCAM. Чем больше подзадач, тем большее число процессоров можно использовать, тем большего ускорения вычислений можно добиться. Существенным является то, что все эти программы должны обмениваться результатами своей работы. На практике такой обмен осуществляется вызовом процедур специализированной библиотеки. Программист при этом может контролировать распределение данных между процессорами и подзадачами и обмен данными. По сравнению с подходом, основанном на параллелизме данных, данный подход более трудоемкий, так как в этом случае требуется определенная работа для того, чтобы обеспечить эффективное совместное выполнение различных программ. Данному подходу свойственны следующие недостатки: · повышенная трудоемкость разработки и отладки программы; · на программиста ложится вся ответственность за равномерную загрузку процессоров параллельного компьютера, за минимизацию обменных операций между задачами; · возможно возникновение тупиковых ситуаций (дедлоков и ливлоков). Преимуществом данного подхода являются большие гибкость и свобода, предоставляемые программисту в разработке программы. Это позволяет эффективно использовать ресурсы параллельного компьютера и, как следствие, достичь максимального быстродействия. Практика показывает, что выигрыш в быстродействии может достигать нескольких раз по сравнению с подходом, основанном на параллелизме данных. |