- •Тема 1. Вступ Лекція 1. Характеристика і зміст дисципліни
- •Тема 2. Паралелізм обчислень. Архітектури паралельних ос Лекція 2. Види і засоби обчислень
- •Лекція 3. Поняття і види паралелізму обчислень
- •Лекція 4. Традиційна класифікація паралельних ос
- •4.1. Послідовні і паралельні архітектури
- •4.2. Основні типи паралельних архітектур
- •Лекція 5. Сучасні паралельні ос і суперкомп'ютери
- •5.1. Класифікації сучасних паралельних ос
- •5.1.1. Зв'язок "пам'ять-процесори"
- •5.1.2. Топологія зв'язків між процесорами
- •5.2. Суперкомп'ютери
- •6.3. Архітектура кластерів
- •Тема 3. Загальна характеристика рс Лекція 6. Розподілені системи: особливості, характеристики
- •1. Мережа газопроводів
- •2. Електромережі
- •3. Мережі зв'язку
- •4. Логістичні системи
- •5. Банківська система
- •6. Корпорації
- •7. Державне та муніципальне управління
- •Лекція 7. Надійність і безпека розподілених систем
- •Тема 4. Розподілена обробка інформації Лекція 8. Розподілені задачі і алгоритми
- •Лекція 9. Мова Triad моделювання розподілених систем
- •Лекція 10. Хвильові алгоритми розповсюдження інформації
- •Лекція 11. Хвильові алгоритми обходу сайтів
- •Лекція 12. Хвильові алгоритми вибору сайтів
- •13.1. Загальні поняття
- •9.2. Мультиагентні системи
- •9.3. Технологія організації мультиагентних систем
- •13.4. Технологія програмної реалізації інтелектуальних мас
- •Лекція 14. Розподілені бази даних
- •Тема 5. Заключення Лекція 15. Огляд матеріалу по курсу
- •Література
Тема 4. Розподілена обробка інформації Лекція 8. Розподілені задачі і алгоритми
Мета, задачи і алгоритми РС. Розподілена задача. Протокол як розподілений алгоритм. Найпростіший криптографічний протокол. Розподілений алгоритм, який вирішує зосереджені задачі.
Із системою S пов'язана мета G, заради якої система функціонує. Ця мета ставиться самою системою (якщо система – активна), або поставлена ззовні. Для досягнення мети в системі повинна вирішуватися задача – деяка математична формалізація мети з чітко визначеним набором початкових даних і необхідних результатів.
Рішення задачі передбачається отримати за допомогою алгоритму, тобто припису із зазначенням виконавця (виконавців) і послідовності елементарних кроків, які повинні бути зроблені виконавцями.
Розподілена система породжує розподілену задачу, оскільки початкові дані для задачі виникають в різних точках простору. Також в різних точках потрібні ті чи інші результати рішення задачі. Найчастіше задачу можна розбити на сукупність підзадач, деякі з них можуть бути зосередженими: всі початкові дані виникають в одній точці простору, і там же потрібні результати вирішення підзадачі.
Розподілена задача вирішується розподіленим алгоритмом, що збирає початкові дані з різних точок і посилає результати розрахунків в різні точки. Додатковим фактором розподілення алгоритму може бути наявність декількох виконавців, що знаходяться в різних точках простору (розподілений виконавець).
Відомо, що алгоритм оперує крім початкових даних, ще й проміжними даними, а у великих системах працює з базами даних. Для розподіленого алгоритму закономірно постає питання: як будуть організовані ці дані – у вигляді зосередженної або розподіленої бази даних?
Один з видів розподілених алгоритмів – протоколи. Протокол характеризується тим, що є як мінімум дві сторони, розділені каналом зв'язку. На кожній із сторін виконується локальний (зосереджений) алгоритм Ak. Локальний алгоритм A1 виконується до деякого моменту часу, коли для продовження роботи потрібні дані від іншого локального алгоритму A2 . Він посилає через лінію зв'язку запит на дані локального алгоритму A2. Алгоритм A2 відповідає, надсилаючи повідомлення по лінії зв'язку. Після цього локальний алгоритм A1 продовжує свою роботу.
Протоколи, зазвичай, грають технічну роль і служать для встановлення режимів прийому/передачі даних між віддаленими об'єктами. В обчислювальному відношенні локальні алгоритми – частини протоколу – не є складними.
Особливий вид розподілених алгоритмів – криптографічні протоколи. Вони призначені для доказу однією або обома сторонами, що вони саме ті, за кого себе видають, для обміну конфіденційною інформацією та інших подібних цілей.
Розглянемо один з найпростіших криптографічних протоколів – розподілених алгоритмів.
У різних точках простору знаходяться два об'єкти, O1 і O2, кожен з яких вирішує свою частину (P1 або P2) загальної задачі P. Разом з тим, крім прагнення вирішити спільне завдання, об'єкти мають і свої приватні задачі, Q1 і Q2. Таким чином, об'єкт O1 одночасно вирішує задачи P1 і Q1, а об'єкт O2 – задачи P2 і Q2. І, якщо завдання P1 і P2 сумісні і взаємно доповнюють один одного, то завдання Q1 і Q2 – суперечать один одному.
Отже, об'єкти O1 і O2 співпрацюють, але, одночасно, і конкурують. А можна сказати й так, що об'єкти конкурують, але змушені співпрацювати. Дивлячись як розставити акценти, яка з задач, Pi або Qi , важливіша для об'єкта Oi.
Описана ситуація зустрічається дуже часто. Університети зацікавлені в рішенні задачі вдосконалення підготовки фахівців і в цій задачі вони співпрацюють. У той же час щорічно вузи конкурують з-за здібних абітурієнтів. Наукові організації часто проводять спільні дослідження на стику їх інтересів (на стику наук). Але вони ж конкурують при розподілі фінансів. Два різних підрозділів фірми працюють для досягнення загальних цілей фірми, але кожна з них хоче отримати в рамках фірми більший розвиток, ніж інший підрозділ. Загалом, друзі-суперники. Часткова конкуренція.
У нашій задачі об'єкти O1 і O2 повинні прийти до спільного компромісного рішення в інтересах вирішення задачі P. Припустимо, що є два рівноцінних (з точки зору задачі P) рішення. Одне з них також влаштовує об'єкт O1, а інше – влаштовує об'єкт O2. Тоді об'єкти O1 і O2 вирішують кинути жереб. Це можна зробити так: написати кожне рішення на свій папірець, скрутити папірці в трубочку, прокрутити в лототроні і один з папірців витягнути. Це і буде компромісне рішення.
Складність полягає в тому, що об'єкти O1 і O2 знаходяться на великій відстані один від одного, і не можуть провести процедуру з лототроном. Процедура з лототроном виконується в одному місці, вона можлива для зосередженої системи. Наша система – розподілена.
Процедуру з лототроном міг би виконати об'єкт O1 і повідомити результат об'єкту O2. Однак об'єкт O2 не цілком довіряє об'єкту O1. Навіть телевізійна трансляція виконання процедури не є переконливим доказом – це може бути майстерно змонтована запис.
Вихід полягає в наступному. Позначимо одне з рішень числом 0, інше – числом 1. Кожен з об'єктів незалежно від іншого повинен назвати яке-небудь ціле число ni в межах, наприклад, від 0 до 99. Потім об'єкти обмінюються числами ni і обчислюють результат (n1 + n2)mod 2. Це і буде рішення, тобто число 0 або 1.
Абсолютно одночасно переслати один одному числа ni об'єкти не можуть. Хтось надішле своє число першим і виявиться в невиграшному становищі. Наприклад, O1 переслав своє число n1 об'єкту O2, зацікавленому в тому, щоб виграло рішення «1». Тоді O2, знаючи n1, вирішує рівняння (n1 + n2)mod 2 = 1 відносно змінної n2, і посилає O1 знайдене значення n2. Рішення рівняння практично не потребує часу: отримавши від O1 парне число, O2 повинен відповісти непарним, і навпаки.
Ця несправедливість має бути усунена. При цьому ясно, що все одно якась зі сторін обміну повідомленнями першою надішле своє число. Необхідно зробити так, щоб у другої сторони не вистачило часу на підбір відповіді.
Об'єкти O1 і O2 можуть домовитися, що вся процедура «кидання жереба» на відстані повинна завершитися за кілька хвилин. Якщо при цьому обидва об'єкта знають, що підбір відповіді вимагає декількох годин роботи суперЕОМ, то вони можуть бути спокійні за те, що рішення не «підлаштовано» іншою стороною.
Для забезпечення таких часових параметрів в обчисленнях повинна використовуватися функція f(x), значення якої y = f(x) при відомому аргументі x обчислити можна відносно швидко. Але от вирішити зворотне рівняння (y) = x, тобто відшукати невідомоме x при відомому значенні y, швидко не можна. Більше того, бажано, щоб не було відомо ніяких математичних методів для рішення цього рівняння, крім повного перебору або подібного йому по складності.
Звичайно, область визначення функції f(x) повинна бути при цьому дуже великою, щоб зробити практично неможливим повний перебір. Область з двох елементів, 0 і 1, мала, область від 0 до 99 теж недостатня. Цілі числа, з якими доводиться оперувати, повинні мати у десятковому запису не менше 150-200 цифр або не менше 512 біт в двійковій запису. Такі числа називають «довгими».
Нехай f(x) і h(z, v, w) – дві таких важко обертаючих функції. У функції h(z, v, w) перші два аргументи – довгі числа, а третій – бітовий. Функції f і h відомі об'єктам O1 і O2, і вони володіють алгоритмами швидкого обчислення значень цих функцій при заданих значеннях аргументів, але не вміють швидко обертати ці функції, тобто рішати рівняння.
Розподілений алгоритм кидання жереба складається з наступних кроків.
1. Об'єкт O2 вибирає випадковим чином число x з великого інтервалу [0, q – 1]. Обчислює y = f(x) і пересилає число y об'єкту O1. Об'єкт O1 не зможе швидко відновити число x.
2. Об'єкт O1 вибирає випадковим чином число z із великого інтервалу [0, q – 1] і біт w. Ці дії можуть виконуватися одночасно з п. 1.
3. Об'єкт O1 обчислює s = h(z, y, w). Число z тут необхідно для «маскування» біта w, а число y – для «перевірки» об'єктом O2 правильності дій об'єкта O1.
4. Об'єкт O1 пересилає число s об'єкту O2. Біт w відправляється об'єкту O2, але він «захований» в числі s. Об'єкт O2 не зможе відновити цей біт. Об'єкт O2 не зможе відновити і число z.
5. Об'єкт O2 вибирає випадковий біт c і відправляє його об'єкту O1. Відкрите пересилання.
6. Об'єкт O1 пересилає число z і біт w об'єкту O2. Відкрите пересилання. Об'єкт O1 вже може визначити результат кидання жереба: (c + w)mod 2.
7. Об'єкт O2 обчислює t = h(z, y, w). Тут z і w тільки що отримані від O1, а y було обчислено в п. 1.
8. Об'єкт O2 порівнює t і s, раніше отримане від об'єкта O1.
9. Якщо t = s, то об'єкт O2 обчислює результат кидання жереба: (c + w)mod 2; інакше – повторення процедури.
Функції f і h можуть бути різними. Зокрема, використовуються функції:
f(x) = (gx)modp і h(z, v, w) = (vwgz)modp.
Тут «секретні» значення x, w, z знаходяться в показниках ступенів, і для того, щоб їх знайти, потрібно вирішити задачу дискретного логарифмування, для якої ефективний алгоритм, істотно кращий повного перебору, невідомий.
Константи p, q, g повинні бути відомі обом об'єктам. Число p – довге просте число. Число q – також довге просте число, воно є дільником числа p – 1. Число g < p, не дорівнює 1, задовольняє умові (gq)modp = 1.
Розподілені алгоритми, які вирішують зосереджені задачи
Один з напрямків в розробці розподілених алгоритмів – високопродуктивні обчислення. Розподілена комп'ютерна система в цьому випадку використовується як один потужний обчислювач, що вирішує одну задачу. Відомим прикладом є завдання «злому» шифру, створеного алгоритмом шифрування DES. Дешифрування тексту не представляє труднощів, якщо відомий ключ шифрування. Якщо ключ не відомий, то дешифрування можна спробувати виконати шляхом повного перебору. Але метод повного перебору вимагає дуже великого часу навіть для самих швидких однопроцесорних ЕОМ.
Рішення задачі можна прискорити, використовуючи багатопроцесорну ЕОМ. У цьому випадку обчислення розпаралелюються, тобто всі процесори, виконуючи однакові або різні команди, одночасно беруть участь у вирішенні задачі. Як саме відбувається розпаралелювання – залежить від архітектури багатопроцесорної ЕОМ. При наявності в її складі n процесорів в ідеальній ситуації прискорення обчислень може досягати величини, близької до n разів. Реально, алгоритми не повністю розпаралелюється, частина процесорів може простоювати в окремі періоди часу, і продуктивність збільшується менше ніж в n разів.
Сучасні багатопроцесорні машини мають десятки і сотні процесорів, окремі – тисячі процесорів. Але такі унікальні машини дуже дорогі, встановлені в спеціальних суперкомп'ютерних центрах або у військових організаціях і не завжди доступні рядовим користувачам.
Альтернативою є використання окремих комп'ютерів, з'єднаних глобальними мережами зв'язку і належать приватним особам і різним організаціям. Комп'ютери можуть мати відносно невисоку продуктивність, але використання в мережі відразу декількох десятків або сотень тисяч комп'ютерів для вирішення однієї задачі створює ефект того ж суперкомп'ютера, але, може бути, ще більш потужного.
Саме така розподілена комп'ютерна система використовувалася для згаданої задачі дешифрування. Це не була «жорстка» система – комп'ютери використовувалися на добровільній основі, в будь-який момент часу будь-який комп'ютер міг вийти з системи. Але точно також і нові комп'ютери могли приєднуватися до вже працюючих.
Ідея і відповідна технологія використання глобальної мережі комп'ютерів для вирішення складної задачі отримала назву Grid. Якщо Web забезпечує доступ до глобальних інформаційних ресурсів, то Grid повинен забезпечити доступ до глобальних обчислювальних (оброблювальних) ресурсів. Основні проекти використання Grid в даний час пов'язані з обробкою великої кількості (терабайти, пентабайты) експериментальних даних у фізиці елементарних частинок, спостереження в астрономії, розшифровкою геному людини в біології.
