Intel-лаборатория НГУ 06.02.2010 О ПРОБЛЕМЕ НАЧАЛЬНОГО ОБУЧЕНИЯ ПАРАЛЛЕЛЬНОМУ ПРОГРАММИРОВАНИЮ Лидия Васильевна Городняя gorod@iis.nsk.su ИСИ СО РАН им.

Презентация:



Advertisements
Похожие презентации
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Advertisements

Алгоритмические конструкции. Решить задачу при х=16, у=2.
Тест классы По программированию Pascal.
Виды алгоритмических структур: –блок-схема. –линейный алгоритм. –алгоритмическая структура «ветвление». –алгоритмическая структура «выбор». –алгоритмическая.
Циклические алгоритмы Повторение - это многократное выполнение одного или нескольких предписаний алгоритма. Цикл - это оператор языка программирования,
Презентацию составила учитель первой категории МБОУ СОШ 14 имени К.С.Федоровского г.Юрги Кемеровской области Яковлева Ирина Владимировна.
Студент группы МТ Уросов Александр Павлович Научный руководитель Авербух Владимир Лазаревич Доцент КИПУ Кандидат технических наук.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
Основные типы алгоритмических структур. Линейный алгоритм ( следование ) Алгоритм, в котором команды выполняются последовательно одна за другой, называется.
Тема 2. Операторы (инструкции) передачи управления. Условный оператор (инструкция) и его формы. Логические выражения и логические переменные. Составные.
Алгоритм Леонид 10 класс. Алгоритм - это строго детерминированная последовательность действий, описывающая процесс преобразования объекта из начального.
Что такое программирование? Совокупность процессов, связанных с разработкой программ и их реализацией. В широком смысле к указанным процессам относят все.
Алгоритм Свойства алгоритмов. algorithmi Латинская форма написания имени выдающегося математика 19 века аль-Хорезми, который сформулировал правила выполнения.
Алгоритмические конструкции. Виды алгоритмов 1. Линейные алгоритмы 2. Разветвляющие алгоритмы 3. Циклические алгоритмы.
Анализ вычислительной сложности алгоритмов Теория сложности вычислений.
Алгоритмизация и программирование. Языки программирования высокого уровня. Технологии программирования Алгоритмизация и программирование. Языки программирования.
Методика распараллеливания программ в модели DVM Институт прикладной математики им. М.В.Келдыша РАН
Алгоритмизация и программирование Зозулина Любовь Сергеевна, учитель информатики МОУ «СОШ 3» г. Первоуральск.
Начала программирования Блинова Т.П., учитель информатики НМОУ «Лицей 84», г. Новокузнецк.
Сортировка методом пузырька, выбором (Pascal) Кокарева Светлана Ивановна.
Транксрипт:

Intel-лаборатория НГУ О ПРОБЛЕМЕ НАЧАЛЬНОГО ОБУЧЕНИЯ ПАРАЛЛЕЛЬНОМУ ПРОГРАММИРОВАНИЮ Лидия Васильевна Городняя ИСИ СО РАН им. А.П. Ершова

Уровни и цели обучения Начальное (полгода в лет) - интуитивное понимание параллелизма, - навыки синхронизации независимо запрограммированных потоков, - ознакомление с проблемами взаимодействия параллельных процессов. Допроизводственное (2 года с/к для старшеклассников и студентов) - базовые теории параллельных вычислений, - навыки программирования, отладки и оптимизации параллельных алгоритмов, - опыт оценки производительности программ и распараллеливания программ с учетом различных видов памяти и коммуникаций, нацеленные на переход к производственным средствам. Целенаправленное (специализация и научный эксперимент)

Требования к языку обучения параллельному программированию Многовариантность лингвистической базы. Концентричность по уровням обучения. Естественность представления и понимания параллельных программ Визуализация объектов и процессов при отладке. Представление и преобразование моделей управления процессами. Определение видов памяти с разной дисциплиной доступа. Настраивание на производственные языки и системы. Выводимость оценки значимых характеристик производительности программ.

Проблемы реализации языка предпроизводственного уровня (дальняя перспектива) Общая сетевая модель параллельных процессов. Типизация моделей управления процессами Спецификация многоуровневой памяти и межпроцессорных взаимодействий. Анализ и преобразование программ в соответствии с целевой архитектурой. Программная поддержка кросс-компиляции, отладки и оптимизации программ (тесты, протоколы и сценарии). Интеграция императивных и функциональных моделей управления вычислениями с производственными системами.

Проект языка начального обучения Учтен опыт и история языков: Basic, Pascal, Logo, Grow, Робик, Рапира, Lisp, Scheme, Prolog, REX, Forth, A++, ECL, Elan, Karel, MIX, MMIX, APL, Algol-68, Setl, Ada, БАРС, SISAL, mpC и др.

Текущие задачи Учебные языки программирования XXI века поддерживают основные парадигмы программирования на ЯВУ: императивное функциональное логическое объектно-ориентированное. Проблема - параллельное программирование (GPU, MPI, Open MP)

Основные понятия Поток: серия (команда | структура) фильтр Серия: после, одновременно, исключение, тираж Структура: очередь, множество, вариант, вектор Команда: (отображение, управление, поток) / длительность Отображение: данное {результат | отказ} фильтр

Основные понятия Управление: Ожидание, Ветвление, Цикл Ветвление: условие, вероятность Цикл: (условие тело) фильтр Ожидание: начало_потока конец_потока барьер событие

Основные понятия Условие: фильтр предикат: when-until кратность структура Вероятность: положительное число < 1 % число < 100 M/N часто, редко, иногда, обычно, возможно Длительность: число часы Скорость: число быстро, норма, медленно

Проект ЯПП %Язык начального обучения параллельному программированию Пр = [( Барьер... )] [ [ПОТОКИ] Поток ( [, ] Поток )...] % Программа состоит из сети совместно выполняемых потоков. % Барьеры- это метки, выделяющие в сети потоков % параллели – синхронизуемые звенья.

Проект ЯПП Поток = [( Барьер... )] [Имя_потока = ] ( Дир ( [ ; ] Дир )... ) % Поток – это сосредоточенное описание % рассредоточенных действий, % согласованное с другими потоками с помощью барьеров

Проект ЯПП Дир = Простое | Сложное | Метка : Дир | Исполнитель ! Дир | Данные | Дир [[{ | =}] [РЕЗУЛЬТАТ] Фильтр] % Директивы выполняются, если могут. % Иначе следующие (;) за ними НЕ выполняются, % но могут выполняться независимые [,].

Проект ЯПП Простое = [РЕЗУЛЬТАТ] Выр Сложное = Управление Дир | Вариант | Одновременно | Последовательно Управление = Ожидание | Обход | Цикл

Проект ЯПП Ожидание = ЖДИ Число [:] | КОГДА Метка [:] | ПРИ Усл [:] % управление останавливается перед директивой, % пока не выполнится условие ожидания Обход = ЕСЛИ Клапан ТО | ЕСЛИ_НЕ Клапан ТО | [ВЕРОЯТНО] Число % % управление переходит вслед за директивой Цикл = [ПОКА Усл] ПОВТОР | ПОВТОР Целое РАЗ

Проект ЯПП Варианты = { [ВАРИАНТ] Дир ( [ | ] Дир )... } % успешное завершение одного варианта % дает сигнал о принудительном прерывании остальных, % и происходит откатка незавершенных вариантов % перебор или выбор вариантов идет слева направо Одновременно = [ [СОВМЕСТНО] Дир ( [, ] Дир )...] % неимперативная одновременность Последовательно = ( ( [ ; ] Дир )... ) % между соседними директивами может быть % выполнение директив из смежных потоков

Проект ЯПП Выр = Имя | Значение | Отображение | Арг Операция Арг | Фильтр Отображение = Имя_ФН ( Арг...) Операция = > | = | | + | - | * |... % и другие % Операции просачиваются относительно структур Фильтр = > | = | … % и другие % выделяются элементы, соответствующие сравнению

Проект ЯПП Исполнитель = Имя_ФН Арг = Простое Знач = Число | Текст | Структура | Функция | Исполнитель | Метка | ПУСТО | ДА | НЕТ | НЕИЗВЕСТНО | ЧАСТО | РЕДКО | ИНОГДА

Проект ЯПП Структура = Очередь | Вектор % При чтении элементы из очереди удаляются, % новые попадают в «хвост» Клапан = Усл % Клапан пропускает управление, % регулируя выполнение/невыполнение директивы Усл = Выр Барьер = Метка % Барьеры выделяют в потоках синхронизуемые параллели. % Можно делать выборки-вырезки из потоков, указывая барьеры. Метка = Имя

Поливариантный синтаксис Абстрактный синтаксис Конкретные вариации фразеологической поддержки по выбору учителя и уровню обучения (setq А Б) А := Б Переменной А присвоить значение выражения Б Значение Б разместить по адресу А Теперь А имеет то же значение, что и Б Б -> А

Источники примеров Олимпиады Хоар Ч. Взаимодействующие последовательные процессы. М.: Мир Робик (исполнители)

Олимпиадная задача 3 котлеты на 2 сковороды Для обжарки одной стороны котлеты требуется 5 минут. Имеется 2 сковороды, на них надо как можно скорее поджарить 3 котлеты. Примечание: на Intel-семинаре в Москве упоминалась как пример немасштабируемого алгоритма. Надо предложить и ясно записать масштабируемое решение.

3 котлеты на 2 сковороды ОЧЕРЕДЬ жарить = (2 2 2), % предстоит обжарить 2 стороны каждой котлеты готово = () % тарелка для готовых котлет % в конце строки ; не обязательна ВЕКТОР сковороды [1..2] ПОКА жарить ПОВТОР % общая вертикаль выделяет блок жарить сковороды % два первых элемента из очереди исчезают ЖДУ 1 % время «жарки» сковороды = ( сковороды - 1) % внутренний цикл: ск [i] = ск [i] - 1, % значит, что одна сторона обжарена [ (жарить ; (сковороды ? 0)), % «недожаренные» (= 1) становятся в очередь (готово ; (сковороды ?= 0)) ] % накапливается результат (со 2-го витка) % разделили готовые и требующие жарки РЕЗУЛЬТАТ готово % = (0 0 0 )

2-3: описание данных ОЧЕРЕДЬ жарить = (2 2 2), % предстоит обжарить 2 стороны каждой котлеты готово = ( ) % тарелка для готовых котлет ВЕКТОР сковороды [1..2]

2-3: основной цикл ПОКА жарить ПОВТОР жарить сковороды % два первых элемента ЖДУ 1 % время «жарки» сковороды = ( сковороды - 1) % одна сторона обжарена [ (жарить ; (сковороды 0)), (готово ; (сковороды = 0)) ] % разделили готовые и требующие жарки РЕЗУЛЬТАТ готово % = (0 0 0 )

Хоар: Простой торговый автомат Описать поведение автомата, принимающего монету, а потом выдающего шоколадку

Хоар: Простой торговый автомат ПОВТОР ( ! мон ; % сначала прием монетки, ? шок ) % потом выдача шоколадки

Хоар: Простой торговый автомат с доверием Автомат допускает выдачу шоколадки до получения монетки - доверяет покупателю.

Хоар: Простой торговый автомат с доверием ПОВТОР [ ! мон, % прием монетки и независимо ? шок ] % выдача шоколадки в любом порядке

Хоар: Простой торговый автомат (учет числа шоколадок в автомате) Автомат может по разным причинам не выдать шоколадку. Описать поведение автомата, сообщающего покупателю об отсутствии товара и возвращающего монету.

Хоар: Простой торговый автомат (учет числа шоколадок в автомате) шоколадки = N % число шоколадок в автомате ПОКА шоколадки ПОВТОР ( ! мон ; % прием монетки ? шок % выдача шоколадки шоколадки = шоколадки – 1 ) % учет остатка ? «шоколадок пока нет» ! мон % возврат монетки СТОП

Хоар: Простой торговый автомат (Хоар): подсчет выручки Описать автомат, выполняющий подсчет выручки. Считаем, что монетоприемник по объему превышает объем возможной выручки.

Хоар: Простой торговый автомат (Хоар): подсчет выручки Монеты = M % выручка % монетоприёмник вмещает монет больше, % чем число шоколадок в автомате ПОКА шоколадки ПОВТОР ( ! мон % прием монетки ? шок % выдача шоколадки монеты = монеты + 1 ) % подсчет выручки СТОП

Счетчики шоколадки = N % для учета ПОКА шоколадки ПОВТОР шоколадки = шоколадки – 1 % монеты = M % для подсчета выручки ПОВТОР монеты = монеты + 1

Взаимодействие процессов Имеются описания разных счетчиков, контролирующих работу автомата. Синхронизовать действия счетчиков.

Расстановка барьеров для взаимодействия процессов ПТА = ПОВТОР ( ! мон ; % сначала прием монетки, Контроль: % барьер ? шок ) % потом выдача шоколадки УЧЕТ = шоколадки = N ПОКА шоколадки ПОВТОР Контроль: % барьер шоколадки = шоколадки – 1 СТОП

Определение взаимодействия ПТА_С_УЧЕТОМ = (Контроль) [ ПТА, УЧЕТ ] % общий барьер

Автомат с заманиванием ПТА = ПОВТОР ( ! мон ; % сначала прием монетки, ? шок % потом выдача шоколадки Контроль: ) ВЫИГРЫШ = ПОВТОР Контроль: ИНОГДА % ? сувенир % иногда выдается «приманка» ВЫРУЧКА = монеты = M ПОВТОР Контроль:монеты = монеты + 1

Варианты взаимодействий (Контроль) % барьер во всех процессах [ ПТА, УЧЕТ, ВЫРУЧКА ] % автомат с учетом числа шоколадок и подсчетом монет [(Контроль) ПТА, (Контроль) УЧЕТ, % процессы синхронизованы ВЫИГРЫШ ] % процесс без барьеров % автомат с учетом числа шоколадок, возможно заманивание

Функции Ф_ПТА = (мон шок) ( мон ; шок ; Контроль: Ф_ПТА ) % по умолчанию параметры сохраняются Ф_ПТА (жетон, игрушка) % явная параметризация (Контроль) [Ф_ПТА (жетон, игрушка), ВЫРУЧКА ]

Управление рекурсией УЧЕТ = ( N ) ПОКА N ПОВТОР Контр: N = N – 1 Ф_ПТА = (мон шок) ( мон ; шок ; Контр: Ф_ПТА ) (Контр) [Ф_ПТА (жетон, игрушка), УЧЕТ (4)] % выдать 4 игрушки

Переименование барьера УЧЕТ_Б = ( N b ) ПОКА N ПОВТОР b: N = N – 1 Ф_ПТА_Б = (мон шок p) ( мон ; шок ; p: Ф_ПТА_Б ) (Контр) [Ф_ПТА_Б (жетон, игрушка, Контр), УЧЕТ (4, Контр)]

Sisal - произведение матриц Массив из суммы произведений (строка на столбец)

Sisal - произведение матриц function MM ( A, B ) if size (A, 2) ~= size (B, 1) then Error[] else array [ i in 1.. size (A, 1), j in 1.. size (B, 2) : [i,j] sum (A [ i,..] * B [.., j] ) ] end if end function

Sisal - быстрая сортировка Быстрая сортировка: рекурсия с разделением на каждом шаге на меньшие, равные и большие

Sisal - быстрая сортировка Function QS (Data) If ( size (Data) < 2 then Data ) else Let Pivot := Data [ liml (Data)] Low, Mid, High := for E in Data do returns array of E when E < Pivot, array of E when E = Pivot, array of E when E > Pivot end for in QS (Low) || Mid || QS (High) end if end function

Параллельная сортировка Сравнивать по 2 соседних элемента на процессор, меняя порядок, где надо. Потом сдвинуть процессоры на один элемент и т.д. пока не обнаружится, что порядок достигнут, т.е. обмена не происходит.

Параллельная сортировка процессоры П [1.. K]; числа A [1.. 2K]; цикл ( для i из 1.. К выполнять П [i] : { ? A [ 2*i - 1] =< A [ 2*i] | A [ 2*i - 1] A [ 2*i]} % перебор вариантов слева направо ; % затем для i из 1.. К-1 выполнять П [i] : { ? A [ 2*i] >= A [ 2*i + 1] | A [ 2*i] A [ 2*i +1] } ) пока выполнялось ( )

Первоочередные мероприятия Включение учебного материала по параллельному программированию для учащихся младшего и среднего звена в план работы ЗШ на сайте НГУ Запуск серии учебных проектов по детской разработке систем управления визуальными роботами и игр на ЛШЮП Подготовка для Всесибирской олимпиады по программированию задач, естественно решаемых в терминах параллельных процессов

Литература 1. Воеводин В.В., Воеводин Вл.В. Параллельные вычисления.- СПб.: БХВ-Петербург, – 608 с. 2. Котов В.Е. МАРС: архитектуры и языки для реализации параллелизма. с Системная информатика. Вып 1. Проблемы современного программирования. - Новосибирск: Наука. Сиб. отд-ние, с. 3. Хоар Ч. Взаимодействующие последовательные процессы. М.: Мир, 264 с о Робике

Спасибо за внимание