Skip to content

Solving an equation using OpenMP C++ and testing Amdahl's Law with diagrams

Notifications You must be signed in to change notification settings

Basselalshayeb2/amdahl-law-parallel

Repository files navigation

Matrix Computation with OpenMP

Студент

  • Имя: Bassel Alshayeb - Басель Альшаеб
  • ST: st123219

Task

d = <B4 x, y>/<x, y> - <B3 x, y>/<x, y>

Задание A-07 (Басель Альшаеб)
Написать программу вычисления выражения:
d = <B4 x, y>/<x, y> - <B3 x, y>/<x, y>,
где B – квадратная плотная матрица, элементы которой имеют тип double, элементы матрицы
задаются с помощью генератора псевдослучайных чисел, x и y – векторы (элементы задаются
псевдослучайными числами), <,> - скалярное произведение.
Распараллелить эту программу с помощью OpenMP (parallel, task).
Исследовать зависимость масштабируемости параллельной версии программы от ее
вычислительной трудоемкости (размера матриц).
Проверить корректность параллельной версии.
Проверка закона Амдала. Построить зависимость ускорение:число потоков для заданного
примера.
Срок сдачи отчета 26.11.2024.

Объяснение

Для анализа:

  • B — квадратная матрица.
  • X и Y — векторы.
  • <.,.>
  • Размер матрицы 1000 (для экстремального тестирования).

Программа поддерживает как последовательное выполнение, так и параллельное с использованием OpenMP. Реализована возможность использования данных из файла для проверки и верификации результатов.


Решение

1. Характеристики системы

Operating System: Ubuntu 22.04.4 LTS
Kernel: 5.15.0-122-generic
Processer: Intel(R) Xeon(R) E-2136 CPU @ 3.30GHz 
Cores: 12
Architecture: x86_64
Memory: 62 G
Disk Space: 6.3 G

2. Результаты измерений

  • Размер матрицы: 1000
  • Последовательное время выполнения: 36.2499 Seconds
  • Параллельное время выполнения:
Threads Execution Time Speedup
1 36.2499 1.0
2 18.7686 1.9329252048634422
4 9.43012 3.8470666332984096
8 7.51135 4.829797573006184
16 7.12646 5.090648091759443
32 7.01082 5.174615808136567

3. Python Output

python result

4. Speedup Diagram As Amdahl's Law

Amdahl's Comparison

5. Execution Manager

Execution Time VS Threads

Особенности

  • Поддержка ввода матрицы и векторов из файлов или генерация случайных данных.
  • Параллельные вычисления для умножения матриц и вычисления скалярных произведений с использованием OpenMP.
  • Верификация корректности параллельного выполнения через последовательное выполнение.

Требования

  • C++ Compiler with OpenMP Support
  • Python 3.10

Использование

1. Compilation \

Компиляция программы с поддержкой OpenMP main.cpp:

g++ -o main -fopenmp  main.cpp

2. Execution \

  • Для полного тестирования используется Python с предустановленными значениями количества потоков
[1, 2, 4, 8, 16, 32]
  • Запустите Python-скрипт для получения диаграмм и результатов
python3 analyzer.py
  • Либо запустите программу вручную, указав количество потоков
export OMP_NUM_THREADS=X
./main

3. Debugging \

To run sequentialy and check the speed for:

export OMP_NUM_THREADS=1 
./main

Вывод

  1. C++:
  • Печатает вычисленное значение 𝑑.
  • Показывает время выполнения и отладочные данные
  1. Python
  • Отображает результаты для каждого количества потоков.
  • Строит диаграммы зависимости ускорения от количества потоков.

About

Solving an equation using OpenMP C++ and testing Amdahl's Law with diagrams

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published