УДК 004.051
Є.В. Крилов, В.К. Анікін,
С.В. Котирло
МОДЕль ПАРАЛЕЛЬНОГО ПРОГРАМУВАННЯ
НА PHP
Існують
наступні програмні моделі роботи в обчислювальних системах: модель розділеної
пам’яті, послідовна модель, модель розділених даних, модель передачі
повідомлень. Для роботи з PHP можливо використовувати лише модель передачі повідомлень. Програми моделі обміну повідомленнями утворюють велике число процесів.
Локальні дані асоційовані з кожним процесом, кожен з яких має унікальне ім'я.
Взаємодія процесів відбувається за рахунок відправки і отримання повідомлень.
На практиці склалося так, що більшість систем обміну
повідомленнями при запуску паралельної програми створює фіксоване число ідентичних
процесів і не дозволяє створювати і руйнувати процеси протягом роботи програми.
В даних системах кожен з процесів виконує одну і ту ж програму, але працює з різними даними. Вони реалізують SPMD модель програмування, що означає одна програма та багато даних.
Розподілимо навантаження по процесам, скориставшись
схемою обчислення кількості під задач для блочного розподілу. Нехай, є цикл в
приблизно однакових за тривалістю ітерацій і потрібно розподілити його між N
процесами, причому n не кратне N. На основі розподілу із залишком кількість
ітерацій може бути представлено через цілі числа a, b в такій формі:
(1)
Ширина інтервалу ітерацій для кожного процесу
може бути обчислена:
(2)
Ліва межа кожного інтервалу
може бути обчислена на основі тих
же співвідношень:
(3)
При цьому на кожен процес
розподіляється інтервал ітерацій [3]
(4)
Щоб
реалізувати скрипт диригент можна використовувати стандартну функцію PHP –
fsockopen(), яка ініціює поточное з'єднання, використовуючи TCP або UDP. Для
домену Internet - відкриває сокет з'єднання TCP з hostname через порт port.
hostname може бути в цьому випадку
або повним кваліфікованим ім'ям домену, або IP-адресою. Для UDP необхідно явно
специфікувати протокол шляхом додавання до hostname префікса 'udp: //'.
fsockopen() повертає покажчик файлу, який може використовуватися іншими
функціями (такими як fgets (), fgetss (), fputs (), fclose () і feof ()) [5].
Стандартно з’єднання відкривається з блокування, отже
неможливо відкрити нове з’єднання без завершення попереднього. Програма
виконується послідовно. Функція stream_set_blocking() дозволяє відкрити
декілька з’єднань у паралельному режимі. Виконавцями можуть бути окремі скрипти
або скрипт запущений декілька разів з різними вхідними параметрами.
Завдяки функції fsockopen скрипт диригент викликає
виконавців, передає вхідні параметри та отримує результат виконання.
Кожен виконавець
і диригент працюватимуть у різних потоках і ОС, за наявності ресурсів,
зможе забезпечити їх паралельне виконання [4].
Для моделювання розрахунків можна обрати алгоритм
розрахунку числа Пі, шляхом чисельного інтегрування. Скористаємося методом
прямокутників.
Оголосимо деяку кількість n прямокутників на які ми
розіб’ємо нашу площу під інтегралом, порахуємо основу, а також всю площу,
порахувавши значення функції в кожному прямокутнику і помножимо на основу.
В результаті отримали 10.894656719318с.
Виконаємо декомпозицію алгоритму, використовуючи метод
програмної конвеєризації циклів. Це забезпечить об’єднання ітерації при
виконанні з невеликим зрушенням по відношенню один до одного.
З метою збільшення точності вимірів для кожної кількості
виконавців виконаємо по 10 ітерацій і зафіксовано мінімальний час обрахунку.
Мінімальний час використовується через те, що саме у поточний момент процесор
був завантажений найменше сторонніми процесами.
Проведемо експериментальні виміри для обчислень з
використанням від 1 до 15 виконавців, з проходом у 40,000,000 інтервалів[5].
Висновки: Зростання кількості виконавців зменшує час виконання обчислень. Обчислення в 1 потік використовує одне ядро процесора і розрахунок триває 11.3 с. Збільшення потоків зменшує час обрахунку (на 8 потоках швидкодія зростає на 72%).
ПЕРЕЛІК ВИКОРАСТАНИХ ДЖЕРЕЛ
1. Карпов В.
Е. Введение в распараллеливание
алгоритмов и программ / В. Е. Карпов // Компьютерные исследования и моделирование
– 2010 - Т. 2 №3 С. 231–272.
2. Антонов
А.С. Введение в паралельные вычисления / А. С. Антонов // Московский
государственный университет им. Ломоносова–2002-70 с.
3. Крилов Є.В.
Оптимізація роботи веб-сервера для взаємопов’язаних процесів / Є.В. Крилов,
В.К. Анікін, А.О. Шумада // Міжвідомчий науково-технічний збірник «Адаптивні
системи автоматичного управління». – 2014. -
№1(24). – С.46-52.
4. Федотов
И. Е. Некоторые приемы параллельного программирования / И. Е. Федотов //
Московский государственный институт радиотехники –2008–188с.
5. Крилов Є.В.,
Анікін В.К., Стельмах В.І., Розробка
моделі паралельного програмування на PHP //
Адаптивнi системи автоматичного управлiння // Мiжвiдомчий науково-технiчний
збiрник.— Київ: Нацiональний технiчний унiверситет України «Київський
полiтехнiчний інститут» , – 2014. – Вип. 00. – C.