Конкурентни софтуерни архитектури
TRANSCRIPT
Конкурентни архитектури и защо би трябвало да ни интересуват
Архитектурни стилове за конкурентни системи
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
Може да добавяме нови 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