1 Пять парадигм параллельного программирования Хусаинов Ахмет Аксанович husainov51@yandex.ru husainov51@yandex.ru http://husainov51.narod.ru.

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



Advertisements
Похожие презентации
Группы гомологий категории частичного действия моноида Хусаинов А.А.
Advertisements

1. Определить последовательность проезда перекрестка
Урок повторения по теме: «Сила». Задание 1 Задание 2.
Рисуем параллелепипед Известно, что параллельная проекция тетраэдра, без учета пунктирных линий, однозначно определяется заданием проекций его вершин (рис.
Кубические гомологии моноидов трасс Хусаинов А.А.
Интернет Университет Суперкомпьютерных технологий Лекция 1 Основные понятия Учебный курс Введение в параллельные алгоритмы Якобовский М.В., д.ф.-м.н. Институт.
Математическая модель задачи о читателях и писателях Хусаинов А.А.
Разработал: Учитель химии, биологии высшей квалификационной категории Баженов Алексей Анатольевич.
Школьная форма Презентация для родительского собрания.
Масштаб 1 : 5000 Приложение 1 к решению Совета депутатов города Новосибирска от _____________ ______.
1 Знаток математики Тренажер Таблица умножения 2 класс Школа 21 века ®м®м.
1© Богомолова ОМ. Многоугольник называется вписанным в окружность, если все его вершины принадлежат окружности Окружность при этом называется описанной.
Ребусы Свириденковой Лизы Ученицы 6 класса «А». 10.
3 Законы Кирхгофа справедливы для линейных и нелинейных цепей при постоянных и переменных напряжениях и токах.
Функция Определение, способы задания, свойства, сведённые в общую схему исследования.
1© Богомолова ОМ. 2 Площадь треугольника равна половине произведения его стороны на высоту, проведенную к этой стороне Площадь треугольника равна половине.
Урок-обобщение (7 класс – алгебра) МОУ "СОШ 45 г. Чебоксары" Кабуркина М. Н.1.

1 ПРЕЗЕНТАЦИЯ ПАКЕТА ПРОГРАММ «STEP+» Численное исследование автономных систем обыкновенных дифференциальных уравнений и нелинейных уравнений общего вида.
Ф. Т. Алескеров, Л. Г. Егорова НИУ ВШЭ VI Московская международная конференция по исследованию операций (ORM2010) Москва, октября 2010 Так ли уж.
Транксрипт:

1 Пять парадигм параллельного программирования Хусаинов Ахмет Аксанович

2 Основные разделы 1)Что такое параллельная программа? 2)Пять стилей параллельного программирования 3)Ноутбук как симметричная мультипроцессорная система (SMP) 4)Как писать параллельные программы? 5)Итеративный параллелизм и семафоры 6)Математическое моделирование параллельных вычислительных систем 7)Моноиды трасс и вычислительные процессы 8)Полукубические множества 9)Моноиды трасс и полукубические множества 10)Рекурсивный параллелизм 11)Конвейерные системы 12)Производители и потребители: каналы 13)Клиент-сервер: задача о читателях и писателях 14)Асинхронные системы 15)Асинхронные системы и кубические множества 16)Взаимодействующие каналы 17)Сети Петри и асинхронные системы 18)Топология – «резиновая» геометрия 19)Числа Бетти 20)Вычисление чисел Бетти 21)Числа Бетти полукубических множеств 22)Числа Бетти асинхронных систем 23)Числа Бетти сетей Петри 24)Открытые проблемы

3 Что такое параллельная программа? Время вычисления суммы s=((a+b)+c)+d равно 3 такта Для двух параллельно работающих процессоров существует программа, вычисляющая за 2 такта x=a+by=c+d s=x+y

4 Пять стилей параллельного программирования Итеративный параллелизм Рекурсивный параллелизм Производители и потребители Клиенты и серверы Взаимодействующие каналы (или взаимодействующие равные) Эндрюс Г.Р. Основы многопоточного, параллельного и распределенного программировния. – М.: Изд. дом «Вильямс», 2003

5 Ноутбук как симметричная мультипроцессорная система (SMP) Архитектура SMP : ЦП Кэш ЦП Кэш ЦП Кэш СВЯЗЬ ОБЩАЯ ПАМЯТЬ

6 Как писать параллельные программы? 1. Разрабатываются подпрограммы, которые могут выполняться независимо. Например, для метода трассировки лучей пишется подпрограмма DWORD WINAPI Part(void *a) {…} v наблюдатель источник света p выводящая точки в заданную прямоугольную область окна. Она вызывает для каждой точки прямоугольника функцию, зависящую от координат точки и от положения наблюдателя и вычисляющую цвет точки Метод трассировки лучей описан в учебном пособии Хусаинов А.А., Михайлова Н.Н. Программирование графики в Borland C++. – КнАГТУ, 2009.

7 Как писать параллельные программы? Эта подпрограмма всегда имеет один аргумент типа (void *). Если подпрограмма имеет несколько параметров, то они передаются через структуру. В частности для метода трассировки аргумент указывает на структуру, содержащую номер окна. При числе окон=10, номер = 0, …, 9:

8 Как писать параллельные программы? Например: struct arg { int ithr ; … }; DWORD WINAPI Part(void *a) { int it=((arg *)a)->ithr;… } Эти подпрограммы вызываются главной программой, или подпрограммами, с помощью функции CreateThread(). Например, для метода трассировки лучей for (i=0;i

9 Итеративный параллелизм и семафоры Метод трассировки лучей реализуется с помощью цикла, в котором на каждом шаге вызывается некоторая подпрограмма, причем подпрограммы работают независимо. Это позволяет нам запускать эти подпрограммы одновременно как потоки. Поскольку число процессов намного меньше числа точек, то мы объединили части цикла в подпрограммы. И запускаем потоки параллельно. К сожалению, экран не позволяет различным потокам выводить точки на экран одновременно В частности, при числе потоков равном 4, мы получаем следующую картину:

10 Итеративный параллелизм и семафоры

11 Итеративный параллелизм и семафоры Для того, чтобы исправить это, введем Определение. Семафором Дейкстры называется структура данных, состоящая из неотрицательного числа s (счетчика семафора) и двух унарных операций P(s) и V(s). Операция V(s) увеличивает s на 1. Операция P(s) сначала зависает на то время, пока s = 0. Когда будет выполнено условие s>0, P(s) отнимет от s единицу и продолжит выполнение. Если имеется некоторый разделяемый ресурс, в данном случае экран, то, для того, чтобы в каждый момент времени им мог воспользоваться 1 поток, перед использованием нужно выполнить операцию P(s), а после использования – V(s). В начале работы главной программы s=1. Вывод точки осуществляется с помощью операторов WaitForSingleObject(sema,INFINITE); // операция P(s) SetPixel(dc,x,y,color);// вывод на устройство dc ReleaseSemaphore(sema, 1, NULL); // операция V(s) Предварительно семафор создается с помощью вызова Handle sema=CreateSemaphore(NULL,1,1,NULL);

12 Итеративный параллелизм и семафоры

13 Итеративный параллелизм и семафоры Пример программы, в которой решается проблема сериализации. Рассмотрим задачу вычисления интеграла равного площади фигуры ограниченной кривой y=1/(1+x 2 ) и прямыми x=0; y=0; x=1. Определим данные volatile int j=0; HANDLE mut; double s=0; Напишем подпрограмму добавления площади прямоугольника к сумме. DWORD WINAPI sum(void* ps) // функция потоков { int *k = (int *)ps; double w = (double)(1./(1.+(0. +(*k)) /n* (0. +(*k)) /n)); WaitForSingleObject(mut, INFINITE); // ждем освобождения s s = s + w; j++; // прибавляем значение ReleaseSemaphore(mut,1,NULL); // освобождаем s return 1; }

14 Итеративный параллелизм и семафоры Напишем главную программу main() { int i; int p[n]; for(i=0; i

15 Математическое моделирование параллельных вычислительных систем При синхронизации работы потоков с помощью семафоров возникают проблемы, связанные с обнаружением тупиков и описанием пространства состояний вычислительного процесса. Рассмотрим, например, два потока, с двумя семафорами s 1 и s 2. Первый из них, поток A, вызывает операции P(s 1 ); P(s 2 ); V(s 2 ); V(s 1 ) Второй, поток B, - P(s 2 ); P(s 1 ); V(s 1 ); V(s 2 )

16 Математическое моделирование параллельных вычислительных систем Рассмотрим математическую модель состоящую из множества состояний, заданных парами точек плоскости (t 1,t 2 ), где t i – доля выполнения i-го потока. Область F будет состоять из тупиков, область G – из недоступных точек. В общем случае возникают Направленные топологические пространства Автоматы высших размерностей. В А (1,1) (0,0) F G P(s 1 ) P(s 2 ) V(s 2 ) V(s 1 ) P(s 1 )P(s 2 )V(s 1 )V(s 2 ) Шведский флаг

17 Математическое моделирование параллельных вычислительных систем Категория состоит из объектов A, B, C, … и морфизмов,,, … Для любых морфизмов и задана композиция такая, что имеет место ( ) = ( ) Для каждого объекта задан тождественный морфизм 1 A : A A такой, что 1 A =, 1 B = Функтор между категориями сопоставляет объектам - объекты, морфизмам – морфизмы, он переводит тождественные морфизмы в тождественные, композицию – в композицию.

18 Математическое моделирование параллельных вычислительных систем Пусть U: A B - функтор. Объект A называется универсальным для B B, если задан морфизм : B U(A) такой, что для любого : B U(A) ! : A A, для которого U( ) =. Примеры: Пополнение метрического пространства является универсальным объектом. Пополнением пространства рациональных чисел будет пространство вещественных чисел. Универсальным объектом для любого множества E по отношению к забывающему функтору Vect Set будет линейное пространство с базисом E. Как связаны между собой категории моделей вычислительных систем?

19 Полукубические множества

20 Полукубические множества

21 Моноиды трасс и вычислительные процессы Что такое вычислительный процесс? Рассмотрим вычислительную систему, состоящую из операций Определение. Пусть E – мн-во, I ExE – наз отношением независимости, если I антирефлексивно и симметрично M(E,I)= E | (a,b) I (ab=ba) - свободный частично- коммутативный моноид или моноид трасс Граф независимости: вершины E, ребра {{a,b}:(a,b) I} Операции вычислительной системы порождают свободный частично коммутативный моноид. Вычислительный процесс – композиция этих операций. Язык Мазуркевича состоит из независающих вычислительных процессов.

22 Моноиды трасс и полукубические множества Теорема 1. Каждому полукубическому множеству с выделенной вершиной соответствует универсальный моноид трасс Соответствующий моноид будет порожден ребрами - 1-кубиками. Перестановочны соседние ребра из 2- кубиков. Отождествляются противоположные. Эта теорема позволяет определить сохраняющие независимость морфизмы полукубических множеств.

23 Рекурсивный параллелизм Метод сдваивания x0x0 x1x1 x2x2 x3x3 x4x4 x5x5 x6x6 x7x S Вычисление суммы методом сдваивания s=sum(0,n-1); int sum(int l, int r) // x[l] + … + x[r] { if(l == r) return x[l]; else return sum(l, (l + r + 1)/2 - 1) + sum((l + r + 1)/2, r); }

24 Рекурсивный параллелизм Данные и структура параметров int x[100]; struct arg {int l, r, res}; Вызываемый поток DWORD WINAPI sum(void* s) { int i, l=((arg *)s)->l, r=((arg *)s)->r; if (l==r) ((arg *)s)->rez = x[l]; // результат else {// в противном случае вызываем два потока с разными аргументами arg *r1 = new arg, *r2 = new arg; HANDLE H[2]; r1->l=l; r1->r= (l+r+1)/2-1; r2->l=(l+r+1)/2; r2->r = r; H[0]= CreateThread(0,0,sum, (void *)r1,0,0); H[1]= CreateThread(0,0,sum, (void *)r2,0,0); WaitForMultipleObjects(2, H, 1, INFINITE); ((arg *)s)->rez = (r1->rez)+(r2->rez); delete r1; delete r2; } return 1; } Вызов из главной программы arg t; t.l = 0; t.r = 99; sum(&t);

25 Рекурсивный параллелизм Рекурсивный параллелизм применяется для распараллеливания алгоритма перебора с возвратом И.А. Трещев установил в программе счетчик, для определения, нужно ли загружать поток, если существуют свободные процессоры, или вызывать этот модуль как рекурсивную подпрограмму. Оказалось, что наибольшее ускорение достигается при числе потоков, большем, чем число процессоров.

26 Конвейерные системы Рассмотрим вычислительную систему для вычисления суммы векторов. Она состоит из 5 микроопераций Comp(a,b) – сравнение порядков Shift(a,b) – сдвиг мантиссы большего числа Add(a,b) – сложение мантисс Norm(a,b) – нормализация Round(a,b) – округление результата Для сложения двух векторов (a 1, …,a n ) и (b 1, …,b n ) в 1-й такт выполняется Comp(a 1,b 1 ), во 2-й Comp(a 2,b 2 ) Shift(a 1,b 1 ) и т.д. :

27 Конвейерные системы CompShiftAddNormRound h(a 1,b 1 ) 2h(a 2,b 2 )(a 1,b 1 ) 3h(a 3,b 3 )(a 2,b 2 )(a 1,b 1 ) 4h(a 4,b 4 )(a 3,b 3 )(a 2,b 2 )(a 1,b 1 ) 5h(a 5,b 5 )(a 4,b 4 )(a 3,b 3 )(a 2,b 2 )(a 1,b 1 ) ……………… nh(a n,b n )(a n-1,b n-1 )(a n-2,b n-2 )(a n-3,b n-3 )(a n-4,b n-4 ) (n+1)h(a n,b n )(a n-1,b n-1 )(a n-2,b n-2 )(a n-3,b n-3 ) (n+2)h(a n,b n )(a n-1,b n-1 )(a n-2,b n-2 ) (n+3)h(a n,b n )(a n-1,b n-1 ) (n+4)h(a n,b n ) Ускорение S 5 =T 1 /T 5 =5nh/((n+4)h) 5

28 Производители и потребители: каналы template class channel { Type *buf; // буфер для очереди int size; HANDLE s, // семафор доступа к очереди empty, full; // число свободных и заполненных мест в очереди int countr, countw; // счетчики чтения и записи public: channel (int n): size(n) // constructor { buf = new Type [n]; countr=0; countw=0; s=CreateSemaphore(NULL,1,1,NULL); // empty=CreateSemaphore(NULL,n,n,NULL); // n свободных мест full=CreateSemaphore(NULL,0,n,NULL); // no full places } void operator > (Type& d) // чтение из канала { WaitForSingleObject(full, INFINITE); // ждем поступления данных WaitForSingleObject(s, INFINITE); // захват буфера d = buf[countr]; countr++; // чтение из очереди if (countw==size) countw=0; ReleaseSemaphore(s,1,NULL); ReleaseSemaphore(empty,1,NULL); // empty++ } };

29 Производители и потребители: каналы С помощью каналов можно реализовать конвейерные системы. Блок конвейера DWORD WINAPI name_op(void *) { Type d; while(1) { ch[in]>>d; ch[out]

30 Клиент-сервер: задача о читателях и писателях Процессы читают и редактируют файл Имеющие право на чтение – читатели На чтение-запись – писатели Писатель может работать только один Читателей может быть несколько Писатели имеют приоритет перед читателями – если писатель поступил, то читатели не могут работать Поступивший писатель становится в очередь Элементы параллельного программирования / под ред. В.Е. Котова – М.: Радио и связь, 1983

31 Асинхронные системы T=(S,s 0,E,I,Tran) S – множество состояний, s 0 S – начальное состояние, E – множество событий, Tran S E S – множество переходов I E E – антирефлексивное симметричное отношение независимости (i)( a E s, s S) (s,a,s) Tran (ii)(s,a,s ) Tran & (s,a,s ) Tran s = s (iii)(a,b) I & (s,a,t) Tran & (t,b,u) Tran ( v S) (s,b,v) Tran & (v,a,u) Tran Пунктированное множество с действием свободного частично коммутативного моноида

32 Асинхронные системы a – читатель поступил доступ b – читатель закончил работу с файлом c – поступил новый писатель d – писатель закончил работу с файлом (0,0) (1,0) (2,0) (0,1) (1,1) (2,1) (2,2) (1,2) (0,2) (0,3) (1,3) (2,3) a a a b b b d b b b b b b b b d d d c c c c c c c c c c c c I I I I I I I I I I I I b

33 Асинхронные системы и кубические множества Теорема 2. Каждой асинхронной системе соответствует некоторое кубическое множество. И наоборот, каждому пунктированному кубическому множеству соответствует универсальная асинхронная система.

34 Асинхронные системы и кубические множества Асинхронным системам соответствуют также полиэдры – топологические пространства, склеенные из точек, отрезков, треугольников и т.д. Топологическим свойствам асинхронных систем посвящена статья Хусаинов А.А., Лопаткин В.Е., Трещев И.А. Исследование математической модели параллельных вычислительных систем методами алгебраической топологии // Сиб.ЖИМ 1, с (2008)

35 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

36 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

37 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

38 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

39 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

40 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

41 Взаимодействующие каналы Сеть Петри волновой системы: x n =u n +sin(v n *v n ), y n =exp(sin(u n -v n )) unun xnxn vn vn - * sin exp + yn yn

42 Взаимодействующие каналы Каналы, соответствующие местам channel *pc[11]; Подпрограмма потока DWORD WINAPI mult(LPVOID) // поток для умножения { int j; double d1, d2; for (j=0; j>d1; *pc[1]>>d2; // прием данных из каналов 0 и 1 *pc[4]

43 Взаимодействующие каналы Полученные «асинхронные систолические системы» называются волновыми системами Более точная математическая модель волновой системы, чем сеть Петри, была разработана и применена для оценки ускорения в диссертации И.А. Трещев «МАТЕМАТИЧЕСКИЕ МОДЕЛИ ПАРАЛЛЕЛЬНЫХ ВЫЧИСЛИТЕЛЬНЫХ ПРОЦЕССОВ И ИХ ПРИМЕНЕНИЕ ДЛЯ ПОСТРОЕНИЯ МНОГОПОТОЧНЫХ ПРИЛОЖЕНИЙ НА СИСТЕМАХ С SMP-АРХИТЕКТУРОЙ »

44 Сети Петри и асинхронные системы Пример p0p0 p1p1 M(E,I)= a,b,c| ac=ca

45 Топология – «резиновая» геометрия (изучает инварианты гомеоморфизмов) Каждой дырке соответствует цикл, не являющийся границей подобласти. В данном случае существует 1-мерный цикл не ограничивающий подобласть Кольцо {(x,y): r 2 x 2 +y 2 R 2 } цикл 0 цикл=0 Числа Бетти

46 Числа Бетти. Резиновый мяч. Любой 1-мерный цикл является границей поверхности, содержащейся в области {(x,y,z): r 2 x 2 +y 2 +z 2 R 2 } {(x,y,z): r 2 x 2 +y 2 +z 2 R 2 }. В данном случае существует 2-мерный цикл, окружающий дырку, и поэтому не являющийся границей. 1 = 0, 2 = 1 1 = 0, 2 = 1

47 Числа Бетти С n = L{(x 0,x 1, …, x n ) – симплекс: x 0 < x 1

48 Числа Бетти. симплексы =3-0-r(d)=3-2=1, 1 =3-r(d)-0=1 0 =3-0-r(d 1 )=3-2=1, 1 =3-r(d 1 )-0=1 2-цепей нет цикл

49 Вычисление чисел Бетти n = dim C n – r( d n )– r (d n+1 ) С 0 = L{0,1,2,3} Q 4, С 1 = L{01,02, 03,12,13, 23} Q 6, С 2 = L{012,013, 023, 123} Q 4 rank d 1 =3, rank d 2 =3 0 =1, 1 = 0, 2 =

50 Числа Бетти полукубических множеств abcdefgh A 11 B 1 C 1 D 11 E F 1 G 1 d1=d1= a b c d e1 f1 g h d2=d2=

51 Числа Бетти асинхронных систем S 0 =S {*}, S 1 ={(s,e 1 ): s S 0,e 1 E}, …, S n = {(s, e 1, …, e n ): s S 0,e 1

52 Числа Бетти асинхронных систем s 0,as 0,bs 1,as 1,bs 2,as 2,b*a*b s0s0 11 s1s1 11 s2s2 11 * 00 rk d 1 = 3 0 =4-3=1, 1 =8-3-3=2, 2 =4-3=1 s0 a bs0 a bs 1 a bs 2 a b*a b (s 0,a) (s 0,b) 1 (s 1,a) 1 (s 1,b) 1 (s 2,a) (s 2,b) 1 (*,a) 110 (*,b) 0 rk d 2 = 3

53 Числа Бетти асинхронных систем 28 октября (четверг), в 12.00, в 201/3 состоится защита диссертации В.Е. Лопаткина «Исследование математических моделей параллельных вычислительных систем методами алгебраической топологии», в ней развиваются Приложения чисел Бетти для нахождения признаков распараллеливаемости Другие инварианты: группы гомологий асинхронных систем, кольца когомологий автоматов высших размерностей и их свойства

54 Числа Бетти сетей Петри 2 подхода к определению чисел Бетти сетей Петри: Сети Петри сопоставляется асинхронная система и вычисляются ее числа Бетти (Husainov A.A. Homology of small categories and asynchronous transition systems // Homology, Homotopy and Applications 2004). В качестве примера, вычислены числа Бетти конвейера из трех переходов Для сети Петри и отношения независимости между переходами строятся 2 частично-упорядоченных множества и вычисляются числа Бетти этих множеств (А.Д. Гринблат, Е.А. Хусаинова)

55 Числа Бетти сетей Петри

56 Открытые проблемы Разработать метод построения многопоточ- ного приложения по асинхронной системе Доказать, что первая группа гомологий асинхронной системы не имеет кручения Могут ли иметь кручение группы гомологий асинхронной системы элементарной сети Петри? Найти признаки разложимости асинхронной системы переходов в параллельную композицию взаимодействующих вычислительных процессов