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

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

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

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

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

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ ТРАНСПОРТНИЙ УНІВЕРСИТЕТ Кафедра інформаційних систем і технологій Лабораторна робота № 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:11-

Коментарі

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

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

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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