Раздел 1. Параллельное программирование: общие
вопросы
Лекция 1
О предмете: что есть параллельная
программа?
О целях Зачем создавать
параллельные программы?
О способах Как создавать
параллельные программы?
О средствах Выбор "платформы" для распараллеливания. Языки,
компиляторы, библиотеки, "ручное" программирование.
О достижении целей распараллеливания Схожесть и отличия
процессов "распараллеливания" и "оптимизации" программ. Плюсы и минусы.
О методике создания Список вопросов, на которые нужно ответить,
прежде чем создавать параллельную программу.
О проблемах Неустойчивость работы. Ошибки компиляторов.
Неустойчивость вычислений. Работа с динамической памятью.
Практика 1
Параллельный "Hello World" в потоках
Сборка (ключи компилятора), запуск, эксперименты с
числом потоков
Печать в многопоточной программе
Раздел 2. OpenMP
Лекция
1
Введение в OpenMP OpenMP как стандарт параллельного программирования
для систем с общей памятью. Принципы организации параллелизма с использованием
OpenMP.
Составные части OpenMP Директивы компилятора, функции run-time библиотеки.
Определение параллельной области Директива parallel.
Библиотека функций OpenMP Функции для контроля/запроса параметров среды
исполнения. Число потоков в параллельной секции, номер потока.
Практика 1
Параллельный "Hello World" на OpenMP
Сборка (ключи компилятора), запуск, эксперименты с
числом потоков
Параллельный "Hello World" с использованием функций
OpenMP
Скалярное произведение векторов с "ручным" распределением работы (по
номеру потока). С показом (в самом конце пары) потокового варианта для
сравнения.
Лекция 2
Основные директивы OpenMP Формат записи. Области видимости. Типы директив.
Распределение вычислений между потоками Директивы DO/for, sections, single
Управление областью видимости данных Параметры директив shared,
private, firstprivate, lastprivate, copyin, default, reduction.
Практика 2
Скалярное произведение векторов с
распределением работы в цикле.
Разные варианты расписания. Эксперименты по замеру
эффективности.
Показ потокового варианта для сравнения.
Вычисление числа Пи.
Лекция 3
Синхронизация как задача параллельного
программирования.
Средства синхронизации в OpenMP Директивы master, critical, barrier, atomic,
threadprivate
Библиотека функций OpenMP Функции для контроля/запроса параметров среды
исполнения. Функции синхронизации. Переменные среды исполнения.
Практика 3
Умножение матрицы на вектор. Реализация различных
схем распределения данных для обработки.
Практика 4
Реализация основной задачи "Умножение матриц" на
OpenMP
Раздел 3. MPI
Лекция 1
Введение в MPI MPI как стандарт параллельного
программирования для систем с распределенной памятью.
Принципы организации параллелизма с использованием
OpenMP.
Состав MPI - краткий обзор Средства, предоставляемые стандартом MPI для
создания параллельных программ: передача данных типа "точка-точка",
операции коллективного обмена, операции редукции, типы данных, группы процессов и коммуникаторы.
Мини-MPI Шесть минимально-необходимых функций для создания MPI
программы. Передача данных типа "точка-точка"
Практика 1
Настройка среды разработки MS VS 2005
Параллельный "Hello World" на MPI
Сборка, локальный и распределенный запуск,
эксперименты с числом процессов
Скалярное произведение векторов с "ручным" распределением работы (по
номеру процесса). Эксперименты. Сравнение эффективности с OpenMP
версией.
Лекция 2
Группы процессов и коммуникаторы
Операции коллективного обмена, редукция
Операции синхронизации и измерения времени
Практика 2
Вычисление числа Пи
Параллельная сортировка
Лекция 3
Разбор задачи умножения матрицы на вектор.
Ленточная и блочная схемы. Алгоритм Фокса.
Практика 3, 4
Реализация основной задачи "Умножение матриц" на MPI
Раздел 4. Инструменты (ITC, ITP)
Лекция 1
Введение в параллельную отладку и
профилирование Что есть отладка? Отличия в процессе отладки параллельного
кода. Что есть профилирование?
Зачем профилировать параллельный код?
О средствах параллельной отладки MPI и OpenMP
программ
ITC Назначение, возможности, принцип сбора информации Подготовка
программы для анализа Создание проекта в Intel Thread Checker Сбор и
анализ данных Пример использования Intel Thread Checker
Практика 1
Исследование примеров из поставки ITC
Практика 2
Примеры на типичные ошибки в OpenMP
программах Скалярное произведение Задача Дирихле Обедающие
философы
Лекция 2
Определение и цели профилировки, назначение ITP
Основные концепции и понятия профилирования
Круг решаемых задач (распределение вычислительной нагрузки, синхронизация
и производительность, непроизводительные издержки при работе с потоками)
Общий порядок работы с инструментом (инструментация приложения,
профилирование приложения)
Пример использования ITP
Практика 3("Распределение вычислительной нагрузки")
Вопросы оптимизации исследуются на примере приложения, осуществляющего
поиск простых множителей массива чисел
Практика 4("Синхронизация и
накладные расходы на поддержку многопоточности")
Вопросы оптимизации исследуются на примере приложения, имитирующего работу
клиент-серверной системы