Автор работы: Пользователь скрыл имя, 24 Февраля 2014 в 12:01, курсовая работа
Розробити структуру та описати процедуру перемноження матриці А(розмірністю n1*n2) на матрицю В (розмірністю n2*n3) на заданій структурі. Для цієї структури визначити час виконання алгоритму, відсоток послідовної частини алгоритму та ефективність алгоритму для значень, що наведені в таблиці.
Для визначення завдання були виконані такі дії:
1. Визначення розмірів матриць. Для цього потрібно було провести декодування літер, які задавались згідно номеру групи:
n1=3П-"Х" , n2=2І-"O", n3=4Б-"H" – КІ-42
E = Tпос / (Tпар * P) = 6890742,4 / (4355674,4 * 8) ≈ 0,884
5. Розробка програми
5.1 Вибір середовища
Дана програма написана на мові C++. Для розробки самого паралельного алгоритму множення матриць було обрано шлях використання інтерфейсу передачі повідомлень (МРІ) між процесами, оскільки він має наступні можливості:
МРІ (Message Passing Interface) - програмний інтерфейс (API) для передачі інформації, який дозволяє обмінюватися повідомленнями між процесами, що виконують одну задачу. Розроблений Вільямом Гроуппом, Евін Ласко та іншими. MPI є найбільш поширеним стандартом інтерфейсу обміну даними в паралельному програмуванні, існують його реалізації для великого числа комп'ютерних платформ. Використовується при розробці програм для кластерів і суперкомп'ютерів. Основним засобом комунікації міжпроцесами в MPI є передача повідомлень один одному. Стандартизацією MPI займається MPI Forum. У стандарті MPI описаний інтерфейс передачі повідомлень, який повинен підтримуватися як на платформі, так і в додатках користувача. В даний час існує велика кількість безкоштовних і комерційних реалізацій MPI. Існують реалізації для мов Фортран 77/90, С та С++.
5.2 Опис використаних функційMPI
В МРІ функціях використовується поняття комунікатор. - це спеціально створений службовий об'єкт, який об'єднує групу процесів і ряд додаткових параметрів (контекст), використовуваних при виконанні операцій передачі даних.
При розробці програмного коду були використані наступні функції бібліотеки МРІ:
argc - вказівник на кількість параметрів командного рядка;
argv - параметри командного рядка.
Використовується для ініціалізації середовища виконання MPI-програми.
Завершує виконання МРІ програми.
comm - комунікатор, розмір якого визначається;
size - визначена кількість процесів в комунікаторі.
Визначає кількість процесів
у виконуваній паралельній
comm - комунікатор, в якому визначається ранг процесу;
rank - ранг процесу в комунікаторі.
Визначає ранг процесу.
Як правило, виклик функцій Mpi_comm_size і Mpi_comm_rank виконується відразу після Mpi_init для отримання загальної кількості процесів і рангу поточного процесу.
buf - адреса буфера пам'яті, в якому розташовуються дані повідомлення, що відправляється;
count - кількість елементів даних в повідомленні;
type - тип елементів даних повідомлення, що пересилається;
dest - ранг процесу, якому відправляється повідомлення;
tag - значення-тег, що використовується для ідентифікації повідомлення;
comm - комунікатор, в рамках якого виконується передача даних.
Викликається процесом-
buf, count, type - буфер пам'яті для прийому повідомлення, призначення кожного окремого параметра відповідає опису в MPI_Send.
source - ранг процесу, від якого повинен бути виконаний прийом повідомлення.
tag - тег повідомлення, яке повинне бути прийняте для процесу.
comm - комунікатор, в рамках якого виконується передача даних.
status - вказівник на структуру даних з інформацією про результат виконання операції прийому даних.
Дана функція викликається
процесом-отримувачем для
buf, count, type - буфер пам'яті для прийому повідомлення, призначення кожного окремого параметра відповідає опису в MPI_Send.
dest - ранг процесу, якому відправляється повідомлення;
sendtag - значення-тег, що використовується для ідентифікації повідомлення;
source - ранг процесу, від якого повинен бути виконаний прийом повідомлення.
recvtag - тег повідомлення, яке повинне бути прийняте для процесу.
comm - комунікатор, в рамках якого виконується передача даних.
status - вказівник на структуру даних з інформацією про результат виконання операції прийому даних.
Дана функція викликається процесом для одночасного відправлення повідомлення і прийому від іншого процесу. В ході виконання вміст буфера заміщається.
buf - адреса буфера пам'яті, в якому розташовуються дані повідомлення, що відправляється;
count - кількість елементів даних в повідомленні;
type - тип елементів даних повідомлення, що пересилається;
dest - ранг процесу, якому відправляється повідомлення;
tag - значення-тег, що використовується для ідентифікації повідомлення;
comm - комунікатор, в рамках якого виконується передача даних.
request - – вказівник на ідентифікатор комунікаційної події;
Викликається процесом-
request – вказівник на ідентифікатор комунікаційної події;
status - вказівник на структуру даних з інформацією про результат виконання операції прийому даних.
Дана функція викликається
процесом-передавачем при
count – кількість елементів в масиві ідентифікаторів;
array_of_requests – масив ідентифікаторів комунікаційних подій;
array_of_statuses - масив структур даних з інформацією про результат виконання операції прийому даних.
Дана функція викликається
процесом-передавачем при
Для елементів матриць був обраний цілий тип int, а у функціях передачі повідомлень МРІ використаний наслідуваний тип MPI_INT із мови С.
Всі вхідні матриці та вихідні
результуючі матриці
Код генератора вхідних матриць присутній на початку програми до МРІ частини коду і може бути використаний для генерації нових матриць та відповідних їм файлів.
5.3 Розробка загальної блок-схеми програми
Беручи за основу функціональну схему паралельного множення двох матриць із завантаження даних через один процесор (рис. 3.1), і виходячи із обраних програмних засобів реалізації паралельного алгоритму, було розроблено загальну блок-схему програми множення двох матриць.
Рис. 5.1 Загальна блок-схема програми множення двох матриць
Висновки
Під час виконання курсової роботи був розроблений алгоритм паралельного множення двох матриць та визначена ефективность розпаралелення. Загальний час виконання операцій при використані паралельного алгоритму рівний 4355674,4 * tw, тоді як час виконання послідовного алгоритму - 30817782,4 * tw, що в 7 разів більше. Враховуючи затрати часу, можна встановити, що множення і додавання – найбільш ресурсозатратні дії. Ефективність використання процесорів становить 88,4%, що є непоганим показником.
Паралельний алгоритм, який був розроблений у цій курсовій роботі є ефективним та може використовуватись, якщо у розподіленій комп’ютерній системі лише один процесор має доступ до інформації, необхідної для всієї системи.
Список використаної літератури
10. http://www.parallel.ru –
11. http://www.csa.ru –
12. http://www.hpc.nw.ru –
Информация о работе Паралельне виконання операцій множення матриць