17
Лъчезар Цонов II курс СИ, 61504

Конкурентни софтуерни архитектури

Embed Size (px)

Citation preview

Лъчезар Цонов

II курс СИ, 61504

Конкурентни архитектури и защо би трябвало да ни интересуват

Архитектурни стилове за конкурентни системи

Supervisor-Worker стил

Паралелно изчисление: едновременното използване на множество компютърни ресурси за извършване на дадена задача

Архитектура, която описва система с паралелни изчисления, може да наречем конкурентна

Разпределените архитектури и системи също влизат в тази категория

Бъдещето – много ядра, много процесори

Паралелизмът може да направи невъзможното възможно◦ И да спести пари

Дори да не сме материалисти

Всички “големи” ползват конкурентни системи по един или друг начин◦ Дори си измислят езици (I’m looking at you, Go)

48 –ядрен процесор, Image credit: Intel

Intel разработват 48-ядрен процесор

Но според тях същата архитектура може да поддържа 1000 ядра без проблем

Проблемът: има ли софтуер, който да си заслужава този труд?

Application 3.5 GHz Quad Core

2.8 GHz Hexa Core

Improvement 4 to 6 cores

3ds max 2011 9.91 10.38 +4.52%

Mafia 2 87.7 82.2 -6.69%

Office 2003 185 174 -6.32%

Excel 2007 25.38 s 19.20 s +24.34%

Far Cry 2 97.54 85.41 -14.20%

TrueCrypt 124 150 +17.34%

X264 Encoding 23 27.13 +15.22%

source:www.xbitlabs.com

Архитектурен стил за конкурентни системи

Един от най-рано използваните

Приложим за всякакъв вид системи◦ Дори вградени

Подходящ за задачи, които може да разбием на части, особено ако са еднакви

Отделяме три модула в системата: Supervisor, Bag, Worker

Bag служи за комуникация между другите два модула

Supervisor генерира задачи и ги слага в общия Bag

Worker взима задача от Bag и я изпълнява◦ Може допълнително Worker да става Supervisor

Bag

Worker

Supervisor

Worker Worker

Put task

Get task

Get task

Get task

Може да добавяме нови Workers без да променяме Supervisor◦ И като цяло да подменяме модули с лекота

Минимално време за изчакване от страна на даден Worker

Само един модул на споделени ресурси◦ Следователно не се загубваме в синхронизация

Лесна за тестване

Гъвкав по отношение на разположението

Изисква работата да се раздели добре на части

Необходими са стратегии за запазване на състояниетo, ако някой Worker спре неочаквано

Не върши работа, ако времето за разделяне на задачи или комуникация между модулите е повече от времето за изчисление на един Worker

Компютърна графика◦ Supervisor – разбива картината на

парчета(buckets) за обработка

◦ Worker – обработва всяко парче самостоятелно

Умножение на матрици◦ Supervisor – разбива матриците на части

◦ Worker – извършва пресмятането

MapReduce◦ Supervisor – подрежда задачите от клиента

◦ Worker – изпълнява Map() или Reduce() върху данните

http://www.theinquirer.net/inquirer/news/2182710/intel-claims-android-ready-multi-core-processors◦ Intel говорят за Android и многоядрените системи

http://www.xbitlabs.com/articles/cpu/display/cpu-benchmark-mainstream.html◦ Сравнение между различни процесори с 2, 4 и 6 ядра

http://www.zdnet.com/intel-why-a-1000-core-chip-is-feasible-3040090968/◦ Intel говорят за 1000-ядрения процесор

http://en.wikipedia.org/wiki/Amdahl%27s_law◦ Колко точно можем да спечелим от паралелизирането на една система

◦ Warning: Math!

http://lukhnos.org/doubleshot/examples/matrixmul/◦ JavaScript пример за силата на конкурентните системи с WebWorkers

http://msdn.microsoft.com/en-us/library/ff963542.aspx◦ Паралелизъм в C# и .NET

Вече може да събудите другарчето до вас