Iндивiдуальнi завдання до захисту роботи.
- Написати паралельну програму для транспонування матрицi розмiром 32n x 32n елементiв n потоками. Для збору даних вiд робочих потокiв та виводу кiнцевого результату використати метод бар'єрної синхронiзацiї. Розмiрнiсть матрицi задати як параметр у командному рядку пiд час запуску програми.
- Ввести загальну змiнну з початковим значенням 0. Зробити так, щоб кожен процес пiсля свого старту збiльшував її на 1. Пiсля зупинки усiх процесiв у бар'єра, вiн повинен вивести її значення на екран. Перед закiнченням роботи кожен процес повинен зменшити її значення на 1 i вивести результат на екран. Кiлькiсть процесiв задати як параметр у командному рядку пiд час запуску програми.
- Створити загальний масив розмiрностi N. Зробити так, щоб кожен процес пiсля свого старту збiльшував вiдповiдний елемент цього масиву на одиницю. Пiсля зупинки усiх процесiв у бар'єра вiн повинен вивести у консоль усi елементи цього масиву. Перед закiнченням роботи кожен процес повинен зменшити на одиницю значення вiдповiдної комiрки масиву та вивести результат у консоль. Розмiрнiсть масиву задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує матрицю A та iнiцiалiзує її одиницями. Процес B генерує матрицю B та iнiцiалiзує її двiйками. Пiсля чого обидва процеси зупиняються у першого бар'єра. Перший бар'єр виводить значення обох матриць у консоль. Пiсля закiнчення виводу процеси A i B обраховують матрицю C, яка є поелементною сумою матриць A i B (тобто C = A + B). Причому процес A обраховує першу половину матрицi C, а процес B - другу. Пiсля закiнчення обрахунку обидва процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення матрицi C у консоль. Пiсля цього процеси припиняють роботу. Розмiрнiсть матриць задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два дочiрнiх робочих процеси A i B. Перший процес генерує матрицю вiдношення R1: x >= y (бiльше чи дорiвнює). Другий процес генерує матрицю вiдношення R2: x <= y (менше чи дорiвнює). Пiсля чого обидва процеси зупиняються у першого бар'єра. Перший бар'єр виводить значення обох матриць у консоль. Пiсля закiнчення виводу процеси A i B обраховують композицiю цих вiдношень. Причому перший процес обраховує першу половину матрицi вiдношення, а другий процес - другу. Пiсля закiнчення обрахунку обидва процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення отриманої матрицi у консоль. Пiсля цього процеси припиняють роботу. Розмiрнiсть матриць задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує множину A. Процес B генерує множину B. Пiсля чого обидва процеси зупиняються у першого бар'єра. Перший бар'єр виводить значення обох матриць у консоль. Пiсля закiнчення виводу процеси A i B обраховують декартовий добуток цих множин. Причому процес A обраховує першу половину матрицi декартового добутку, а процес B - другу. Пiсля закiнчення обрахунку обидва процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення матрицi декартового добутку у консоль. Пiсля цього процеси припиняють роботу. Потужнiсть множин задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує множину A. Процес B генерує множину B. Пiсля чого обидва процеси зупиняються у першого бар'єра. Перший бар'єр виводить значення обох матриць у консоль. Пiсля закiнчення виводу процеси A i B обраховують перерiз цих множин. Причому процес A обраховує першу половину перерiзу, а процес B - другу. Пiсля закiнчення обрахунку обидва процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення множини перерiзу у консоль. Пiсля цього процеси припиняють роботу. Потужнiсть множин задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з двома робочими процесами та бар'єром. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує множину A. Процес B генерує множину B. Пiсля чого обидва процеси зупиняються у бар'єра. Бар'єр виконує об'єднання цих множин. Пiсля цього процес A виводить у консоль першу половину об'єднаної множини, а процес B - другу. Потужнiсть множин задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з трьома робочими процесами та двома бар'єрами. Головний процес створює три дочiрнiх робочих процеси A, B i C. Процес A генерує матрицю MA та iнiцiалiзує її одиницями. Процес B генерує матрицю MB та iнiцiалiзує її двiйками. Процес C генерує матрицю MC та iнiцiалiзує її трiйками. Пiсля чого усi процеси зупиняються у першого бар'єра. Перший бар'єр виводить значення усiх матриць у консоль. Пiсля закiнчення виводу процеси A B i C обраховують матрицю MD, яка є результатом такого виразу: MD = MA + MB * MC. Матриця MC - загальний ресурс, а матрицi MA i MB розбиваються на три частини та розподiляються мiж робочими процесами. Пiсля закiнчення обрахунку усi робочi процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення матрицi MD у консоль. Пiсля цього процеси припиняють роботу. Розмiрнiсть матриць задати як параметр у командному рядку пiд час запуску програми.
- Розробити паралельну програму з трьома робочими процесами та бар'єром. Головний процес створює три дочiрнiх робочих процеси A, B i C. Процес A генерує матрицю MA та iнiцiалiзує її одиницями. Процес B генерує матрицю MB та iнiцiалiзує її двiйками. Процес C генерує матрицю MC та iнiцiалiзує її трiйками. Пiсля чого усi процеси зупиняються у першого бар'єра. Перший бар'єр збiльшує кожен елемент матриць MA, MB, та MC на одиницю. Пiсля закiнчення роботи першого бар'єра процеси A B i C здiйснюють вивiд матриць у вiдповiднi дисковi файли у форматi CSV програми Microsoft Excel. Тобто:
- процес A здiйснює вивiд матрицi MA у файл MA.CSV;
- процес B здiйснює вивiд матрицi MB у файл MB.CSV;
- процес C здiйснює вивiд матрицi MC у файл MC.CSV.
Пiсля цього процеси припиняють роботу. Розмiрнiсть матриць задати як параметр у командному рядку пiд час запуску програми. Файли результату, якi були утворенi пiд час роботи програми (тобто MA.CSV, MB.CSV, MC.CSV) переглянути у програмi Microsoft Excel
- Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує матрицю MA та iнiцiалiзує її одиницями. Процес B генерує матрицю MB та iнiцiалiзує її двiйками. Пiсля чого обидва процеси зупиняються у першого бар'єра. Перший бар'єр виконує введення значень матрицi MC з дискового файлу (можна використати файл у форматi CSV). Пiсля закiнчення вводу процеси A B i C обраховують матрицю MD, яка є результатом такого виразу MD = MA + MB * MC. Матриця MC - загальний ресурс, а матрицi MA i MB розбиваються на двi частини та розподiляються мiж робочими процесами. Пiсля закiнчення обрахунку усi робочi процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення матрицi MD у консоль. Пiсля цього процеси припиняють роботу. Розмiрнiсть матриць та назву файлу даних з матрицею MC задати як параметр у командному рядку пiд час запуску програми.
Лабораторна робота №15.
Тема: Блокуючи черги.
Мета:
- Опанувати методику синхронiзацiї паральних процесiв з використанням блокуючої черги.
Теоретичнi вiдомостi.
Блокуюча черга - механiзм гарантованого обмiну даними мiж процесами шляхом їх блокування при повному її заповненнi, або спорожненнi. Блокуюча черга є одним з дiєвих механiзмiв синхронiзацiї процесiв.
Процес, який намагається отримати данi з порожньої черги буде заблакований доти, доки деякий iнший процес не покладе данi у цю чергу. Процес, який намагається покласти данi у вже заповнену чергу блокується доти, доки деякий iнший процес не звiльнить у неї мiсце шляхом виборки з неї даних. Крiм виборки, мiсце може бути звiльнене також знищенням частини, або, навiдь усiх даних, що зберiгаються у блокуючої черзi.
Взаємодiя двох процесiв за допомогою блокуючої черги може бути проiлюстрована таким чином:
Починаючи з п'ятої версiї реалiзацiя блокуючої черги включена до пакету java.util.concurrent.
Але для бiльш єфективного використання цього механiзму може бути корисно знати деталi його реалiзацiї.