Системи проектування паралельних програм

Інформація про навчальний заклад

ВУЗ:
Національній Транспортний Університет
Інститут:
О
Факультет:
КН
Кафедра:
Кафедра інформаційних систем і технологій

Інформація про роботу

Рік:
2021
Тип роботи:
Лабораторна робота
Предмет:
Технології розподілених систем та паралельних обчислень

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ ТРАНСПОРТНИЙ УНІВЕРСИТЕТ Кафедра інформаційних систем і технологій Лабораторна робота № 1 з дисципліни «Технології розподілених систем та паралельних обчислень» на тему: «Системи проектування паралельних програм» Мета - дати уявлення про побудову простих паралельних програм на мові паралельного програмування MPI; уявлення про паралельних програмах, що настроюються на розмір обчислювальної системи, як на параметр; практичне освоєння функцій парних і колективних взаємодій між гілками паралельної програми. Методи розпаралелювання та моделі програм, підтримувані MPI. Найважливішою особливістю MPI є те, що користувач при написанні своїх паралельних програм не повинен враховувати архітектурні особливості конкретних мультикомп’ютерів, оскільки MPI надає користувачеві віртуальний мультикомп’ютер з розподіленою пам'яттю і з віртуальною мережею зв'язку між віртуальними комп'ютерами. Користувач замовляє кількість комп'ютерів, необхідних для вирішення його задачі, і визначає топологію зв'язків між цими комп'ютерами. MPI реалізує це замовлення на конкретній фізичній системі. Обмеженням є обсяг оперативної пам'яті фізичного мультикомп’ютера. Таким чином користувач працює у віртуальному середовищі, що забезпечує переносимість його паралельних програм. Система MPI являє собою бібліотеку засобів паралельного програмування для мов С та Fortran 77. Однією з цілей, переслідуваних при вирішенні завдань на обчислювальних системах, в тому числі і на паралельних, - є ефективність. Ефективність паралельної програми істотно залежить від співвідношення часу обчислень до часу комунікацій між комп'ютерами (при обміні даними). І чим менше в процентному відношенні частка часу, витраченого на комунікації, в загальному часу обчислень, тим більше ефективність. Для паралельних систем з передачею повідомлень оптимальне співвідношення між обчисленнями і комунікаціями забезпечують методи грубозернистого розпаралелювання, коли паралельні алгоритми будуються з великих і рідко взаємодіючих блоків. Завдання лінійної алгебри, завдання, які вирішуються сітковими методами і багато інших, досить ефективно розпаралелювати грубозернистими методами. Останню модель інакше можна назвати моделлю розпаралелювання за даними. Коротко, суть цього способу полягає в наступному. Вихідні дані завдання розподіляються по процесах (гілкам паралельного алгоритму), а алгоритм є одним і тим же у всіх процесах, але дії цього алгоритму розподіляються у відповідності з наявними в цих процесах даними. Розподіл дій алгоритму полягає, наприклад, у привласненні різних значень змінним одних і тих же циклів у різних гілках, або у виконанні в різних гілках різної кількості витків одних і тих же циклів і т.п. Іншими словами, процес у кожної гілки слід різними шляхами виконання на тій же самій програмі. Скрізь далі замість "паралельна програма" будемо писати скорочено: п-програма. ПРИКЛАД 1 Кожна гілка п-програми виводить на екран свій ідентифікаційний номер і розмір замовленої паралельної системи, тобто кількість віртуальних комп'ютерів, в кожен з яких завантажується гілку п-програми. # include <stdio.h> # include <mpi.h> int main(int argc, char** argv) { int size, rank; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); printf("SIZE =% d RANK =% d \n", size, rank); MPI_Finalize(); return (0); } ЗАВДАННЯ Скомпілювати та запустити програму прикладу 1 на 4-х комп’ютерах. ВИКОНАННЯ: / / ПРИКЛАД 2 Гілка з номером 0 пересилає дані (в даному випадку число 10) гілки з номером 3. Гілку 3 друкує на екран свій номер і прийняте число від нульової гілки. # include <stdio.h> # include <mpi.h> int main(int argc, char** argv) { int size, rank, a, b; MPI_Status st; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { a = 10; MPI_Send(&a, 1, MPI_INT, 3, 15, MPI_COMM_WORLD); } else { if(rank == 3) { MPI_Recv(&b, 1, MPI_INT, 0, 15, MPI_COMM_WORLD, &st); printf("Vetv =% d b =% d \n", rank, b); } } MPI_Finalize(); return (0); } ЗАВДАННЯ Скомпілювати і запустити програму прикладу 2 на 4-х комп'ютерах. ВИКОНАННЯ: / / ПРИКЛАД 3 Гілка з номером 0 пересилає дані (в даному випадку число 10) останньої гілки в безлічі запущених гілок. Остання гілка друкує на екран свій номер і прийняте число від нульової гілки. # include <stdio.h> # include <mpi.h> int main(int argc, char** argv) { int size, rank, a, b; MPI_Status st; MPI_Init(&argc, &argv); MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); if (rank == 0) { a = 10; MPI_Send(&a, 1, MPI_INT, size - 1, 15, MPI_COMM_WORLD); } else { if(rank == size - 1) { MPI_Recv(&b, 1, MPI_INT, 0, 15, MPI_COMM_WORLD, &st); printf("Vetv =% d b =% d \n", rank, b); } } MPI_Finalize(); return (0); } ЗАВДАННЯ Скомпілювати і запустити програму прикладу 3 на 4-х комп'ютерах. ВИКОНАННЯ: / /
Антиботан аватар за замовчуванням

29.11.2021 13:34

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!