Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

HPC-tasks

Лабораторные задания по курсу «Введение в суперкомпьютерные вычисления»

Исследование производительности параллельных вычислений (OpenMP и MPI)

🎯 Цель работы

Целью лабораторной работы является исследование масштабируемости и эффективности параллельных вычислений с использованием двух технологий:

  • OpenMP — для распараллеливания вычислений на уровне потоков
  • MPI — для распределённых вычислений между процессами.

Основная задача — экспериментально оценить:

  • ускорение вычислений (Speedup, S = T₁ / Tₚ)
  • эффективность параллелизации (Efficiency, E = S / p)
  • влияние размера задачи и количества потоков/процессов на производительность.

🧩 Структура проекта

│
├── OpenMP/
│   ├── src/                # Исходники задач на C++ (OpenMP)
│   ├── include/            # Заголовочные файлы
│   ├── results/            # CSV-файлы с результатами экспериментов
│   ├── config.json         # Конфигурация тестов 
│   └── Makefile            # Сборка и запуск OpenMP
│
├── MPI/
│   ├── src/                # Исходники задач на Python (MPI)
│   ├── results/            # CSV-файлы с результатами MPI
│   ├── config.json         # Конфигурация MPI-задач
│   └── run_mpi_tasks.py    # Менеджер запуска MPI-тестов
│
├── plot_all_results.py     # Универсальный скрипт для построения графиков
└── README.md               # Текущий файл

"Пример запуска"

Результаты сохраняются в соответствующие CSV-файлы (results/taskX_*.csv), после чего графики можно построить с помощью:

python3 plot_all_results.py

📊 Задачи и результаты

🧠 Задача 1 — Нахождение минимума/максимума массива

Необходимо найти минимальное и максимальное значение в массиве случайных чисел. Распараллеливание производится по блокам данных.

При небольших размерах массива (N = 10³, 10⁵) выигрыш минимален из-за накладных расходов на создание потоков. При увеличении N до 10⁷–10⁹ параллелизация даёт ускорение, однако эффективность падает с ростом числа потоков из-за синхронизации при редукции (операция min/max требует сравнения всех элементов).

Графики:

MPI

OpenMPß

Время выполнения растёт почти линейно с увеличением размера задачи. Ускорение достигает пика при 4–8 потоках, затем выходит на плато. Эффективность падает по мере роста потоков, что указывает на saturating scaling.

🧠 Задача 2 - Скалярное произведение векторов

Рассчитывается сумма произведений элементов двух векторов:

$$ R = \sum_{i=1}^{N} a_i \cdot b_i $$

OpenMP выполняет редукцию (reduction(+:result)), MPI — распределяет фрагменты между процессами и собирает результат через allreduce.

Графики:

MPI

OpenMPß

Время выполнения уменьшается почти обратно пропорционально числу потоков до 8, затем замедление. Ускорение при 2–4 потоках рост близок к линейному, при дальнейшем увеличении — насыщение. Эффективность >1 для N=10⁷ при малом числе потоков (эффект кэширования), затем плавное снижение.

About

Лабораторные задания по курсу «Введение в суперкомпьютерные вычисления»

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages