- •Қазақстан республикасы білім және ғылым министрлігі м.Х.Дулати атындағы тараз мемлекеттік университеті
- •Әдістемелік нұсқау Тараз 2015
- •Зертханалық жұмыстарды орындау әдістемелік нұсқауы
- •Зертханалық жұмыс №1. Параллельді есептеулерді талдау және модельдеу. Жеке тізбектік сумманың сандық мәнін табу тапсырмасын шешу
- •Зертханалық жұмыс №2. Мәлімет алмасудың негізгі амалдарының орындалу алгоритмдерін жүзеге асыру және құру. Салыстырмалы талдау
- •Зертханалық жұмыс №4. Тізбектелген және параллельді алгоритмдерді сұрыптаудың жүзеге асырылуы
- •Зертханалық жұмыс №5. С алгоритмдік тіліндегі mpi қолданатын параллельді программаның өңделуі
- •3. «Тақ-жұп орын ауыстыру» алгоритмі.
- •Зертханалық жұмыс №6. Прим тізбектелген және параллельді алгоритмін жүзеге асыру және салыстырмалы талдау
- •Зертханалық жұмыс №9. Параллель есептеулердің алгоритмдері. Матрицаларды қайта көбею әдістері
- •Зертханалық жұмыс №10-11. Векторға матрицаны параллельді көбейту
- •Зертханалық жұмыс №12-13. Параллель есептеулердің алгоритмдері. Сұрыптау. Сұрыптаудың түрлері. С алгоритмдік тілінде mpi қолдана отырып параллельді программаларды өңдеу
- •Зертханалық жұмыс №14. Нақты сандардың тізбегін сұрыптау параллель алгоритмінің моделі
Зертханалық жұмыс №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.
