Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Зертхана ПВ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
494.59 Кб
Скачать

Зертханалық жұмыс №9. Параллель есептеулердің алгоритмдері. Матрицаларды қайта көбею әдістері

Параллельді әдіске қысқаша сипаттама

p – процессорлар саны, n – сұрыпталатын тізбектің ұзындығы, мұндағы p<n.Бастапқыда, әрбір процессор үшін n/p элементтен тұратын блок тағайындалады,ол бұл элементтерден іштей Q((n/p)*log(n/p)) уақытта сұрыптап шығады.Мұнан кейін процессорлар р фазыдан өтіп шығады (p/2 тақ және p/2 жұп), яғни«салыстыру-бөлу» (compare-split) операциясын орындайды. Сақинадағыпроцессорлар бір-біріне элементтерін алмастырады. Нәтижесніде әрбір процессорда өз элементтері және көрші процессордың элементтері сұрыпталады да, қайта бөлінеді: сол жақтағы көрші процессор элементтердің бірінші жартысын (кіші элементтерді), оң жақтағы – екінші жартысын (үлкен элементтерді) бөліп алады. Осы фазалар өткен соң тізбек сұрыпталады. Әрбір фаза кезінде екі блокты біріктіру үшін Q(n/p) салыстыру орындалады және Q(n/p) уақыт жұмсалады.

а кезінде де орындалады.

Программа 3. n-процессорлы сақинада орындалатын "тақ-жұр орын

ауыстыру" тәсілінің параллельді алгоритмі.

1. procedure ODD-EVEN-PAR(n)

2. begin

3. id := processor's label

4. for i:= 1 to n do

5. begin

6. if i is odd then

7. if id is odd then

8. compare-exchange_min(id+1);

9. else

10. compare-exchange_max(id-1);

11. if i is even then

12. if id is even then

13. compare-exchange_min(id+1);

14. else

15. compare-exchange_max(id-1);

16. end for

17. end ODD-EV

Зертханалық жұмыс №10-11. Векторға матрицаны параллельді көбейту

Жұмыс мақсаты- векторға матрицаны параллельді көбейтуді білімгерлермен тәжірибе жүзінде жүргізу.

Нәтижесі:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Edit1: TEdit;

Edit4: TEdit;

Edit7: TEdit;

Edit2: TEdit;

Edit5: TEdit;

Edit8: TEdit;

Edit3: TEdit;

Edit6: TEdit;

Edit9: TEdit;

V1: TEdit;

V2: TEdit;

V3: TEdit;

R1: TEdit;

R2: TEdit;

R3: TEdit;

Label1: TLabel;

Label2: TLabel;

Button1: TButton;

Button2: TButton;

PR1: TEdit;

PR2: TEdit;

PR3: TEdit;

Label3: TLabel;

procedure Button1Click(Sender: TObject);

procedure InitForm();

procedure FormCreate(Sender: TObject);

procedure Button2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

Ar3x3: Array[1..3, 1..3] of Real;

Vector: Array[1..3] of Real;

Resutl: Array[1..3] of Real;

implementation

{$R *.dfm}

procedure TForm1.InitForm();

begin

Edit1.Text := IntToStr(Random(100));

Edit2.Text := IntToStr(Random(100));

Edit3.Text := IntToStr(Random(100));

Edit4.Text := IntToStr(Random(100));

Edit5.Text := IntToStr(Random(100));

Edit6.Text := IntToStr(Random(100));

Edit7.Text := IntToStr(Random(100));

Edit8.Text := IntToStr(Random(100));

Edit9.Text := IntToStr(Random(100));

V1.Text := IntToStr(Random(100));

V2.Text := IntToStr(Random(100));

V3.Text := IntToStr(Random(100));

R1.Text := '';

R2.Text := '';

R3.Text := '';

PR1.Text := '';

PR2.Text := '';

PR3.Text := '';

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Ar3x3[1][1] := StrToFloat(Edit1.Text);

Ar3x3[1][2] := StrToFloat(Edit2.Text);

Ar3x3[1][3] := StrToFloat(Edit3.Text);

Ar3x3[2][1] := StrToFloat(Edit4.Text);

Ar3x3[2][2] := StrToFloat(Edit5.Text);

Ar3x3[2][3] := StrToFloat(Edit6.Text);

Ar3x3[3][1] := StrToFloat(Edit7.Text);

Ar3x3[3][2] := StrToFloat(Edit8.Text);

Ar3x3[3][3] := StrToFloat(Edit9.Text); //asdfklj

Vector[1] := StrToFloat(V1.Text);

Vector[2] := StrToFloat(V2.Text);

Vector[3] := StrToFloat(V3.Text);

PR1.Text := FloatToStr(Ar3x3[1][1] * Vector[1]) + ' + ' + FloatToStr(Ar3x3[2][1] * Vector[1]) + ' + ' + FloatToStr(Ar3x3[3][1] * Vector[1]);

PR2.Text := FloatToStr(Ar3x3[1][2] * Vector[2]) + ' + ' + FloatToStr(Ar3x3[2][2] * Vector[2]) + ' + ' + FloatToStr(Ar3x3[3][2] * Vector[2]);

PR3.Text := FloatToStr(Ar3x3[1][3] * Vector[3]) + ' + ' + FloatToStr(Ar3x3[2][3] * Vector[3]) + ' + ' + FloatToStr(Ar3x3[3][3] * Vector[3]);

Resutl[1] := Ar3x3[1][1] * Vector[1] + Ar3x3[2][1] * Vector[1] + Ar3x3[3][1] * Vector[1];

Resutl[2] := Ar3x3[1][2] * Vector[2] + Ar3x3[2][2] * Vector[2] + Ar3x3[3][2] * Vector[2];

Resutl[3] := Ar3x3[1][3] * Vector[3] + Ar3x3[2][3] * Vector[3] + Ar3x3[3][3] * Vector[3];

R1.Text := FloatToStr(Resutl[1]);

R2.Text := FloatToStr(Resutl[2]);

R3.Text := FloatToStr(Resutl[3]);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

InitForm();

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

InitForm();

end;

end.