Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УМК Параллель багдарламалау.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.47 Mб
Скачать
    1. Матрицаларды көбейту жолдары

    2. Ядрода жұмысшылар мүмкіндіктерін пайдаланып әртүрлі өлшемді матрицаларды тізбектей және параллель көбейту

Сабақ мақсаты: студенттергематрицалардың параллельді көбейтіндісінің артықшылығы және матрица көбейтіндісінің алгоритмі туралы түсіндіру.

Негізгі түсініктер:Матрицалардың параллельді көбейтіндісінің артықшылығы, матрица көбейтіндісінің алгоритмі, tic, toc.

Әдебиеттер: [4,5]

    1. Матрицаларды көбейту жолдары

Мысалдарда n*n өлшем бірлігіндегі М шаршысын және n өлшем бірлігіндегі кездейсоқ R матрицасын қолданамыз.

Тапсырманы орындау үшін құралдар панелінен келесі пиктограмманы қолданамыз:

Көздеген тапсырмаларды орындау үшін келесі тармақтарды орындау керек (сурет 60):

Багетная рамка 354

Багетная рамка 353

Багетная рамка 352

Багетная рамка 201

Багетная рамка 202

Волна 351

Сурет 60 - Матрицаларды тізбекті көбейтудің Matlab-коды

Жазылған кодты сақтау керек, мысалы, matr1 атты m-файл есебінде сақтау.

Аталған кодты ашамыз. Бұл үшін Matlab командалық тармағынан файл атын жазып Enter – ді басу немесе Current Folder терезесінде U1 атты m-файл белгішесін таңдап, run белгісін немесе F5 пернесін басып тұрып жіберсек жеткілікті.

Дәл осы жолмен коды бар matr2 атты коды бар файл құрамыз.

matlabpool open mpc 4

clear;

n = 10;

tic;

parfor i = 1:n

M = magic(n);

R = rand(n);

A(i) = sum(M(i,:).*R(n+1-i,:));

end

toc

matlabpool close

Мұнда, tic – таймерді бастайды, ал toc – таймерді аяқтайды. Нәтижесінде код учаскесіне сәйкес орындалу уақытын анықтай аламыз.

12.2 Ядрода жұмысшылар мүмкіндіктерін пайдаланып әртүрлі өлшемді матрицаларды тізбектей және параллель көбейту

Аталған кодтарды жүзеге асыру нәтижесінде, яғни тізбекті және параллельді матрица көбейтіндісі нәтижесінде келесі мерзім түсініктері пайда болды (3 кесте):

3 кесте – 4 worker көлеміне сай тізбекті және параллельді матрицалар көбейтіндісін салыстыру үшін мәліметтер (кластер екі екіядролық компьютерден тұрады)

N

Тізбектеп көбейту

Параллельді көбейту

10

0.002632

0.146898

300

3.617402

1.319166

1000

147.087110

48.551099

Matr2 атты m-файлды сегіз ядролық компьютерде ашқанда және n түрлі түсініктерінде басқа нәтижелер пайда болды:

>>matr2

Starting matlabpool using the 'local' configuration ... connected to 8 labs.

Elapsed time is 25.433397 seconds.

Sending a stop signal to all the labs ... stopped.

>>

Келесі кестеде workers 8-ге тең болған жағдайдағы тізбекті және параллельді матрицалардың көбейтіндісі нәтижесі келтірілген (4кесте).

4 кесте – workers 8-ге тең болған жағдайдағы тізбекті және параллельді матрицалардың көбейтіндісі мәліметтері.

N

Тізбектеп көбейту

Параллельді көбейту

10

0.001408

0.282184

300

1.396600

0.787286

1000

60.864665

25.433397

Нәтижелер көрсеткендей, n өлшемі көп болған сайын, тізбекті көбейтіндіге қарағанда параллельді көбейтіндіге аз уақыт жұмсалады.

Бақылау сұрақтары:

1. Матрицалардың параллельді көбейтіндісінің артықшылығы

2. tic және toc нені білдіреді

Тұжырым: Бұл дәрісте матрицаларды көбейту жолдары қарастырылды.

Дәрістің тақырыбы 13: Дифференциалды теңдеулерді шешу

Жоспар:

13.1 Негізгі түсініктер

    1. Қарапайым екінші дәрежелі дифференциалды теңдеуді шешу

Сабақ мақсаты:қарапайым дифференциалды теңдіктер, конфигурация жайлы таныстыру

Негізгі түсініктер: қарапайым дифференциалды теңдіктер, конфигурация (пішім), odesystem.m.

Әдебиеттер: [8,9]

13.1 Негізгі түсініктер

m*X'' + b*X' + k*X = 0 дифференциалды теңдеуінің параллельді есептеу кластеріндегі шешімін көрейік. Бұл үшін 4 жұмыс процессорлары мен кластер worker-лерін қолданамыз.

Тапсырманы орындау үшін m-файлдар paramSweep.m және odesystem.m [17] пайдаланамыз.

Мысалы, odesystem.m файлының мәтіні сурет 61-де көрсетілген.

Сурет 61 - odesystem.m файлының мәтіні

    1. Қарапайым екінші дәрежелі дифференциалды теңдеуді шешу

m*X'' + b*X' + k*X = 0 – берілген қарапайым екінші дәрежелі дифференциалды теңдеу.

Қарапайым екінші дәрежелі дифференциалды теңдеуді шешу қарапайым бірінші дәрежелі дифференциалды теңдеуді шешу жүйесіне сай келеді:

Багетная рамка 392

Жоғарыда көрсетілген жүйе odesystem.m файлында былай көрсетілген:

Багетная рамка 391

odesystem.m ParamSweep.m.-тегі негізгі файлында қолданылатынын айта кеткен жөн.

%% b және k параметрлері

% қарапайым екінші дәрежелі дифференциалды теңдеу шешімін табуда қолданылады. (ODE)

%

% $m\ddot{x} + b\dot{x} + kx = 0$

%

% ODE-ні 0 мен 25 секунд аралығындағы уақыт диапазонына шешеміз

% бастапқы шарттарымен

% $x(0) = 0$ және

% $\dot{x}(0) = 1$.

%біз $b$ и $k$ параметр мағыналарын өзгертеміз

% және $x$ - дің пиктік мағыналарын осы параметрлер ушін табамыз

% соңында нәтижелерді үстіртін қарап шығамыз

%

% Copyright 2009-2011 TheMathWorks, Inc.

%тапсырма инициализациясы

m =5; % масса

bVals = linspace(0.1, 5, 50); % демпфирлеу мағынасы

kVals = linspace(1.5, 5, 70); % қаттылық мағынасы

[kGrid, bGrid] = meshgrid(bVals, kVals);

peakVals = nan(size(kGrid));

% бірінші біз ретті цикл есебін жасап аламыз

disp('Computing in serial...');drawnow;

tic;

foridx = 1:numel(kGrid)

% Решим ODE

[T,Y] = ode45(@(t,y) odesystem(t, y, m, bGrid(idx), kGrid(idx)), ...

[0, 25], ...% 25 секунд ішінде орындау

[0, 1]) ; алғышарттардың бірі

% ең көп түсініктерді анықтау

peakVals(idx) = max(Y(:,1));

end

t1 = toc;

% келесі оператор монитор экранында текст %0.2f ( үтірден кейінгі 2 сан % секундпен) форматында жұмсалған уақытты анықтайды

fprintf('Elapsed time is %0.2f seconds.\n', t1);

% енді параллельді цикл есебін жасаймыз

% for-ды parfor-мен алмастырып, matlabpool пішіммен ашамыз

% mpc және worker саны 4-ке тең

disp('Computing in parallel...');drawnow;

matlabpool open mpc 4

tic;

parforidx = 1:numel(kGrid)

% ODE шешеміз

[T,Y] = ode45(@(t,y) odesystem(t, y, m, bGrid(idx), kGrid(idx)), ...

[0, 25], ...% 25 секунд ішінде орындау

[0, 1]) ;% алғышарттар

% пиктік мағыналарды анықтау

peakVals(idx) = max(Y(:,1));

end

t2 = toc;

fprintf('Elapsed time is %0.2f seconds.\n', t2);

% matlabpool жабылуы

matlabpool close

% визуализалдау

figure;

surf(bVals, kVals, peakVals);

xlabel('Damping (b)'); % демпфирлеу

ylabel('Stiffness (k)'); % қаттылық

zlabel('Peak Response'); % ең көп мағыналық

view(50, 30)

% жылдамдық жайлы

% Жоғары жылдамдыққа жеткендігімізді көреміз

fprintf('\n\nSpeed up (time serial / time parallel): %0.2f\n', t1/t2);

Ары қарай біз екі ядролық процессор деңгейіндегі дифференциалды теңдеу нәтижелері көрсетілген.

Блок-схема: перфолента 390

Блок-схема: перфолента 389

>>paramSweep

Computing in serial...

Elapsed time is 19.27 seconds.

Computing in parallel...

Starting matlabpool using the 'mpc' configuration ... connected to 2 labs.

Elapsed time is 9.12 seconds.

Sending a stop signal to all the labs ... stopped.

Speed up (time serial / time parallel): 2.11

>>JobsTasksExample

Computing serially...

RMSE between ODE15s and ODE23 : 0.0025

RMSE between ODE15s and ODE45 : 0.0023

RMSE between ODE15s and Analytical: 0.0028

RMSE between ODE23 and ODE45 : 0.0025

RMSE between ODE23 and Analytical : 0.0028

RMSE between ODE45 and Analytical : 0.0016

Elapsed time is 43.80 seconds.

Computing using Jobs and Tasks...

RMSE between ODE15s and ODE23 : 0.0025

RMSE between ODE15s and ODE45 : 0.0023

RMSE between ODE15s and Analytical: 0.0028

RMSE between ODE23 and ODE45 : 0.0025

RMSE between ODE23 and Analytical : 0.0028

RMSE between ODE45 and Analytical : 0.0016

Elapsed time is 27.72 seconds.

Speed up (time serial / time parallel): 1.58(сурет 62).

>>

Сурет 62 – Бағдарлама визуализациясының нәтижесі

Дәрістің тақырыбы 14: Gpu (graphics processing unit)қосымша есептеу құралы ретінде

Жоспар: