Технології розподілених систем та паралельних обчислень
Автор: lubomur4400 • Ноябрь 25, 2018 • Лабораторная работа • 2,570 Слов (11 Страниц) • 626 Просмотры
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
ІНСТИТУТ ПІДПРИЄМНИЦТВА І ПЕРСПЕКТИВНИХ ТЕХНОЛОГІЙ
кафедра інформаційних систем та технологій
ЗВІТ
до лабораторної роботи № 4
з курсу
«Технології розподілених систем та паралельних обчислень »
Виконав:
студент групи КН-491,
Мосійчук Олег
Прийняв:
Кузьо М.М.
ЛЬВІВ – 2018
Мета: Вивчити можливості паралельного представлення алгоритмів. Набути навиків такого представлення.
Завдання:
Запропонувати та реалізувати локально-рекурсивний алгоритм обчислення виразу: [pic 1], де А та В матриці з елементами [pic 2] та [pic 3], відповідно [pic 4]. Матриця А задається однозначно і залежить лише від розмірності даних. Для матриці В: заштрихована область — довільні цілі числа, відмінні від нуля, а незаштрихована область - нулі.
№ A B
1 | n 0 .... 0 0 n-1...0 .... 0 .... 1 | [pic 5] |
Послідовність виконання роботи:
- Програма з одноразовим присвоюванням.
Програма об’єднана з програмою реалізації оптимізованого локально-рекурсивного алгоритма, і подана в пункті 6.
- Рекурсивні рівняння: Cij(k+1)=Cij(k)+Aij(k)*Bij(k), де Aij(k)=A[i][j], Bij(k)=B[i][j], k - індекс рекурсії.
- Граф залежностей(n=4):
[pic 6]
- Оптимізований граф залежностей(n=4):
[pic 7]
- Аналітичні оцінки кількості арифметичних операцій та їх порівняння.
В локалізованому графі залежностей кількість операцій рівна N2(2N-1) де n кількість стовпців чи рядків матриці.(Для обчислення кожного з N2 елементів необхідно 2N-1 операцій).
- Текст програми, що реалізовує оптимізований локально-рекурсивний алгоритм:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace lab1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
int N=0;
int[,] arrayA;
int[,] arrayB;
private void maskedTextBox1_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == Convert.ToChar(13))
{
N = Int32.Parse(maskedTextBox1.Text);
if (N > 16)
{
MessageBox.Show("Матриця завелика для коректного відображення");
return;
}
arrayA = new int[N, N];
arrayB = new int[N, N];
for (int i = 0; i < N; i++)
{
arrayA[i, i] = N - i;
}
Random rnd = new Random(DateTime.Now.Millisecond);
for (int i = 0; i < N; i++)
{
for (int j = i; j < N; j++)
{
arrayB[i, j] = rnd.Next(9)+1;
}
}
Show(arrayA, N, textBox1);
Show(arrayB, N, textBox2);
}
}
private void Show(int[,] arr,int N, TextBox txt)
{
txt.Clear();
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
txt.Text += arr[i, j].ToString() + " ";
}
txt.Text += Environment.NewLine;
...