Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Организация взаимодействия между процессами при параллельных вычислениях




В идеальной многозадачной системе все процессы, выполняющиеся параллельно, независимы друг от друга (т.е., асинхронны). На практике такая ситуация маловероятна, поскольку рано или поздно возникают ситуации, когда параллельным процессам необходим доступ к некоторым общим ресурсам. Для этого необходимо введение (на уровне ОС или библиотек) средств, предоставляющих такую возможность.

Параллелизация программы - это задача для разработчика, намного по сложности превосходящая программирование классическое. Для начала программист должен решить, какие части программы могут выполняться одновременно, какую схему параллелизации выбрать, и как эти фрагменты будут взаимодействовать. Одна из самых сложных проблем при разработке параллельных программ - это отладка. Дело в том, что два раза запустив программу в таком режиме, можно получить разные результаты. Просто фрагменты кодов, выполняющиеся независимо, могут выполняться с разной скоростью, в зависимости от того, кто получил больше времени от операционной системы.

Итак, как же может выполняться распараллеливание задачи?

Мы имеем некоторую вычислительную задачу (например, суммирование числового ряда) и хотим ускорить время ее вычисления. Если применить распараллеливание задачи, то мы должны получить вместо одного вычислительного процесса несколько, каждый из который будет решать свою подзадачу (например, производить суммирование на определенном диапазоне). Как это происходит? Есть главный процесс и подчиненные ему процессы. Каждый процесс идентифицируется своим номером (рангом). Вначале главный процесс должен сообщить каждому из подчиненных, какую часть задачи тот должен делать, после чего все процессы начинают выполнять вычисления. Заметим, что результаты у всех процессов могут получиться в разное время, т.е. асинхронно. После того, как все процессы выполнят свои вычисления, они должны отдать результаты своих вычислений главному процессу, затем главный процесс выполняет обработку результатов и получает ответ. Так выглядит распараллеливание задачи. Приведенный выше пример может быть реализован несколькими способами, в зависимости от доступных операций передачи сообщений между процессами. Процессы обмениваются данными между собой при помощи функций передачи сообщений – все эти функции находятся внутри параллельной библиотеки или операционной системы и предоставлены разработчику параллельных программ.

Для сбора результата главный процесс может применять к каждому процессу операцию синхронного получения результата, т.е. обращаться в цикле к каждому процессу в отдельности. У этого подхода есть очевидный минус – мы не сможем получить результат от второго процесса до тех пор, пока не получим от первого, так как будет происходить блокировка. Можно избежать этого – применить не блокирующую (асинхронную) функцию получения результата, тогда нам не придется ждать, пока первый процесс выдаст ответ, чтобы обратиться ко второму и т.д., но придется применить барьерную синхронизацию для всех процессов, чтобы узнать, когда все результаты будут получены. Такой подход эффективнее, но его сложнее реализовать и отладить. И наконец, есть третье решение – главный процесс вызывает функцию коллективной коммуникации – она получает данные синхронно и одновременно от всех процессов и отдает их вызвавшему ее (главному) процессу. Очевидно, что это наиболее удобный подход при условии, что число подчиненных процессов более одного.

Для решения этой задачи мы применяли различные функции обмена сообщениями, они являются стандартными для параллельных библиотек, и являются далеко не пределом возможностей для передачи сообщений для таких библиотек. Во многом написание параллельных программ и строится на грамотном выборе механизмов взаимодействия процессов, о них и идет речь в данном пособии. Такие механизмы можно классифицировать следующим образом – взаимодействия точка-точка, коллективные взаимодействия и синхронизация.




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 668; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.