Паралельне представлення алгоритмів

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
ІКТА
Факультет:
СІ
Кафедра:
Кафедра "Спеціалізовані комп’ютерні системи" (СКС)

Інформація про роботу

Рік:
2022
Тип роботи:
Лабораторна робота
Предмет:
Паралельні та розподілені обчислення

Частина тексту файла

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ
/
Звіт з лабораторної роботи 3 з дисципліни: “Паралельні та розподілені обчислення” на тему: “Паралельне представлення алгоритмів”
Мета : Вивчити можливості паралельного представлення алгоритмів. Набути навиків такого представлення.
Завдання
Запропонувати та реалізувати локально-рекурсивний алгоритм обчислення виразу:
, де А та В матриці з елементами та , відповідно(), тобто:
() .
Тип вхідних послідовностей визначається згідно варіанту. Матриця А задається однозначно і залежить лише від розмірності даних. Для матриці В:
заштрихована область – довільні цілі числа, відмінні від нуля, а не заштрихована область – нулі.
Варіант Тип матриці А Тип матриці В
14 111111 011110
011110 111111 Графи залежностей (n = 4)
Локалізований граф залежностей Оптимізований граф залежностей
Текст програми include
include
include
/*void fillFirstMatrix(int** arr, size_t size) {
int iterator = 1;
for (int i = 0; i < size; i++)
{
for (int j = 0; j
0 && i < size-1 &&( j==0 || j==size-1))
{
arr[i][j] = 0;
}
else {
arr[i][j] = 1;
}
}
bool isTopHalf = i + 1 < round(size / 2.0);
if (isTopHalf)
{
iterator++;
}
else if (!(i + 1 <= size / 2))
{
iterator--;
}
} }*/
void fillFirstMatrix(int** arr, size_t size) {
int iterator = 1;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (j + 1 - iterator <= 0 || size - j <= iterator)
{
arr[j][i] = 1;
}
else {
arr[j][i] = 0;
}
}
bool isTopHalf = i + 1 < round(size / 2.0);
if (isTopHalf)
{
iterator++;
}
else if (!(i + 1 <= size / 2))
{
iterator--;
}
} }
void fillSecondMatrix(int** arr, size_t size) {
int iterator = 1;
for (int i = 0; i < size; i++)
{
for (int j = 0; j < size; j++)
{
if (j + 1 - iterator <= 0)
{
arr[i][j] = rand() % 25 + 1;
}
else {
arr[i][j] = 0;
}
}
bool isTopHalf = i + 1 < round(size / 2.0);
if (isTopHalf)
{
iterator++;
}
else if (!(i + 1 <= size / 2))
{
iterator--;
}
} }
void mularray(int**A, int**B, int n, int**Y) {
for (int i = 0; i < n; ++i) {
for (int j = 0; j < n; ++j) {
Y[i][j] = 0;
for (int k = 0; k < n; ++k) {
Y[i][j] = Y[i][j] + A[i][k] * B[k][j];
}
}
} }
void printMatrix(int** arr, size_t size) {
for (int i = 0; i < size; ++i)
{
for (int j = 0; j < size; ++j)
{
std::cout << std::setw(4) << arr[i][j];
}
std::cout << std::endl;
} }
void main() {
std::cout << "Enter size: " <> size;
int** arrA = new int*[size];
int** arrB = new int*[size];
int** arrC = new int*[size];
for (int i = 0; i < size; i++)
{
arrA[i] = new int[size];
arrB[i] = new int[size];
arrC[i] = new int[size];
}
fillFirstMatrix(arrA, size);
std::cout << "Matrix A:" << std::endl;
printMatrix(arrA, size);
std::cout << std::endl;
fillSecondMatrix(arrB, size);
std::cout << "Matrix B:" << std::endl;
printMatrix(arrB, size);
std::cout << std::endl;
mularray(arrA, arrB, size, arrC);
std::cout << "Matrix C:" << std::endl;
printMatrix(arrC, size);
for (size_t i = 0; i < size; i++)
{
delete[] arrA[i];
delete[] arrB[i];
delete[] arrC[i];
}
delete[] arrA;
delete[] arrB;
delete[] arrC;
system("pause"); }
Результат виконання роботи:
Висновок
Виконуючи лабораторну роботу я отримала навички паралельного обчислення алгоритмів на базі множення матриць, також навчилася реалізовувати алгоритм з одноразовим присвоєнням і локально-рекурсивний алгоритм, який працює на базі локалізованого графа.
Антиботан аватар за замовчуванням

01.01.1970 00:01

Коментарі

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

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Новини