РГЗ пар программирование вар 25

Розрахунок початкових умов згідно із індивідуальним завданням. Побудова графа інформаційної залежності і лексикографічне впорядкування вершин за ярусами. Розрахунок допустимих меж переміщень процесів. Побудова графіків щільності навантаження процесорів.

Рубрика Программирование, компьютеры и кибернетика
Вид практическая работа
Язык украинский
Дата добавления 06.01.2009
Размер файла 180,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

23

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

«ХАРКІВСЬКИЙ ПОЛІТЕХНІЧНИЙ ІНСТИТУТ»

Кафедра «ОБЧИСЛЮВАЛЬНА ТЕХНІКА І ПРОГРАМУВАННЯ»

Звіт

з розрахунково-графічного завдання

з курсу “Паралельне програмування”

Виконав:

Студент групи XXX-XXa

XXX

Викладач:

XXX В.І.

Прийнято: __________________

«___» ________________ 2007 р.

Харків 2007

Зміст

Аналітична підготовка 3

1.1. Розрахунок початкових умов згідно із індивідуальним завданням 3

1.2. Побудова графа інформаційної залежності і лексикографічне впорядкування вершин за ярусами 3

1.3. Розрахунок допустимих меж переміщень процесів 6

1.4. Побудова графіків щільності навантаження процесорів 6

1.5. Організація оптимального взаємного обміну даними між процесорами 8

1.6. Обчислення степіню паралелізму, прискорення процесу, завантаження обладнання 8

1.7. Розробка схеми алгоритму 5

Розробка опису і тексту програми 9

Висновки

1. Аналітична підготовка

1.1. Розрахунок початкових умов згідно із індивідуальним завданням

Згідно із індивідуальним завданням перетворили за формулами матрицю інциденцій і таблицю ваг вершин для варіанта 25 (N=25):

Перетворена базова матриця інциденцій згідно із варіантом 25:

4

5

4

4

5

1

7

7

2

3

8

- вершина початку ребра

8

8

1

7

3

6

2

3

6

6

6

- вершина кінця ребра

Перетворена таблиця ваг вершин згідно із варіантом 25:

4

5

1

7

8

2

3

6

- номер вершини

4

5

2

4

1

5

4

3

- вага вершини

1.2. Побудова графа інформаційної залежності і лексикографічне впорядкування вершин за ярусами

За матрицею інциденцій побудували невпорядкований граф інформаційної залежності (рис.1):

Рисунок 1 - Невпорядкований граф інформаційної залежності

За даним графом складемо матрицю сумісностей, що описує зв'язки між окремими вершинами графа:

1

2

3

4

5

6

7

8

1

1

2

1

3

1

S=

4

1

1

1

5

1

1

6

7

1

1

8

1

За отриманою матрицею сумісностей видно, що номера вершин, стовбці яких пусті є вихідними (3,4), а кінцевою є вершина, рядок якої пустий (5). Користуючись матрицею сумісностей упорядкуємо граф лексикографічно. Головною метою упорядкування є спрямування ребер графу зверху до низу. Вибравши початкові вихідні вершини викреслюються всі дуги, що виходять із них, після цього вибирають наступні вершини, в які не входять вхідні дуги. Процес продовжується доти, поки не буде досягнуто кінцеву вершину. Вибрані вершини на кожному етапі відповідають відповідному ярусу графа.

В результаті упорядкування отримали новий упорядкований граф. Провели лексичне упорядкування графа пронумерувавши послідовно вершини упорядкованого графа зверху у низ в порядку зростання (рис. 2).

Рисунок 2 - Лексикографічно впорядкований граф

Відповідно нова матриця сумісності прийняла новий вигляд трикутної матриці, в якій одиниці знаходяться в лівій частині матриці:

1

2

3

4

5

6

7

8

1

1

1

1

2

1

1

3

1

S'=

4

1

1

5

1

6

1

7

1

8

Початкові і нові номера вершин, ваги вершин і низхідні та східні зв'язки між вершинами а також нумерацію ярусів зведено у таблицю:

Таблиця 1 - Таблиця низхідних та східних зв'язки між вершинами графа

Індекс вершини

д+(і)

д-(і)

Ярус j

Новий індекс вершини

Вага tk

1

{6}

{4}

2

3

2

2

{6}

{7}

3

6

5

3

{6}

{5, 7}

3

7

4

4

{1, 7, 8}

{}

1

1

4

5

{8, 3}

{}

1

2

5

6

{}

{1, 2, 3, 8}

4

8

3

7

{2, 3}

{4}

2

4

4

8

{6}

{4, 5}

2

6

1

1.3. Розрахунок допустимих меж переміщень процесів

Ранні та пізні терміни закінчення виконання операторів знаходяться за наступними формулами:

1k = max [1м]+tj, м;

T2k = min [T2м-tм], м.

Наприклад, для вершин 1 і 2 (за новою нумерацією) ранні строки закінчення будуть відповідати їх вагам (відповідно 4 і 5), а для вершини 7 ранній строк знаходиться так:

ф1(7) = max[ф1(2), ф1(4)] + t5 = max[8, 5] + 4 = 8 + 4 = 12;

Аналогічним чином проводиться розрахунок ранніх і пізніх термінів виконання для інших операторів, але розрахунок пізніх строків починається із останньої вершини (8), для якої пізній строк закінчення приймається рівним ранньому (ф1(8) = ф2T(8) = 16), що в свою чергу є критичним часом виконання алгоритму, і представляє собою мінімальний час виконання всього алгоритму, оскільки складається із часів виконання вершинних процесів, що лежать на найдовшому шляху графа. Відповідно вершини, ранній і пізній терміни закінчення яких співпадають не можуть бути переміщені і лежать на критичному шляху проходження алгоритму (вершини 1, 4, 6, 8).

Результати розрахунків ранніх та пізніх строків виконання операторів занесли до сводної таблиці:

Таблиця 2 - Таблиця ранніх та пізніх строків виконання операторів

д+

д-

Ярус j

tk

Ранні строки

ф1(k)

Пізні строки

ф2T(k)

1

{3,4,5}

{}

1

4

4

4

2

{5, 7}

{}

1

5

5

9

3

{8}

{1}

2

2

6

13

4

{6, 7}

{1}

2

4

8

8

5

{8}

{1, 2}

2

1

6

13

6

{8}

{4}

3

5

13

13

7

{8}

{4, 2}

3

4

12

13

8

{}

{3, 5, 6, 7}

4

3

16

16

Перевіркою правильності розрахунку пізніх строків виконання операторів, є виконання умови ф1(k)ф2T(k), якщо дана умова не виконується то необхідно збільшити час виконання алгоритму з фкр до Т = фкр + Дф, де Дф = ф1(k) - ф2T(k).

1.4. Побудова графіків щільності навантаження процесорів

З урахуванням розрахованих ранніх та пізніх строків побудуємо графік, що показує ранні та пізні строки завершення процесів:

Рисунок 4 - Графік ранніх та пізніх строків завершення

Функція щільності завантаження паралельно працюючих процесорів в будь-який момент часу 0 ? t ? Tкр:

.

Згідно із графіком ранніх та пізніх строків завершення процесів побудуємо діаграми щільності навантаження процесорів для граничних випадків виконання процесів (I, II) і для ситуації використання двох процесорів (III, IV, V) (рис. 5)

Рисунок 5 - Графіки щільності навантаження процесорів для моменту

раннього і пізнього термінів та оптимального варіанту із використанням двох процесорів

1.5. Організація оптимального взаємного обміну даними між процесорами

Вибрали ситуацію (III), як найбільш оптимальну для виконання алгоритму на двох процесорах і розмістили процеси 2, 3, 5, 7, 8 на першому процесорі, а інші на другому (рис. 6).

Рисунок 6 - Оптимальна організація взаємного обміну даними

1.6. Обчислення степеню паралелізму, прискорення процесу, завантаження обладнання

Прискорення виконання алгоритму при виконанні на двох процесорах у порівнянні із виконанні послідовно на одному процесорі розраховується за наступною формулою:

,

де Т1, Т2 - час виконання алгоритму на одному і двох процесорах відповідно.

Час виконання алгоритму на одному процесорі представляє собою суму часів виконання всіх процесів і складає 28, а час виконання на двох процесорах в нашому випадку різний критичному часові виконання алгоритму і складає 16. Таким чином маємо:

Ефективність виконання алгоритму на двох процесорах розраховується як відношення прискорення виконання алгоритму, що розрахована в попередньому абзаці, на кількість процесорів, що в нашому випадку дорівнює двом. Тобто формула розрахунку ефективності (завантаження обладнання) має наступний вигляд:

де - прискорення виконання алгоритму;

- кількість процесорів.

Таким чином ефективність дорівнює:

Степінь паралелізму розраховують як відношення суми добутків кількості проміжків часу із однаковою кількість задіяних процесорів на кількість задіяних процесорів до часу виконання алгоритму (розраховуються за графіком щільності навантаження процесорів IV на рисунку 5) і чисельно дорівнює прискоренню виконання алгоритму:

1.7. Розробка схеми алгоритму

Перетворили схему оптимальної організації взаємного обміну даними на рисунку 6 щодо вимог інструментарію MPI, перенумерувавши процеси починаючи із нуля і у послідовності, в якій вони будуть виконуватись, поміняли місцями процеси 3 і 4 з метою покращення зручності сприйняття схеми і зменшення довжини з'єднувальних ліній, не змінюючи при цьому суті оптимального алгоритму. В результаті отримали оновлену схему оптимальної організації взаємного обміну даними на рисунку 7.

Рисунок 7 - Оновлена схема організації взаємного обміну даними

Згідно із розробленою схемою оптимальної організації взаємного обміну даними на рисунку 7 розробили схему алгоритму програми (КІТ13А.003025-01-91-01). Згідно із схемою алгоритму ми розмістили на другому процесорі процеси 1, 2 і 5; а на першому інші процеси 0, 3, 4, 6 і 7 а також блоки початку і початкової конфігурації системи та блок закінчення із блоком виводу на друк журналу, в який заносились події, що відбувались під час виконання алгоритму.

Для подальшої розробки тексту програми паралельного алгоритму, слід визначити типи і назви змінних за допомогою яких необхідно організувати обмін даними між процесорами. Будемо вважати, що дані для обміну мають тип float, тобто для передачі даних будуть використовуватись змінні розміром 2-4 байт. Виконання паралельного алгоритму реалізовано так, щоб максимально зменшити кількість обмінів даними між процесорами - до 4-х. Для передачі даних між процесорами необхідно організувати канал, що реалізується інтеркомунікатором: для передачі даних від процесів 1, 2, 5 на другому процесорі до процесів 3, 4, 6 і 7 на першому процесорі (канал 1), Взаємодія в групах процесів, топологічно розміщених на одному процесорі, реалізується за допомогою інтракомунікаторів.

Самі процеси представляють собою неділимі фрагменти алгоритму, що потребують на своє виконання визначені проміжки часу, додають в журнал подій записи про виконання певних дій, виконують корисну роботу, і обмінюються між собою результатами цієї роботи, що необхідні для початку розрахунків іншого наступного процесу.

2. Розробка опису і тексту програми

Згідно із сформульованою схемою алгоритму розробили текст програми, що запускає в необхідній послідовності процеси, об'єднує процеси у групи і формулює інтра- та інтеркомунікатори, виводить на екран повідомлення про початок і кінець роботи процеса, пересилку і отримання даних від інших процесів.

#include <windows.h>

#include <stdio.h>

#include "mpi.h"

//визначення констант

#define GROUPLEFTSIZE 5 //розмір групи інтракомунікатора на 1 процесорі

#define TAG1 1 //стандартний тег обміну даними між процесами

#define cbufsize 100 //розмір буферу

//визначення груп процесів

MPI_Group MPI_GROUP_WORLD; //загальна група процесів

MPI_Group groupl,groupr; //групи процесів на 1 і 2 процесорі

//визначення комунікаторів

MPI_Comm lcomm,rcomm; //інтракомунікатори для груп процесів на 1 і 2

//процесорах

MPI_Comm channel1; //інтеркомунікатори для обміну між процесами на //різних процесорах

//визначення структури для отримання інформації

//про статус виконання операцій пересилки/прийома даних

MPI_Status stat;

//визначення рангів

int rank;

//масив рангів процесів розміщених на 1 процесорі у глобальній групі процесів

int ranksl[]={0,3,4,6,7};

//масив затримок на виконання процесів

int delay[]={5,4,4,1,2,5,4,3};

//визначення допоміжних технічних даних

DWORD zpoint; //допоміжна змінна для визначення часу роботи процесу

//змінні дла передачі отримання пересиланих даних

float rdata,sdata=(float)3.14;

char buf[cbufsize]; //буфер для формування технічних повідолень

char tbuf[20]; //буфер для формування рядку часу

//функції, що реалізують виконання процесів 0-7

void proc0();

void proc1();

void proc2();

void proc3();

void proc4();

void proc5();

void proc6();

void proc7();

//допоміжні функції

char* d2t(DWORD); //функція перетворення часу

void log_start(); //функція виводу повідомлення про початок роботи процесу

void log_stop (); //функція виводу повідомлення про закінчення роботи процесу

void log_recv (float data, int rrank); //функція виводу повідомлення про

//пересилку даних

void log_send (float data, int rrank); //функція виводу повідомлення про

//отримання даних

/*ГОЛОВНА ФУНКЦІЯ*/

int main(int argc, char *argv[])

{ //ініціалізація MPI

MPI_Init(&argc,&argv);

//визначення рангу процесу у глобальній групі процесів

MPI_Comm_rank(MPI_COMM_WORLD,&rank);

//отримання ідентифікатора комунікатора глобальної групи процесів

MPI_Comm_group(MPI_COMM_WORLD,&MPI_GROUP_WORLD);

//створення груп інтракомунікаторів

//виділення у окремі групи процесів розміщених на різних процесорах

MPI_Group_incl(MPI_GROUP_WORLD,GROUPLEFTSIZE,ranksl,&groupl);

MPI_Group_excl(MPI_GROUP_WORLD,GROUPLEFTSIZE,ranksl,&groupr);

//створення інтракомунікаторів на основі виділених груп

MPI_Comm_create(MPI_COMM_WORLD,groupl,&lcomm);

MPI_Comm_create(MPI_COMM_WORLD,groupr,&rcomm);

//організація каналів взаємодії процесів розміщених на різних процесорах

//організація каналу-інтеркомунікатора для передачі даних

//від процесів 1, 2 до 0, 3, 4, 6, 7

MPI_Intercomm_create(lcomm,0,rcomm,0,TAG1,&channel1);

//визначення початкового часу

zpoint = GetTickCount();

//запуск процесів

switch(rank){

case 0: {proc0();break;}

case 1: {proc1();break;}

case 2: {proc2();break;}

case 3: {proc3();break;}

case 4: {proc4();break;}

case 5: {proc5();break;}

case 6: {proc6();break;}

case 7: {proc7();break;}

}

//вивільнення пам'яті виділеної під комунікатори і групи

MPI_Comm_free(&lcomm);

MPI_Comm_free(&rcomm);

MPI_Comm_free(&channel1);

MPI_Group_free(&groupl);

MPI_Group_free(&groupr);

MPI_Finalize(); //завершення роботи з MPI

return 0; //завершення програми

}

//функція перетворення часу у строковий формат

char* d2t(DWORD x)

{ int h,m,s;

DWORD y=x;

h=y/(1000*60*60); y=y%(1000*60*60); //визначення годин

m=y/(1000*60); y=y%(1000*60); //визначення хвилин

s=y/1000; //визначення секунд

//формування строкового представлення часу

sprintf_s((char*)&tbuf,20,"%#02d:%#02d:%#02d",h,m,s);

return tbuf; //повернення строкового представлення часу

}

void proc0()

{ log_start(); //початок роботи процесу 0

Sleep(1000*delay[0]); //виконання корисної роботи процесом тривалістю //delay[0]

//пересилка даних процесу із рангом 1 в межах інтракомунікатора lcomm

//і рангом 3 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,1,TAG1,lcomm);

log_send(sdata,2);

//пересилка даних процесу із рангом 3 в межах інтракомунікатора lcomm

//і рангом 6 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,3,TAG1,lcomm);

log_send(sdata,6);

//rdata=sdata;

log_stop(); //кінець роботи процесу 0

}

void proc1()

{ log_start(); //початок роботи процесу 1

Sleep(1000*delay[1]); //виконання корисної роботи процесом

//тривалістю delay[1]

//rdata=sdata;

//пересилка даних процесу із рангом 1 в межах інтракомунікатора rcomm

//і рангом 2 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,1,TAG1,rcomm);

log_send(sdata,2);

//пересилка даних процесу із рангом 2 в межах інтракомунікатора rcomm

//і рангом 5 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,2,TAG1,rcomm);

log_send(sdata,5);

//пересилка даних процесу із рангом 1 в межах інтeркомунікатора channel1

//і рангом 3 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,1,TAG1,channel1);

log_send(sdata,3);

//пересилка даних процесу із рангом 2 в межах інтeркомунікатора channel1

//і рангом 4 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,2,TAG1,channel1);

log_send(sdata,4);

log_stop(); //кінець роботи процесу 1

}

void proc2()

{ log_start(); //початок роботи процесу 2

//отримання даних від процесу із рангом 0 в межах інтракомунікатора

//rcomm і рангом 1 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,0,TAG1,lcomm,&stat);

log_recv(rdata,1);

Sleep(1000*delay[2]); //виконання корисної роботи процесом

//тривалістю delay[2]

//пересилка даних процесу із рангом 3 в межах інтeркомунікатора channel1

//і рангом 6 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,3,TAG1,channel1);

log_send(sdata,6);

//rdata=sdata;

log_stop(); //кінець роботи процесу 2

}

void proc3()

{ log_start(); //початок роботи процесу 3

//отримання даних від процесу із рангом 0 в межах інтeркомунікатора

//channel1 і рангом 1 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,0,TAG1,channel1,&stat);

log_recv(rdata,1);

//отримання даних від процесу із рангом 0 в межах інтракомунікатора

//lcomm і рангом 0 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,0,TAG1,rcomm,&stat);

log_recv(rdata,0);

Sleep(1000*delay[3]); //виконання корисної роботи процесом

//тривалістю delay[3]

//пересилка даних процесу із рангом 4 в межах інтракомунікатора lcomm

//і рангом 7 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,4,TAG1,rcomm);

log_send(sdata,7);

//rdata=sdata;

log_stop(); //кінець роботи процесу 3

}

void proc4()

{ log_start(); //початок роботи процесу 4

//отримання даних від процесу із рангом 0 в межах інтeркомунікатора

//channel1 і рангом 1 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,0,TAG1,channel1,&stat);

log_recv(rdata,1);

//пересилка даних процесу із рангом 4 в межах інтрaкомунікатора lcomm

//і рангом 7 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,4,TAG1,lcomm);

log_send(sdata,7);

log_stop(); //кінець роботи процесу 4

}

void proc5()

{ log_start(); //початок роботи процесу 5

//отримання даних від процесу із рангом 0 в межах інтрaкомунікатора

//rcomm і рангом 1 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,0,TAG1,rcomm,&stat);

log_recv(rdata,1);

Sleep(1000*delay[5]); //виконання корисної роботи процесом

//тривалістю delay[5]

//пересилка даних процесу із рангом 4 в межах інтeркомунікатора channel1

//і рангом 7 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,4,TAG1,channel1);

log_send(sdata,7);

//rdata=sdata;

log_stop(); //кінець роботи процесу 5

}

void proc6()

{ log_start(); //початок роботи процесу 6

//отримання даних від процесу із рангом 0 в межах інтрaкомунікатора

//lcomm і рангом 0 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,0,TAG1,lcomm,&stat);

log_recv(rdata,0);

//отримання даних від процесу із рангом 1 в межах інтeркомунікатора

//channel1 і рангом 2 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,1,TAG1,channel1,&stat);

log_recv(rdata,1);

Sleep(1000*delay[6]); //виконання корисної роботи процесом

//тривалістю delay[6]

//пересилка даних процесу із рангом 4 в межах інтрaкомунікатора lcomm

//і рангом 7 в межах глобального комунікатора

MPI_Send(&sdata,1,MPI_FLOAT,4,TAG1,lcomm);

log_send(sdata,7);

//rdata=sdata;

log_stop(); //кінець роботи процесу 6

}

void proc7()

{ log_start(); //початок роботи процесу 7

//отримання даних від процесу із рангом 1 в межах інтракомунікатора

//lcomm і рангом 3 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,2,TAG1,lcomm,&stat);

log_recv(rdata,3);

//отримання даних від процесу із рангом 2 в межах інтракомунікатора

//lcomm і рангом 4 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,2,TAG1,lcomm,&stat);

log_recv(rdata,4);

//отримання даних від процесу із рангом 3 в межах інтракомунікатора

//lcomm і рангом 6 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,3,TAG1,lcomm,&stat);

log_recv(rdata,6);

//отримання даних від процесу із рангом 2 в межах інтeркомунікатора

//channel1 і рангом 5 в межах глобального комунікатора

MPI_Recv(&rdata,1,MPI_FLOAT,2,TAG1,channel1,&stat);

log_recv(rdata,5);

Sleep(1000*delay[7]); //виконання корисної роботи процесом

//тривалістю delay[7]

log_stop(); //кінець роботи процесу 7

}

//Функція, що формує повідомлення про початок роботи процесу

void log_start()

{ DWORD x=GetTickCount()-zpoint; //різниця часу між тічним і //початковим часом формування повідомлення про тічний час початку процесу

sprintf_s((char*)&buf,cbufsize,"[%s] Process with rank %d start\n",d2t(x),rank);

//MPI_Send(buf,cbufsize,MPI_CHAR,0,22,MPI_COMM_WORLD);

}

void log_stop()

{ DWORD x=GetTickCount()-zpoint; //різниця часу між тічним і

//початковим часом

//формування повідомлення про тічний час закінчення процесу

sprintf_s((char*)&buf,cbufsize,"[%s] Process with rank %d

stop\n",d2t(x),rank);

printf(buf);

}

void log_recv(float data, int rrank)

{ DWORD x=GetTickCount()-zpoint; //різниця часу між тічним і

//початковим часом

//формування повідомлення про отримання даних від іншого процесу

sprintf_s((char*)&buf,cbufsize,"[%s] Process with rank %d receive %f

from %d\n",d2t(x),rank,data,rrank);

printf(buf);

}

void log_send(float data, int rrank)

{ DWORD x=GetTickCount()-zpoint; //різниця часу між тічним і

//початковим часом

//формування повідомлення про передачу даних іншому процесу

sprintf_s((char*)&buf,cbufsize,"[%s] Process with rank %d send %f to

process with rank %d\n",d2t(x),rank,data,rrank);

printf(buf);

}

В результаті роботи програма виводить журнал повідомлень про виконання процесорами роботи, обмін даними, початок і закінчення виконання процесів. Даний журнал дозволяє відслідковувати алгоритм виконання процесів на обох процесорах, часові рамки початку і закінчення виконання процесів, залежність можливості виконання процесів від строків закінчення процесів, що формують вихідні дані для них.

3. Висновки

В результаті виконання даного розрахунково-графічного завдання було проведено аналітичний аналіз поставленої задачі, побудовано і впорядковано граф інформаційної залежності, визначено ранні і пізні строки закінчення процесів, визначено залежність зміни щільності навантаження процесорів в часі і організовано оптимальний взаємний обмін даними між процесорами. Було обчислено характеристики розробленого алгоритму виконання задачі - степінь паралелізму, прискорення процесу і завантаження обладнання.

На основі проведеної аналітичної підготовки було розроблено схему паралельного алгоритму, механізм обміну між процесорами топологічно розміщеними на одному процесорі за допомогою інтракомунікаторів і між групами процесорів розміщеними на різних процесорах за допомогою інтеркомунікаторів.

За створеним алгоритмом розроблено програму, що виконується на паралельних процесорах, і отримано журнал повідомлень-подій результатів виконання задачі на двох паралельних процесорах.


Подобные документы

  • Структура деревооброблювальної фабрики. Нормалізація відносин і побудова ER-діаграм. Показники економічної ефективності інформаційної системи. Розрахунок витрат на створення і експлуатацію системи на підприємстві. Інструкція по роботі з програмою.

    курсовая работа [3,6 M], добавлен 30.05.2012

  • Коротка характеристика реле. Побудова моделі реле постійного струму. Розрахунок матриць інциденцій та оберненої матриці. Аналіз напруг за допомогою кривої намагнічення. Розрахунок індуктивність котушки для опису перехідного процесу. Лістинг програми.

    контрольная работа [279,8 K], добавлен 19.01.2011

  • Побудова моделі процесів системи. Відображення користувачів і їхніх функцій, підметів автоматизації в прив'язці до структури системи. Відображення структури інформаційних та фізичних об'єктів системи та їх взаємозв’язків. Побудова моделі станів системи.

    курсовая работа [125,2 K], добавлен 03.10.2008

  • Структура електронної таблиці. Опис технології організації і заповнення таблиці, технології форматування таблиці. Фільтрація даних, розширений фільтр. Побудова графіків і діаграм. Розширений фільтр за критерієм "формула". Розрахунковий вигляд таблиці.

    курсовая работа [155,3 K], добавлен 22.12.2013

  • Методи створення книги MS Excel для розподілу заробітної плати між членами комплексної бригади та аналізу результатів розподілу згідно кваліфікації та відпрацьованого часу. Створення таблиці розподілу, нарахувань та утримань. Побудова графіків та діаграм.

    контрольная работа [1,1 M], добавлен 02.05.2010

  • Поняття та характеритсики комп'ютерних мереж. Огляд існуючих варіантів побудови інформаційної системи для торгівельного підприємства. Побудова локальної мережі, загальної структури інформаційної системи, бази даних. Аналіз санітарно-гігієнічних умов.

    курсовая работа [624,4 K], добавлен 19.05.2015

  • Аналіз системи життєзабезпечення об’єкта захисту, можливих каналів витоку інформації. Побудова моделі порушника. Розробка організаційних, технічних заходів захисту. Вибір тип електромагнітного екранування, заземлення. Розрахунок звукоізоляції приміщення.

    курсовая работа [1,7 M], добавлен 16.08.2015

  • База даних як складова частина інформаційної системи. Загальні принципи створення контролерів автоматизації MS Office. Розробка гнучкої комп'ютеризованої системи, призначеної для автоматизації розрахунку учбового навантаження. Моделі представлення даних.

    дипломная работа [4,7 M], добавлен 26.10.2012

  • Проектування бази даних: визначення об’єктів, структура таблиць, побудова схеми даних, забезпечення цілісності даних, створення певних відношень між таблицями, створення запитів, побудова форм, оформлення об’єктів. Розробка інструкції користувача.

    курсовая работа [1,9 M], добавлен 19.09.2014

  • Побудова графіків в декартовій системі координат. Обчислення максимального, мінімального та середнього значення функції. Робота в середовищі Mathcad та Excel. Сортування і фільтрація даних. Дії над масивами випадкових чисел. Створення векторів і матриць.

    курсовая работа [341,2 K], добавлен 15.12.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.