Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Судаков / Лекции / lec8_parall.ppt
Скачиваний:
27
Добавлен:
20.03.2015
Размер:
200.19 Кб
Скачать

Системные API

Сокеты – независимый от протокола интерфейс, который позволяет организовать взаимодействие между процессами в сети

Впервые – BSD 4.2

TCP - гарантированная доставка в потоке

UDP – негарантированная дейтаграмная доставка

RAW – Прямой доступ к заголовкам протоколов

UNIX – сокеты на локальной машине

С сокетами работать также как и с файлами

Сокет

Серверный процесс

socket() – создание сокета

bind() – назначение адреса

listen() – перевод в режим ожидания входных соединений

accept() – прием входного соединения

Клиентский процесс

socket() – создание сокета

bind() – назначение локального адреса (не обязательно)

connect() – соединение с сервером

Для соединенных сокетов

recv(), read() – получение данных

Send(), write() – отправка данных

Диаграмма работы с

 

сокетами

Клиент

Сервер

socket() Создаем сокет

bind()

Назначаем адрес и порт cluster.univ.kiev.ua:22

listen()

Переводим в режим «слушать» На входящие соединения

 

 

 

 

 

 

Соединенный

 

 

 

 

 

 

 

accept()

сокет с другим

 

 

 

 

 

 

Ожидаем входящее

 

 

 

клиентом

 

 

 

 

 

 

соединение

 

 

 

 

 

 

 

 

 

 

 

 

 

 

socket() Создаем сокет

connect() Соединение с cluster.univ.kiev.ua:22

Обмен данными По сети

возвращаем соединенный сокет

Синхронный и асинхронный обмен

Синхронный вызов –

функции send(), recv(), accept(), connect() блокируются пока не будет выполнена операция

Пока функция не завершится процесс ожидает

При этом снижается эффективность распараллеливания

Асинхронный вызов –

функции send(), recv(), accept(), connect() начинают обмен и передают процессу управление

Процесс сразу же начинает выполнять свои работу

В случае успешного завершения ввода-вывода или ошибки процессу посылается сигнал или процесс сам проверяет состояние операции ввода-вывода

Эффективность параллельной обработки значительно выше

API для асинхронных операций ввода-вывода

select(), poll() – проверка состояния сокетов

Функция возвращает может ли блокирующий вызов завершиться без блокировки

Non-block IO – неблокирующий вызов

Сокет переводится в неблокирующее состояние

Функции завершаются сразу же и возвращают состояние операции

Async IO – асинхронный ввод- вывод

Сокет переводится в соответствующее состояние

При возможности неблокирующего ввода-вывода процессу отправляется сигнал

Сравнение синхронного и асинхронного ввода-вывода

Синхронный

Простота программирования

Меньшее количество ошибок

Неэффективен для параллельных программ

Обычно все операции с общей памятью - синхронны

Асинхронный

Сложнее программировать

Больше ошибок

Очень эффективен для параллельных программ

При обмене сообщениями позволяет выполнять вычисления одновременно с передачей

Интерфейсы параллельного программирования

Часто при написании параллельных программ приходится выполнять сложные операции обмена данными

Передача от одного процесса к другому

Передача от одного процесса всем остальным

Суммирование данных на всех процессах

Для этого необходимо разрабатывать свои протоколы и каждый раз программировать сокеты не удобно

Были разработаны специальные интерфейсы, которые рассчитаны на быстрый обмен данными между процессами параллельных программ

Message Passing Interface (MPI)

MPI - стандарт интерфейса (middleware) обмена сообщениями для компьютеров с распределенной памятью

MPI программа состоит из нескольких процессов, которые взаимодействуют между собой с помощью вызовов библиотечных функций MPI

MPI скрывает от пользователя низкоуровневые детали программирования, такие как программирование сокетов, обработка ошибок приема-передачи, сериализацию и др.

MPI предоставляет функции для осуществления взаимодействия точка-точка, коллективных взаимодействий, других операций ввода-вывода

Диаграмма соответвия между сокетами, MPI и др

Пользовательская программа

Middleware – MPI, PVM, RPC, CORBA

 

Интерфейс сокетов

 

Интерфейсы

 

 

 

 

 

взаимодействия с

 

 

 

 

 

общей памятью

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ядро

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Аппаратное обеспечение

Основные определения

Процесс

Программа, которая выполняет свой код

Процесс характеризуется только своим номером в группе

Группы процессов

Процессы можно группировать по любому признаку

Коммуникаторы

Группы процессов, которые используются для определения номера при взаимодействиях

Вначале определен MPI_COMM_WORLD

Новые коммуникаторы можно создавать используя существующие

Топологии

Соответствие номера процесса в коммуникаторе узлу топологии

Соседние файлы в папке Лекции