Лабораторная работа 5 (ПКРПСиБД LAB5 Захаров А.Е.)

Посмотреть архив целиком

Национальный Исследовательский Университет

МОСКОВСКИЙ ЭНЕРГЕТИЧЕСКИЙ ИНСТИТУТ

Институт автоматики и вычислительной техники

Кафедра прикладной математики





Лабораторная работа № 5

Реализация одного из шаблонов

параллельного программирования

Курс «Проектирование крупных распределенных программных систем и баз данных»



Выполнил

студент группы А-13-08

Захаров Антон

(8 вариант)


Преподаватель

к.т.н., доц. Куриленко Иван Евгеньевич


Цель работы

Научиться применять шаблоны параллельного программирования.

Порядок выполнения работы

  1. С использованием одного из языков программирования из множества (C++, C#, Java) реализовать шаблон параллельного программирования «Ведущий / ведомый» (8 вариант).

  2. Разработать UML модель.

Требования

  • Наличие работающей демонстрационной программы с исходным кодом.

  • Наличие UML-модели в электронном виде, иллюстрирующей шаблон, полученной с помощью специализированного диаграммера (Rational Enterprise Architect, Visual Paradigm, Visual Studio).

  • Наличие отчёта в печатном виде, содержащего теоретическое введение, UML-модель и исходный код.

Ведущий / ведомый

Шаблон параллельного программирования

Описание

Ведущий / ведомый (Leader / Follower) – шаблон параллельного программирования, применяющийся для распределения задач ведущим (Leader) по ведомым (Followers) компонентам и последующей сборки всех полученных результатов.

Уместность применения

Шаблон параллельного программирования «Ведущий / ведомый» уместно применять при распараллеливании любой задачи, требующей одной или нескольких точек сборки результатов. Классическими примерами подобных задач являются перемножение матриц, LU-разложение матриц, решение СЛАУ и т. п.

Преимущества, достигаемые при применении шаблона

  1. Простота разработки и реализации.

  2. Шаблон позволяет отлавливать факты ошибочного завершения работы отдельных параллельных ветвей программы и делать определённых шаги для корректного завершения работы программы, например, повторно запускать неудачно завершившуюся часть программы.

  3. Кроме того, все ведомые компоненты реализуют один интерфейс и могут взаимодействовать только с ведущим, но не друг с другом, что препятствует возникновению многих ошибок.

Недостатки шаблона

  1. Отсутствие способа обмена информацией между ведомыми компонентами зачастую существенно усложняет код.



Детали реализации

Шаблон реализуется следующим образом:

using System;

using System.Data;

using System.Drawing;

using System.Windows.Forms;

using System.Threading;


namespace lab5

{

class Leader

{

static public int[][] matrixMultiplication(int[][] A, int[][] B)

{

Follower[][] followers = new Follower[A.Length][];

Thread[][] threads = new Thread[A.Length][];

for (int i = 0; i < A.Length; i++)

{

threads[i] = new Thread[A.Length];

followers[i] = new Follower[A.Length];

for (int j = 0; j < A.Length; j++)

{

followers[i][j] = new Follower(A[i], B[j]);

threads[i][j] = new Thread(new ThreadStart(followers[i][j].count));

threads[i][j].Start();

}

}


for (int i = 0; i < A.Length; i++)

for (int j = 0; j < A.Length; j++)

threads[i][j].Join();


int[][] result = new int[A.Length][];

for (int i = 0; i < A.Length; i++)

{

result[i] = new int[A.Length];

for (int j = 0; j < A.Length; j++)

result[i][j] = followers[i][j].result;

}


return result;

}

}


class Follower

{

public int result = 0;

private int[] A;

private int[] B;


public Follower(int[] A, int[] B)

{

this.A = A; this.B = B;

}


public void count()

{

for (int i = 0; i < A.Length; i++)

result += A[i] * B[i];

}

}




public partial class Form1 : Form

{

private System.Windows.Forms.TextBox[][] A = new System.Windows.Forms.TextBox[3][];

private System.Windows.Forms.TextBox[][] B = new System.Windows.Forms.TextBox[3][];

private System.Windows.Forms.TextBox[][] C = new System.Windows.Forms.TextBox[3][];

private int[][] Amatrix = new int[3][];

private int[][] Bmatrix = new int[3][];

private int[][] Cmatrix = new int[3][];


public Form1() {

InitializeComponent();


System.Drawing.Font font = new System.Drawing.Font("Microsoft Sans Serif", 12F,

System.Drawing.FontStyle.Regular,System.Drawing.GraphicsUnit.Point,((byte)(204)));

HorizontalAlignment center = System.Windows.Forms.HorizontalAlignment.Center;

System.Random rand = new System.Random();


for (int i = 0; i < 3; i++) {

A[i] = new System.Windows.Forms.TextBox[4];

Amatrix[i] = new int[4];

for (int j = 0; j < 4; j++) {

Amatrix[i][j] = rand.Next(0, 10);

A[i][j] = new System.Windows.Forms.TextBox();

A[i][j].Font = font;

A[i][j].Location = new System.Drawing.Point(40 + 54 * j, 45 + 30 * i);

A[i][j].Size = new System.Drawing.Size(50, 26);

A[i][j].Text = Amatrix[i][j].ToString();

A[i][j].TextAlign = center;

this.Controls.Add(A[i][j]);

}

}


for (int i = 0; i < 3; i++) {

B[i] = new System.Windows.Forms.TextBox[4];

Bmatrix[i] = new int[4];

for (int j = 0; j < 4; j++) {

Bmatrix[i][j] = rand.Next(0, 10);

B[i][j] = new System.Windows.Forms.TextBox();

B[i][j].Font = font;

B[i][j].Location = new System.Drawing.Point(300 + 54 * i, 30 + 30 * j);

B[i][j].Size = new System.Drawing.Size(50, 26);

B[i][j].Text = Bmatrix[i][j].ToString();

B[i][j].TextAlign = center;

this.Controls.Add(B[i][j]);

}

}


Cmatrix = Leader.matrixMultiplication(Amatrix, Bmatrix);


for (int i = 0; i < 3; i++) {

C[i] = new System.Windows.Forms.TextBox[3];

for (int j = 0; j < 3; j++) {

C[i][j] = new System.Windows.Forms.TextBox();

C[i][j].Font = font;

C[i][j].Location = new System.Drawing.Point(510 + 54 * j, 45 + 30 * i);

C[i][j].Size = new System.Drawing.Size(50, 26);

C[i][j].Text = Cmatrix[i][j].ToString();

C[i][j].TextAlign = center;

this.Controls.Add(C[i][j]);

}

}

}

}

}


UML-диаграммы

Литература



  1. Leader/Followers. A Design Pattern for Efficient Multi-threaded I/O Demultiplexing and Dispatching. Douglas C. Schmidt, Carlos O’Ryan. Electrical and Computer Engineering Dept. University of California, Irvine, CA 92697, USA

http://www.kircher-schwanninger.de/michael/publications/lf.pdf

  1. Приёмы объектно-ориентированного проектирования. Паттерны проектирования. – СПб.: Питер, 2011. – 368 с.: ил.

  2. PHP: объекты, шаблоны и методики программирования. 3-е изд.: Пер. с англ. – М. : ООО «И.Д. Вильямс», 2011. – 560 с. : ил. – Парал. тит. англ.

Москва, 2012


Случайные файлы

Файл
21798-1.rtf
137994.rtf
7497-1.rtf
55492.rtf
Max Rob.doc




Чтобы не видеть здесь видео-рекламу достаточно стать зарегистрированным пользователем.
Чтобы не видеть никакую рекламу на сайте, нужно стать VIP-пользователем.
Это можно сделать совершенно бесплатно. Читайте подробности тут.