Содержание
- 2. План Общие сведения Основные схемы параллельных систем Многопоточность OpenMP Обмен сообщениями MPI PVM Linda
- 3. Литература Спецификация OpenMP http://www.openmp.org/drupal/ MPI http://www-unix.mcs.anl.gov/mpi/
- 4. Особенности технологий для параллельных вычислений Параллелизм используется для ускорения вычислений Необходимы технологии, рассчитанные на быстрый обмен
- 5. Требования к параллельным вычислениям Одновременная работа нескольких устройств Устройства не должны простаивать в ожидании на что-либо
- 6. Модели параллельных вычислений Общая (разделяемая) память Многопоточность Распределенная память Обмен сообщениями
- 7. Топологии параллельных систем Различные устройства связаны между собой Структура связей между различными устройствами называется топологией параллельной
- 8. Примеры топологий звезда Линейка (ферма) решетка
- 9. Классы параллельных систем SISD SIMD MIMD
- 10. Цель созданий программных технологий параллельных вычислений Простая реализация Моделей Топологий Классов Декомпозиции Связи Синхронизации Частично используются
- 11. Создание параллельных программ в модели с общей памятью API операционной системы (стандарт POSIX) Порождение процессов Сигналы
- 12. Создание параллельных программ с обменом сообщениями API операционных систем Сокеты Стандарты MPI PVM Linda
- 13. Языки программирования с поддержкой параллелизма Поддержка автопараллелизма Pg[C, C++, Fortran] (Portland Group) Adaptor - Fortran Absoft
- 14. Процессы Процесс – код выполняющийся в отдельном адресном пространстве Множество процессов может выполняться на одной машине
- 15. Составные части процесса Память Сегменты кода Сегменты данных Сегменты стека Стек задачи Стек ядра Другие сегменты
- 16. Память Физическая память разбита на страницы (обычно фиксированного размера) Страницы объединяются в виртуальные области (сегменты) Каждый
- 17. Файловая система Системные вызовы open close read write Операционная система транслирует эти вызовы в специфические вызовы
- 18. Порождение процессов Один процесс может создать другой процесс Оба процесса будут выполняться параллельно fork+exec spawn Процесс
- 19. Особенности fork+exec и spawn fork Порожденный процесс наследует все ресурсы родителя! Порожденный процесс начинает выполняться с
- 20. Доступ к файловой системе В UNIX системах по возможности все реализовано как файл Обычные файлы open
- 21. Работа с файловой системой Открываем файл, канал, сокет open(), pipe(), socket() запись write() Чтение read() Закрываем
- 22. Память общего доступа Процесс создает область общей памяти Другие процессы присоединяют эту область к себе Все
- 23. Конфликты при обращении к общим ресурсам: a – общая переменная Процесс1 : считываем a=1 Процесс1 :
- 24. Семафоры Семафор – совместно используемая атомарная целочисленная переменная В каждый момент времени изменять значение семафора может
- 25. Синхронизация с помощью семафоров Процесс 1 Создать семафор Присвоить семафору 1 Уменьшить семафор на 1 (семафор
- 26. Сигналы Сигнал – аналог прерывания Асинхронное событие – неизвестно когда произойдет Один процесс может послать другому
- 27. Потоки Часть процесса, которая выполняется параллельно другими частями процесса Все ресурсы потоков - общие Для создания
- 28. Стандарт OpenMP OpenMP – стандарт который включает директивы компилятора, библиотеки и системные переменные, которые могут быть
- 29. Пример OpenMP int main (void){ int i; int k = 0; #pragma omp parallel for default(shared)
- 30. Обмен сообщениями Когда процессы работают на разных машинах, то доступ к одним и тем же данным
- 31. Системные API Сокеты – независимый от протокола интерфейс, который позволяет организовать взаимодействие между процессами в сети
- 32. Сокет Серверный процесс socket() – создание сокета bind() – назначение адреса listen() – перевод в режим
- 33. Диаграмма работы с сокетами Сервер socket() Создаем сокет bind() Назначаем адрес и порт cluster.univ.kiev.ua:22 listen() Переводим
- 34. Синхронный и асинхронный обмен Синхронный вызов – функции send(), recv(), accept(), connect() блокируются пока не будет
- 35. API для асинхронных операций ввода-вывода select(), poll() – проверка состояния сокетов Функция возвращает может ли блокирующий
- 36. Сравнение синхронного и асинхронного ввода-вывода Синхронный Простота программирования Меньшее количество ошибок Неэффективен для параллельных программ Обычно
- 37. Интерфейсы параллельного программирования Часто при написании параллельных программ приходится выполнять сложные операции обмена данными Передача от
- 38. Message Passing Interface (MPI) MPI - стандарт интерфейса (middleware) обмена сообщениями для компьютеров с распределенной памятью
- 39. Диаграмма соответвия между сокетами, MPI и др Интерфейс сокетов Интерфейсы взаимодействия с общей памятью Ядро Аппаратное
- 40. Основные определения Процесс Программа, которая выполняет свой код Процесс характеризуется только своим номером в группе Группы
- 41. Разработка и запуск MPI программ Пользователь разрабатывает программу с MPI вызовами Программа компилируется и компонуется с
- 42. Пример MPI программы int main(int argc, char* argv[]){ int my_number; //Мой номер процесса int proc_num; //общее
- 43. Результат работы MPI программы [saa@cluster mpi]$ mpirun -np 10 ./a.out I an process 0, sending data
- 44. Реализации MPI MPICH LAMMPI …. Существуют разные реализации Может отличаться все, кроме совместимости программного кода Некоторые
- 45. Parallel Virtual Machine (PVM) PVM – программные средства для создания параллельных вычислительных комплексов на базе коллекции
- 46. Основные компоненты Платформенно независимый протокол обмена и методы сериализации Библиотека libpvm3 с которой компилируются программы и
- 47. Основные операции Управление процессами Запуск pvm_spawn Обмен сигналами pvm_kill Выход pvm_exit Сериализация/десериализация Упаковка pvm_pk Распаковка pvm_up
- 48. Принцип создания параллельных программ Пользователь компилирует для всех платформ одну или несколько программ Программы помещаются каждая
- 49. Пример запуска машины PVM [saa@cluster mpi]$ pvm pvmd already running. pvm> conf conf 1 host, 1
- 50. Пример PVM программы #include #include #include int main(int argc, char* argv[]){ int p_tid, c_tid; int res;
- 51. Языки рассчитанные на параллельное программирование Обычно являются расширением к какому-либо из широко используемых языков и использую
- 53. Скачать презентацию