Iндивiдуальнi завдання до захисту роботи.

  1. Написати паралельну програму для транспонування матрицi розмiром 32n x 32n елементiв n потоками. Для збору даних вiд робочих потокiв та виводу кiнцевого результату використати метод бар'єрної синхронiзацiї. Розмiрнiсть матрицi задати як параметр у командному рядку пiд час запуску програми.
  2. Ввести загальну змiнну з початковим значенням 0. Зробити так, щоб кожен процес пiсля свого старту збiльшував її на 1. Пiсля зупинки усiх процесiв у бар'єра, вiн повинен вивести її значення на екран. Перед закiнченням роботи кожен процес повинен зменшити її значення на 1 i вивести результат на екран. Кiлькiсть процесiв задати як параметр у командному рядку пiд час запуску програми.
  3. Створити загальний масив розмiрностi N. Зробити так, щоб кожен процес пiсля свого старту збiльшував вiдповiдний елемент цього масиву на одиницю. Пiсля зупинки усiх процесiв у бар'єра вiн повинен вивести у консоль усi елементи цього масиву. Перед закiнченням роботи кожен процес повинен зменшити на одиницю значення вiдповiдної комiрки масиву та вивести результат у консоль. Розмiрнiсть масиву задати як параметр у командному рядку пiд час запуску програми.
  4. Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два доч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д час запуску програми.
  5. Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два доч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д час запуску програми.
  6. Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує множину A. Процес B генерує множину B. Пiсля чого обидва процеси зупиняються у першого бар'єра. Перший бар'єр виводить значення обох матриць у консоль. Пiсля закiнчення виводу процеси A i B обраховують декартовий добуток цих множин. Причому процес A обраховує першу половину матрицi декартового добутку, а процес B - другу. Пiсля закiнчення обрахунку обидва процеси зупиняються у другого бар'єра. Другий бар'єр виводить значення матрицi декартового добутку у консоль. Пiсля цього процеси припиняють роботу. Потужнiсть множин задати як параметр у командному рядку пiд час запуску програми.
  7. Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два доч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д час запуску програми.
  8. Розробити паралельну програму з двома робочими процесами та бар'єром. Головний процес створює два дочiрнiх робочих процеси A i B. Процес A генерує множину A. Процес B генерує множину B. Пiсля чого обидва процеси зупиняються у бар'єра. Бар'єр виконує об'єднання цих множин. Пiсля цього процес A виводить у консоль першу половину об'єднаної множини, а процес B - другу. Потужнiсть множин задати як параметр у командному рядку пiд час запуску програми.
  9. Розробити паралельну програму з трьома робочими процесами та двома бар'єрами. Головний процес створює три доч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д час запуску програми.
  10. Розробити паралельну програму з трьома робочими процесами та бар'єром. Головний процес створює три доч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

  1. Розробити паралельну програму з двома робочими процесами та двома бар'єрами. Головний процес створює два доч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.

Тема: Блокуючи черги.

Мета:

  1. Опанувати методику синхрон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ї.