Студопедия — Визначення часу виконання MPI-програми
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Визначення часу виконання MPI-програми






Реалізувати програму первісної обробки даних з використанням методу найменших квадратів для послідовності значень отриманих в результаті табуляції функції на інтервалі з кроком 0.1, де випадкове число з рівномірним розподілом на інтервалі . Функція відповідає номеру студента в журналі обліку і вибирається з таблиці 3. Вважаючи, що функціональна залежність між та ─ квадратична. Необхідно визначити коефіцієнти емпіричної формули .

Таблиця 3.

№ п.п. № п.п.
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

 

Результатом роботи програми є знайдені коефіцієнти поліному а також графіки на яких повинно бути зображено наступні залежності:

  • Значення функції
  • Значення функції або (згідно завдання)
  • Значення апроксимуючої функції отриманої в результаті використання методу найменших квадратів.

Визначення часу виконання MPI-програми

Отримати час поточного моменту виконання програми можна за допомогою функції:

double MPI_Wtime (void),

результатом виклику якої є кількість секунд, що минули від деякого певного моменту часу в минулому.

Можлива схема застосування функції MPI_Wtime може полягати в наступному:

double t1, t2, dt;

t1 = MPI_Wtime();

t2 = MPI_Wtime();

dt = t2 – t1;

Точність вимірювання часу також може залежати від середовища виконання паралельної програми. Для визначення поточного значення точності може бути використана функція:

double MPI_Wtick (void),

що дозволяє визначити час у секундах між двома послідовними показниками часу апаратного таймера комп'ютерної системи, що використовується.

2. Передача даних від одного процесу всім процесам програми

Досягнення ефективного виконання операції передачі даних від одного процесу всім процесам програми може бути забезпечено за допомогою функції MPI:

int MPI_Bcast (void * buf, int count, MPI_Datatype type, int root, MPI_Comm comm).

Функція MPI_Bcast здійснює розсилку даних з буфера buf, що містить count елементів типу type з процесу, що має номер root, всім процесам, що входять в комунікатор comm.

3. Передача даних від всіх процесів одному процесу. Операції редукції

Для найкращого виконання дій, пов'язаних з редукцією даних, в MPI передбачена функція:

int MPI_Reduce (void * sendbuf, void * recvbuf, int count, MPI_Datatype type, MPI_Op op, int root, MPI_Comm comm),

де

- Sendbuf - буфер пам'яті з повідомленням, що відправляється,

- Recvbuf - буфер пам'яті для результуючого повідомлення (тільки для процесу з рангом root),

- Count - кількість елементів у повідомленнях,

- Type - тип елементів повідомлень,

- Op - операція, яка повинна бути виконана над даними,

- Root - ранг процесу, на якому повинен бути отриманий результат,

- Comm - комунікатор, в рамках якого виконується операція.

Операція Опис
MPI_MAX Визначення максимального значення
MPI_MIN Визначення мінімального значення
MPI_SUM Визначення суми значень
MPI_PROD Визначення добуток значень
MPI_LAND Виконання логічної операції "І" над значеннями повідомлень
MPI_BAND Виконання бітової операції "І" над значеннями повідомлень
MPI_LOR Виконання логічної операції "АБО" над значеннями повідомлень
MPI_BOR Виконання бітової операції "АБО" над значеннями повідомлень
MPI_LXOR Виконання логічної операції виключає "АБО" над значеннями повідомлень
MPI_BXOR Виконання бітової операції виключає "АБО" над значеннями повідомлень
MPI_MAXLOC Визначення максимальних значень і їх індексів
MPI_MINLOC Визначення мінімальних значень і їх індексів

4. Синхронізація обчислень

Синхронізація процесів, тобто одночасне досягнення процесами тих чи інших точок процесу обчислень, забезпечується за допомогою функції MPI:

int MPI_Barrier (MPI_Comm comm);

Функція MPI_Barrier визначає колективну операцію і, тим самим, при використанні повинна викликатися всіма процесами комунікатора, що використовується. При виклику функції MPI_Barrier виконання процесу блокується, продовження обчислень процесу відбудеться тільки після виклику функції MPI_Barrier всіма процесами комунікатора.

Приклад №4. Знайти суму елементів: .

Розробка паралельного алгоритму для рішення даної задачі не викликає труднощів – необхідно розділити дані на рівні блоки, передати ці блоки процесам, виконати в процесах підсумовування отриманих даних, зібрати значення обчислених часткових сум на одному з процесів і скласти значення часткових сум для отримання загального результату розв'язуваної задачі.

 

#include <stdio.h>

#include "mpi.h"

#include <stdlib.h>

 

 

int main(int argc, char *argv[])

{

int my_rank;

int numprocs;

int n,i,sum;

int a;

int result;

double wtime;

 

MPI_Init(&argc, &argv);

MPI_Comm_rank(MPI_COMM_WORLD, &my_rank);

MPI_Comm_size(MPI_COMM_WORLD, &numprocs);

if (my_rank == 0) {

printf("Input n:");

fflush(stdout);

scanf("%d",&n);

}

 

MPI_Bcast(&n,1,MPI_INT,0,MPI_COMM_WORLD);

MPI_Barrier(MPI_COMM_WORLD);

wtime=MPI_Wtime();

 

sum=0;

for (i= my_rank; i<=n; i+=numprocs)

{ a=rand()%n+1;

sum=sum+a;

}

 

MPI_Reduce(&sum, &result,1,MPI_INT,MPI_SUM,0,MPI_COMM_WORLD);

MPI_Barrier(MPI_COMM_WORLD);

wtime=MPI_Wtime()-wtime;

if (my_rank == 0) {

 

printf("suma=%d",result);

printf("Working time: %.8lf seconds\n",wtime);

 

}

MPI_Finalize();

return 0;

}

 

 


Математичні функції на С++:

Функція Опис Приклад
abs(a) модуль або абсолютне значення від а abs(-3.0)= 3.0 abs(5.0)= 5.0
sqrt(a) корінь квадратний з а, причому а не від’ємне sqrt(9.0)=3.0
pow(a, b) піднесення а у степінь b pow(2,3)=8
ceil(a) округлення а до найменшого цілого, але не менше ніж а ceil(2.3)=3.0 ceil(-2.3)=-2.0
floor(a) округлення а до найбільшого цілого, але не більше ніж а floor(12.4)=12 floor(-2.9)=-3
fmod(a, b) обчислення остачі від a/b fmod(4.4, 7.5) = 4.4 fmod(7.5, 4.4) = 3.1
exp(a) обчислення експоненти еа exp(0)=1
sin(a) a задається у радіанах  
cos(a) a задається у радіанах  
log(a) натуральний логарифм a(основою є експонента) log(1.0)=0.0
log10(a) десятковий логарифм а Log10(10)=1
asin(a) арксинус a, де -1.0 < а < 1.0 asin(1)=1.5708
Таблиця 1 — Математичні функції у С++

ІІ. Практична частина

Інструкції до виконання

Застосовуючи технологію паралельного програмування МРІ, написати програму для обчислення значення визначеного інтеграла, використовуючи метод трапеції. Завдання згідно варіанту (Додаток №1).

Скласти порівняльнутаблицю часу виконання програми при різних характеристиках.

Для роботи з програмою на двох комп’ютерах потрібно створити спільний ресурс.

Додаток №1

Поточні контрольні питання:

7. Яка загальна будова МРІ-програм?

8. Які виділяють види обмінів повідомленнями?

9. Які основні складові повідомлення?

10. Яка функція дає можливість визначити ранг (кількість) процесів?

11. Яка функція дає можливість передати повідомлення від одного процесу іншому?

12. Яка функція дає можливість отримати повідомлення від одного процесу до іншого?

Рекомендована література:

6. Антонов А.С. Параллельное программирование с использованием технологии МРІ.

7. Воеводин В. В., Воеводин Вл. В. Параллельные вычисления. – СПб.: БХВ-Петербург, 2002. – 608.

8. Гергель В.П. Теория и практика параллельных вычислений/Гергель В. П. – М.: ИНТУИР.РУ Интернет-Университет Информационных технологий, 2007.

9. Гергель В. П., Фурсов В.А. Лекции по параллельным вычислениям: учебное пособие – Самара: Изд-во Самар. гос.аерокосм. ун-та, 2009. – 164с.

10. Корнеев В. Д. Параллельное программирование в МРІ. – 2-е изд., испр. – Новосисбирск: Изд-во ИВМиМГ СО РАН 2002. – 215с.

 


Лабораторна робота №5
Тема 3.1. Паралельний алгоритм Флойда_Уоршела (4 год.)

Мета: ознайомити студентів з паралельним алгоритмом Флойда-Уоршела.

Професійна спрямованість: сприяє формуванню інтересу і схильності до професії.

І. Теоретичні відомості

1. Колективні операції передачі даних

1.1. Узагальнена передача даних від одного процесу всім процесам

Виконання даної операції може бути забезпечено за допомогою функції:

int MPI_Scatter (void * sbuf, int scount, MPI_Datatype stype, void * rbuf, int rcount, MPI_Datatype rtype, int root, MPI_Comm comm), де

· sbuf, scount, stype - параметри повідомлення, що передається (scount визначає кількість елементів, що передаються на кожен процес),

· rbuf, rcount, rtype - параметри повідомлення, що приймається в процесах,

· root - ранг процесу, що виконує розсилку даних,

· comm - комунікатор, в рамках якого виконується передача даних.

1.2. Узагальнена передача даних від всіх процесів одному процесу

Для виконання цієї операції в MPI призначена функція:

int MPI_Gather (void * sbuf, int scount, MPI_Datatype stype, void * rbuf, int rcount, MPI_Datatype rtype, int root, MPI_Comm comm), де

· sbuf, scount, stype - параметри повідомлення, що передається,

· rbuf, rcount, rtype - параметри повідомлення, що приймається,

· root - ранг процесу, що виконує збір даних,

· comm - комунікатор, у рамках якого виконується передача даних.

 







Дата добавления: 2015-10-01; просмотров: 1405. Нарушение авторских прав; Мы поможем в написании вашей работы!



Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

ТЕОРЕТИЧЕСКАЯ МЕХАНИКА Статика является частью теоретической механики, изучающей условия, при ко­торых тело находится под действием заданной системы сил...

Теория усилителей. Схема Основная масса современных аналоговых и аналого-цифровых электронных устройств выполняется на специализированных микросхемах...

ТРАНСПОРТНАЯ ИММОБИЛИЗАЦИЯ   Под транспортной иммобилизацией понимают мероприятия, направленные на обеспечение покоя в поврежденном участке тела и близлежащих к нему суставах на период перевозки пострадавшего в лечебное учреждение...

Кишечный шов (Ламбера, Альберта, Шмидена, Матешука) Кишечный шов– это способ соединения кишечной стенки. В основе кишечного шва лежит принцип футлярного строения кишечной стенки...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

ОЧАГОВЫЕ ТЕНИ В ЛЕГКОМ Очаговыми легочными инфильтратами проявляют себя различные по этиологии заболевания, в основе которых лежит бронхо-нодулярный процесс, который при рентгенологическом исследовании дает очагового характера тень, размерами не более 1 см в диаметре...

Примеры решения типовых задач. Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2   Пример 1.Степень диссоциации уксусной кислоты в 0,1 М растворе равна 1,32∙10-2. Найдите константу диссоциации кислоты и значение рК. Решение. Подставим данные задачи в уравнение закона разбавления К = a2См/(1 –a) =...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.014 сек.) русская версия | украинская версия