Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Лекция 5. Парадигмы параллельногопрограммирования
Параллельное программирование
13 декабря 2010 г.
Параллельное программирование 1 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Стили (парадигмы) параллельного программирования
Стили программирования
Итеративный параллелизм.Рекурсивный параллелизм.«Производители и потребители» (конвейеры).«Клиенты и серверы».«Взаимодействующие равные».
Параллельное программирование 2 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Характеристика парадигм программирования
Стили программирования
Итеративный параллелизм: процессы выполняют циклические вычисления,решая одну задачу (итерации одного цикла).
Рекурсивный параллелизм: процессы выполняют независимые рекурсивныевызовы процедуры (комбинаторные задачи, метод ветвейи границ и т. д.)
«Производители и потребители»: процессы объединяются в конвейер(однотипные многоэтапные вычисления над большимиобъёмами данных: цифровые фильтры, обработкаизображений, микроархитектура процессорного ядра и т. д.)
Параллельное программирование 3 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Характеристика парадигм программирования
Стили программирования
Итеративный параллелизм: процессы выполняют циклические вычисления,решая одну задачу (итерации одного цикла).
Рекурсивный параллелизм: процессы выполняют независимые рекурсивныевызовы процедуры (комбинаторные задачи, метод ветвейи границ и т. д.)
«Производители и потребители»: процессы объединяются в конвейер(однотипные многоэтапные вычисления над большимиобъёмами данных: цифровые фильтры, обработкаизображений, микроархитектура процессорного ядра и т. д.)
Параллельное программирование 3 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Характеристика парадигм программирования
Стили программирования
Итеративный параллелизм: процессы выполняют циклические вычисления,решая одну задачу (итерации одного цикла).
Рекурсивный параллелизм: процессы выполняют независимые рекурсивныевызовы процедуры (комбинаторные задачи, метод ветвейи границ и т. д.)
«Производители и потребители»: процессы объединяются в конвейер(однотипные многоэтапные вычисления над большимиобъёмами данных: цифровые фильтры, обработкаизображений, микроархитектура процессорного ядра и т. д.)
Параллельное программирование 3 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Характеристика парадигм (окончание)
Стили программирования (окончание)
«Клиенты и серверы»: процесс клиента отправляет запрос серверуна оказание услуги и ожидает от него результата. Процесссервера в цикле ожидает запроса от клиента(одно-/многопоточное приложение). Обобщение вызовапроцедуры (RPC).
«Взаимодействующие равные»: процессы, решая одну задачу, исполняютодин и тот же код, обмениваясь сообщениями (итеративныйпараллелизм, децентрализованное принятие решений).
Параллельное программирование 4 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
НазваниеОсновные концепции
Характеристика парадигм (окончание)
Стили программирования (окончание)
«Клиенты и серверы»: процесс клиента отправляет запрос серверуна оказание услуги и ожидает от него результата. Процесссервера в цикле ожидает запроса от клиента(одно-/многопоточное приложение). Обобщение вызовапроцедуры (RPC).
«Взаимодействующие равные»: процессы, решая одну задачу, исполняютодин и тот же код, обмениваясь сообщениями (итеративныйпараллелизм, децентрализованное принятие решений).
Параллельное программирование 4 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель взаимодействия «управляющий-рабочие»
Управляющий
Рабочий 1
Рабочий 2
Рабочий N
. . .
Рис. 1: Концепция «управляющий-рабочие»
Параллельное программирование 5 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Алгоритм умножения матриц
Пример (умножение матриц)
входные данные: A,B ∈ Mn×n (R)выходные данные: C ∈ Mn×n (R)начало
для каждого i ∈ [1, n]N выполнятьдля каждого j ∈ [1, n]N выполнять
cij ← 0для каждого k ∈ [1, n]N выполнять
cij ← cij + aik bkj
Параллельное программирование 6 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель взаимодействия «управляющий-рабочие»
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 2: Концепция «управляющий-рабочие»
Параллельное программирование 7 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель взаимодействия «управляющий-рабочие»
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 2: Концепция «управляющий-рабочие»
Параллельное программирование 7 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель взаимодействия «управляющий-рабочие»
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 2: Концепция «управляющий-рабочие»
Параллельное программирование 7 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель взаимодействия «управляющий-рабочие»
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 2: Концепция «управляющий-рабочие»
Параллельное программирование 7 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Умножение матриц «управляющий-рабочие»
Пример (алгоритм координирующего процесса)
началодля каждого i ∈ [1, n]N выполнять
Отправить_процессуi (ai∗)Отправить_процессуi (B)
для каждого i ∈ [1, n]N выполнятьПринять_у_процессаi (ci∗)
Параллельное программирование 8 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Умножение матриц (окончание)
Пример (Алгоритм «управляющий-рабочие» для i-го процесса)
началоПринять_у_процесса0(ai∗)Принять_у_процесса0(B)для каждого j ∈ [1, n]N выполнять
cij ← 0для каждого k ∈ [1, n]N выполнять
cij ← cij + aik bkj
Отправить_процессу0(ci∗)
Параллельное программирование 9 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель «взаимодействующие равные»
. . . . . .
Рабочий N
Рабочий 1
Рабочий 2
Рис. 3: Концепция «круговой конвейер»
Параллельное программирование 10 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель «взаимодействующие равные» (окончание)
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 4: Концепция «круговой конвейер»
Параллельное программирование 11 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель «взаимодействующие равные» (окончание)
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 4: Концепция «круговой конвейер»
Параллельное программирование 11 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель «взаимодействующие равные» (окончание)
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 4: Концепция «круговой конвейер»
Параллельное программирование 11 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель «взаимодействующие равные» (окончание)
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 4: Концепция «круговой конвейер»
Параллельное программирование 11 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модель «взаимодействующие равные» (окончание)
Управляющий
A B C
Рабочий 1
A B C
Рабочий 2
A B C
Рабочий 3
A B C
Рис. 4: Концепция «круговой конвейер»
Параллельное программирование 11 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Умножение матриц «взаимодействующие равные»
Пример (алгоритм рабочего процесса с номером i)
входные данные: i ∈ Z+, ai∗, b∗i ∈ Rn
выходные данные: ci∗ ∈ Rn
началоcii ← 〈ai∗, b∗i 〉inext ← 1 + (i + 1) mod n; // № следующего по кругуiprev ← 1 + (i − 1) mod n; // № предыдущего по кругудля каждого j ∈ [1, i − 1]N ∪ [i + 1, n]N выполнять
Отправить_процессуinext(b∗i )Принять_у_процессаiprev(b∗j) ; // в ту же переменную b∗icij ←
⟨ai∗, b∗j
⟩
Параллельное программирование 12 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Модели закрытого/открытого конвейера
Рабочий 1 Рабочий 2 . . . Рабочий N
Управляющий
Рис. 5: Концепция «закрытый конвейер»
Рабочий 1 Рабочий 2 . . . Рабочий N
Рис. 6: Концепция «открытый конвейер»
Параллельное программирование 13 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Алгоритм процесса, координирующего конвейер
Пример (алгоритм управляющего процесса)
входные данные: A,B ∈ Mn×n (R)выходные данные: C ∈ Mn×n (R)начало
для каждого i ∈ [1, n]N выполнятьОтправить_процессу1(ai∗)
для каждого j ∈ [1, n]N выполнятьОтправить_процессу1(b∗j)
для i = n, n − 1, . . . , 1 выполнять // в обратном порядкеПринять_у_процессаn(ci∗)
Параллельное программирование 14 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Алгоритм рабочего процесса
Пример (алгоритм i-го рабочего процесса)
вспомогательные данные: a, b, c , d ∈ Rn
начало1 Получить строки матрицы A с номерами от i до n. Первую сохранить в a,
остальные передать дальше (если i < n)2 Получить все столбцы матрицы B и вычислить i-ю строку C . Столбцы B
передать дальше, если i < n3 Передать вычисленную строку матрицы C следующему рабочему (при
i < n) или управляющему процессу.
Параллельное программирование 15 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Алгоритм рабочего процесса (продолжение)
Пример (алгоритм 1: передача строк матрицы A)
Принять_у_процессаi−1(a); // 0-й процесс — управляющийдля каждого ` ∈ [i + 1, n]N выполнять // при i == n ни разу
Принять_у_процессаi−1(d)Отправить_процессуi+1(d)
Пример (алгоритм 2: вычисление строки C )
для каждого j ∈ [1, n]N выполнятьПринять_у_процессаi−1(b)если i < n, то
Отправить_процессуi+1(b)cj ← 〈a, b〉
Параллельное программирование 16 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Алгоритм рабочего процесса (продолжение)
Пример (алгоритм 1: передача строк матрицы A)
Принять_у_процессаi−1(a); // 0-й процесс — управляющийдля каждого ` ∈ [i + 1, n]N выполнять // при i == n ни разу
Принять_у_процессаi−1(d)Отправить_процессуi+1(d)
Пример (алгоритм 2: вычисление строки C )
для каждого j ∈ [1, n]N выполнятьПринять_у_процессаi−1(b)если i < n, то
Отправить_процессуi+1(b)cj ← 〈a, b〉
Параллельное программирование 16 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
Управляющий-рабочиеВзаимодействующие равныеКонвейер
Алгоритм рабочего процесса (окончание)
Пример (алгоритм 3: передача строки C )
inext ← (i + 1) mod (n + 1); // после n идёт 0Отправить_процессуinext(c)для каждого ` ∈ [1, i − 1]N выполнять // остальные строки C
Принять_у_процессаi−1(d)Отправить_процессуinext(d)
Параллельное программирование 17 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Мониторы
Определения
Монитор: инкапсулирует представление абстрактного объекта,разделяемого несколькими процессами, и обеспечивает наборопераций для доступа к нему. Вся синхронизация доступаобеспечивается самим монитором.
Пассивный монитор: реализуется в системах с общей памятью при помощиразделяемых переменных и примитивов синхронизации(условные переменные и т. д.)
Активный монитор: реализуется в системах с распределённой памятью припомощи передачи сообщений по концепции «клиент-сервер»в виде отдельного процесса («сервер»).
Инвариант монитора: условие, истинное по отношению к состоянию(внутренним переменным) монитора независимо от порядкавызова его процедур.
Параллельное программирование 18 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Мониторы
Определения
Монитор: инкапсулирует представление абстрактного объекта,разделяемого несколькими процессами, и обеспечивает наборопераций для доступа к нему. Вся синхронизация доступаобеспечивается самим монитором.
Пассивный монитор: реализуется в системах с общей памятью при помощиразделяемых переменных и примитивов синхронизации(условные переменные и т. д.)
Активный монитор: реализуется в системах с распределённой памятью припомощи передачи сообщений по концепции «клиент-сервер»в виде отдельного процесса («сервер»).
Инвариант монитора: условие, истинное по отношению к состоянию(внутренним переменным) монитора независимо от порядкавызова его процедур.
Параллельное программирование 18 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Мониторы
Определения
Монитор: инкапсулирует представление абстрактного объекта,разделяемого несколькими процессами, и обеспечивает наборопераций для доступа к нему. Вся синхронизация доступаобеспечивается самим монитором.
Пассивный монитор: реализуется в системах с общей памятью при помощиразделяемых переменных и примитивов синхронизации(условные переменные и т. д.)
Активный монитор: реализуется в системах с распределённой памятью припомощи передачи сообщений по концепции «клиент-сервер»в виде отдельного процесса («сервер»).
Инвариант монитора: условие, истинное по отношению к состоянию(внутренним переменным) монитора независимо от порядкавызова его процедур.
Параллельное программирование 18 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Мониторы
Определения
Монитор: инкапсулирует представление абстрактного объекта,разделяемого несколькими процессами, и обеспечивает наборопераций для доступа к нему. Вся синхронизация доступаобеспечивается самим монитором.
Пассивный монитор: реализуется в системах с общей памятью при помощиразделяемых переменных и примитивов синхронизации(условные переменные и т. д.)
Активный монитор: реализуется в системах с распределённой памятью припомощи передачи сообщений по концепции «клиент-сервер»в виде отдельного процесса («сервер»).
Инвариант монитора: условие, истинное по отношению к состоянию(внутренним переменным) монитора независимо от порядкавызова его процедур.
Параллельное программирование 18 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов
Реализация в системах с распределённой памятью
Для моделирования монитора используется один серверный процесс.Переменные состояния монитора реализуются при помощи локальныхпеременных процесса.Вначале сервер инициализирует локальные переменные, затем в циклевыполняет обслуживание запросов.
Параллельное программирование 19 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов
Реализация в системах с распределённой памятью
Для моделирования монитора используется один серверный процесс.Переменные состояния монитора реализуются при помощи локальныхпеременных процесса.Вначале сервер инициализирует локальные переменные, затем в циклевыполняет обслуживание запросов.
Параллельное программирование 19 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов
Реализация в системах с распределённой памятью
Для моделирования монитора используется один серверный процесс.Переменные состояния монитора реализуются при помощи локальныхпеременных процесса.Вначале сервер инициализирует локальные переменные, затем в циклевыполняет обслуживание запросов.
Параллельное программирование 19 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов (окончание)
Реализация в системах с распределённой памятью (окончание)
При имитации вызова процедуры клиентский процесс сначала отправляетсообщение в канал запроса, затем получает результат из канала ответа.Каждому клиенту необходим собственный канал ответа.Для выбора канала ответа сервер должен определять идентификаторклиента, отправившего запрос.При реализации сервером нескольких операций клиент также долженотправлять в запросе номер требуемой операции.Формальные параметры операции реализуются при помощи локальныхпеременных сервера, значения которых считываются им из клиентскогозапроса.Инвариант монитора реализуется при помощи инварианта цикла,обслуживающего запросы сервера.
Параллельное программирование 20 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов (окончание)
Реализация в системах с распределённой памятью (окончание)
При имитации вызова процедуры клиентский процесс сначала отправляетсообщение в канал запроса, затем получает результат из канала ответа.Каждому клиенту необходим собственный канал ответа.Для выбора канала ответа сервер должен определять идентификаторклиента, отправившего запрос.При реализации сервером нескольких операций клиент также долженотправлять в запросе номер требуемой операции.Формальные параметры операции реализуются при помощи локальныхпеременных сервера, значения которых считываются им из клиентскогозапроса.Инвариант монитора реализуется при помощи инварианта цикла,обслуживающего запросы сервера.
Параллельное программирование 20 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов (окончание)
Реализация в системах с распределённой памятью (окончание)
При имитации вызова процедуры клиентский процесс сначала отправляетсообщение в канал запроса, затем получает результат из канала ответа.Каждому клиенту необходим собственный канал ответа.Для выбора канала ответа сервер должен определять идентификаторклиента, отправившего запрос.При реализации сервером нескольких операций клиент также долженотправлять в запросе номер требуемой операции.Формальные параметры операции реализуются при помощи локальныхпеременных сервера, значения которых считываются им из клиентскогозапроса.Инвариант монитора реализуется при помощи инварианта цикла,обслуживающего запросы сервера.
Параллельное программирование 20 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов (окончание)
Реализация в системах с распределённой памятью (окончание)
При имитации вызова процедуры клиентский процесс сначала отправляетсообщение в канал запроса, затем получает результат из канала ответа.Каждому клиенту необходим собственный канал ответа.Для выбора канала ответа сервер должен определять идентификаторклиента, отправившего запрос.При реализации сервером нескольких операций клиент также долженотправлять в запросе номер требуемой операции.Формальные параметры операции реализуются при помощи локальныхпеременных сервера, значения которых считываются им из клиентскогозапроса.Инвариант монитора реализуется при помощи инварианта цикла,обслуживающего запросы сервера.
Параллельное программирование 20 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов (окончание)
Реализация в системах с распределённой памятью (окончание)
При имитации вызова процедуры клиентский процесс сначала отправляетсообщение в канал запроса, затем получает результат из канала ответа.Каждому клиенту необходим собственный канал ответа.Для выбора канала ответа сервер должен определять идентификаторклиента, отправившего запрос.При реализации сервером нескольких операций клиент также долженотправлять в запросе номер требуемой операции.Формальные параметры операции реализуются при помощи локальныхпеременных сервера, значения которых считываются им из клиентскогозапроса.Инвариант монитора реализуется при помощи инварианта цикла,обслуживающего запросы сервера.
Параллельное программирование 20 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация мониторов (окончание)
Реализация в системах с распределённой памятью (окончание)
При имитации вызова процедуры клиентский процесс сначала отправляетсообщение в канал запроса, затем получает результат из канала ответа.Каждому клиенту необходим собственный канал ответа.Для выбора канала ответа сервер должен определять идентификаторклиента, отправившего запрос.При реализации сервером нескольких операций клиент также долженотправлять в запросе номер требуемой операции.Формальные параметры операции реализуются при помощи локальныхпеременных сервера, значения которых считываются им из клиентскогозапроса.Инвариант монитора реализуется при помощи инварианта цикла,обслуживающего запросы сервера.
Параллельное программирование 20 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Алгоритм процесса-сервера
Пример (алгоритм реализации активного монитора)
вспомогательные данные: k ∈ Z // номер процесса клиентаначало
Инициализировать локальные переменныепока обрабатывать, выполнять
Принять_у_любого(k, н_операции, аргументы)в зависимости от н_операции выполнять
при”операция1“
Тело операции”операция1“;
. . . ; // аналогично — остальные операциипри
”операцияq“
Тело операции”операцияq“;
Отправить_процессуk(результат)
Параллельное программирование 21 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Алгоритм процесса-клиента
Пример (алгоритм реализации вызова активного монитора)
функция Вызвать_клиентом_операцию_1(аргументы)начало
// k — номер клиентаОтправить_процессу0(k ,
”операция1“, аргументы)
/* Требуется, только если операция имеет возвращаемое значение */Принять_у_процесса0(результат)вернуть результат
Параллельное программирование 22 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация стека
Пример (алгоритм обслуживания стека)
вспомогательные данные: k, k ′ ∈ Z // номера клиентовначало
пока обрабатывать, выполнятьПринять_у_любого(k, н_операции, аргументы)в зависимости от н_операции выполнять
при”положить_в_стек“
1 Реализация операции”положить_в_стек“
при”взять_из_стека“
2 Реализация операции”взять_из_стека“
Параллельное программирование 23 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация стека (окончание)
Пример (алгоритм помещения данных в стек (строка 1))
если Очередь_клиентов_пуста, то // очередь ожидающих клиентовПоместить_в_стек(аргументы.значение)
иначе // есть ожидающие клиенты в очередиВзять_из_очереди_клиентов(k ′)Отправить_процессуk′(аргументы.значение)
Пример (алгоритм извлечения данных из стека (строка 2))
если Стек_пуст, тоПоместить_в_очередь_клиентов(k); // в очередь ожидающих// Не отправлять клиенту ответ
иначе // стек не пустВзять_из_стека(значение)Отправить_процессуk(значение)
Параллельное программирование 24 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределенияРеализацияПример (стек)
Реализация стека (окончание)
Пример (алгоритм помещения данных в стек (строка 1))
если Очередь_клиентов_пуста, то // очередь ожидающих клиентовПоместить_в_стек(аргументы.значение)
иначе // есть ожидающие клиенты в очередиВзять_из_очереди_клиентов(k ′)Отправить_процессуk′(аргументы.значение)
Пример (алгоритм извлечения данных из стека (строка 2))
если Стек_пуст, тоПоместить_в_очередь_клиентов(k); // в очередь ожидающих// Не отправлять клиенту ответ
иначе // стек не пустВзять_из_стека(значение)Отправить_процессуk(значение)
Параллельное программирование 24 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределениеПример (умножение разрежённых матриц)
Портфель задач
Определения
Задача: независимая единица работы; различные задачи можновыполнять параллельно. Может порождать подзадачи.
Параллельное программирование 25 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределениеПример (умножение разрежённых матриц)
Умножение разрежённых матриц
Пример (алгоритм управляющего процесса)
входные данные: A ∈ Mn×n (R) // по строкамвыходные данные: C ∈ Mn×n (R) // по строкамначало
inext ← 1; // номер следующей строкиidone ← 0; // количество выполненных задач// Пока нужны ещё задачи или результатыпока inext 6 n или idone < n, выполнять
// Реализация по схеме активного монитора1 Реализация операции н_операции
Параллельное программирование 26 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределениеПример (умножение разрежённых матриц)
Умножение разрежённых матриц (продолжение)
Пример (алгоритм управляющего процесса (строка 1))
Принять_у_любого(k, н_операции, аргументы)в зависимости от н_операции выполнять
при”получить_задачу“
Отправить_процессуk(inext, ainext ∗); // строку Ainext ← inext + 1
при”поместить_результат“
i ← аргументы.номер_строкиci∗ ← аргументы.строкаidone ← idone + 1
Параллельное программирование 27 / 28
НачалоМодели взаимодействия процессов
МониторыПортфель задач
ОпределениеПример (умножение разрежённых матриц)
Умножение разрежённых матриц (окончание)
Пример (алгоритм рабочего процесса)
входные данные: B ∈ Mn×n (R) // по столбцамначало
пока”истина“, выполнять
Отправить_процессу0(”получить_задачу“)
Принять_у_процесса0(i , ai∗); // номер и строку Aci∗ ← ai∗ BОтправить_процессу0(”
поместить_результат“, i , ci∗)
Параллельное программирование 28 / 28