Дослідження базових операцій з потоками виконання

Комплексний озгляд основних операцій з потоками виконання. Використання неблокуючої паралелізації для вирішення найпростіших математичних задач, застосовуючи мову програмування C++. Дослідження та оцінювання ефективності паралелізації алгоритму.

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык украинский
Дата добавления 06.09.2023
Размер файла 375,5 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Лабораторна робота

Дослідження базових операцій з потоками виконання

Мета роботи: Розглянути основні операції з потоками виконання, навчитися використовувати неблокуючу паралелізацію для вирішення найпростіших математичних задач, використовуючи мову програмування C++. Навчитися досліджувати та оцінювати ефективність паралелізації алгоритму.

Варіант 1. Створити вектор з N>=10000 елементами з випадкових чисел. Знайти норму

Завдання:

1. Визначити основні характеристики ПК, котрі вливають на ефективність виконання паралельних обчислень. Зафіксувати значення даних характеристик для ПК студента.

Процесор: Intel(R) Core(TM) i5-9300H CPU @ 2.40GHz 2.40 GHz;

RAM: 16 ГБ 2667 MHz;

Версія ОС: Windows 11 Pro, версія 22H2

2. Створити механізм, котрий може бути використаний для заміру часу виконання програми, або інших параметрів, котрі студент вважає релевантними.

У C++ існує бібліотека <chrono>, яка дозволяє вимірювати час виконання програми та інші параметри. Для вимірювання часу виконання фрагменту коду використаємо клас std::chrono::high_resolution_clock.

3. Вирішити обрану за варіантом задачу, не використовуючи паралелізацію. Заміряти час вирішення задачі, або інші параметри, котрі студент вважає релевантними.

Лістинг програми наведено у додатку А. Результат роботи виконання програми з використанням 1-го потоку для вектора розмірністю 10000 наведено на рисунку 1.

Рисунок 1. Результат виконання програми з використанням 1-го потоку

4. Вирішити обрану за варіантом задачу, використовуючи паралелізації. Заміряти час вирішення задачі, або інші параметри, котрі студент вважає релевантними. Обґрунтувати вибір алгоритму паралелізації.

Результат виконання програми з використанням 2 потоків для вектора розмірністю 10000 наведено на рисунку 2.

Рисунок 2. Результат виконання програми з використанням 2 потоків

Отже, час виконання програми зменшився.

5. Повторити пункт 4 з використання різної кількості процесів виконання. Обов'язково перевірити виконання задачі на фіксованих кількостях потоків: 2-рази меншій, ніж кількість фізичних ядер, на кількості рівній фізичним ядрам, на кількості рівній логічних ядрам, на кількості більшій в 2, 4, 8, 16 разів ніж кількість логічних ядер.

Кількість потоків: 2

Час виконання 0.0101 сек

Кількість потоків: 4

Час вирішення: 0,0093 сек

Кількість потоків: 8

Час вирішення 0,0054 сек

Кількість потоків: 16

Час вирішення 0,0066 сек

Кількість потоків: 32

Час вирішення 0,0091 сек

Кількість потоків: 64

Час вирішення 0,0129 сек

Кількість потоків: 128

Час вирішення 0,0226 сек

6. Повторити пункт 5 з використанням різної розмірності даних, в залежності від обраної задачі.

Вектор 50000

Кількість потоків: 1

Час виконання 0.0052 сек

Кількість потоків: 2

Час виконання 0.0035 сек

Кількість потоків: 4

Час вирішення: 0,053 сек

Кількість потоків: 8

Час вирішення 0,0052 сек

Кількість потоків: 16

Час вирішення 0,063 сек

Кількість потоків: 32

Час вирішення 0,0093 сек

Кількість потоків: 64

Час вирішення 0,0136 сек

Кількість потоків: 128

Час вирішення 0,0264 сек

Вектор 1000000

Кількість потоків: 1

Час виконання 0.0096 сек

Кількість потоків: 2

Час виконання 0.0088 сек

Кількість потоків: 4

Час вирішення: 0,0069 сек

Кількість потоків: 8

Час вирішення 0,0064 сек

Кількість потоків: 16

Час вирішення 0,0070 сек

Кількість потоків: 32

Час вирішення 0,0087 сек

Кількість потоків: 64

Час вирішення 0,0151 сек

Кількість потоків: 128

Час вирішення 0,0233 сек

7. Заповнити таблицю й зробити графік часу виконання завдання від кількості потоків для різної розмірності.

Розмірність вектора

N = 10000

N = 50000

N = 1000000

1 потік, ms

12,8

5,2

9,6

2 потоки, ms (кількість фізичних ядер / 2)

10,1

3,5

8,8

4 потоки, ms (кількість фізичних ядер 2)

9,3

5,3

6,9

8 потоків, ms (кількість логічних ядер)

5,4

5,2

6,4

16 потоків, ms

6,6

6,3

7

32 потоки, ms

9,1

9,3

8,7

64 потоки, ms

12,9

13,6

15,1

128 потоків, ms

22,6

26,4

23,3

Рисунок 3. Графік часу виконання програми від кількості потоків для різної розмірності вектора

Висновки

У ході виконання лабораторної роботи було розроблено алгоритми паралелізації для роботи з векторами. Проаналізовано залежність часу виконання програми від кількості потоків та розмірності вектору. Емпіричним шляхом встановлено, що ефективність роботи алгоритму паралелізації досягається при кількості потоків рівній кількості логічних ядер. Роботу виконано за допомогою стандартних функцій мови програмування C++.

Додаток А

неблокуючий паралелізація програмування алгоритм

Лістинг програми

#include <thread>

#include <iostream>

#include <chrono>

#include <mutex>

using std::chrono::duration_cast;

using std::chrono::high_resolution_clock;

using std::chrono::nanoseconds;

using namespace std;

static const int threads_num = 1;

static const int n = 10000;

int vector1[n];

int norm_inf = 0;

std::mutex mtx;

void task(int start)

{

int local_max = 0;

for (int i = start; i < n; i += threads_num)

{

local_max = std::max(local_max, abs(vector1[i]));

}

mtx.lock();

norm_inf = std::max(norm_inf, local_max);

mtx.unlock();

}

int main()

{

for (int i = 0; i < n; i++)

{

vector1[i] = rand() % 100;

}

auto task_begin = high_resolution_clock::now();

thread threads[threads_num];

for (int i = 0; i < threads_num; i++)

{

threads[i] = std::thread(task, i);

}

for (int i = 0; i < threads_num; i++)

{

threads[i].join();

}

auto task_end = high_resolution_clock::now();

auto elapsed = duration_cast<nanoseconds>(task_end - task_begin);

std::printf("Processing Time: %.4f seconds.\n", elapsed.count() * 1e-9);

return 0;

}

Размещено на Allbest.ru

...

Подобные документы

  • Основні визначення дослідження операцій. Модель "затрати-випуск" В.В. Леонтьєва. Загальний вигляд задачі лінійного програмування. Розв'язання за допомогою симплекс-методу. Економічна інтерпретація основної та спряженої задач. Поліпшення плану перевезень.

    учебное пособие [1,1 M], добавлен 27.12.2010

  • Операція алгебраїчного додавання, множення, ділення. Алгоритм ділення модулів чисел. Поняття граф-схеми алгоритму та правила її складання. Основні поняття теорії цифрових автоматів. Синтез керуючого автомата. Контроль виконання арифметичних операцій.

    реферат [55,4 K], добавлен 24.03.2009

  • Вивчення базових засобів об'єктно-орієнтованих мов програмування і отримання навичок постановки і вирішення різних завдань за допомогою ПЕОМ. Дослідження практичних навичок використання науково-технічної та нормативної літератури. Вибір електродвигунів.

    курсовая работа [3,6 M], добавлен 29.03.2023

  • Галузі застосування та принцип роботи мови програмування "Пролог". Керування процесом пошуку рішень, типи даних та використання списків. Рекурсивні процедури та цикли за допомогою пошуку з поверненням. Виконання арифметичних та логічних операцій.

    курс лекций [99,7 K], добавлен 06.07.2011

  • Розробка програмних модулів базових операцій обробки на підставі розрядно-логарифмічного кодування. Дослідження алгоритму розв'язку системи лінійних алгебраїчних рівнянь. Реалізація алгоритму Гауса. Покращення точності розрахунків за допомогою рл-чисел.

    курсовая работа [427,2 K], добавлен 20.11.2013

  • Математичний опис задачі виконання символьних операцій з многочленами, розробка алгоритмів її реалізації і сама реалізація на одній з версій алгоритмічної мови Pascal, контрольна перевірка правильності. Тестування програми на екстремальних вхідних даних.

    контрольная работа [24,1 K], добавлен 20.09.2010

  • Автоматизація виконання операцій на робочих місцях. Розробка програми "Арифметичний калькулятор", що буде дозволяти обраховувати різноманітні арифметичні операцій (додавання, віднімання, ділення, множення). Тестування програми і результати її виконання.

    курсовая работа [226,1 K], добавлен 05.05.2014

  • Класифікація системи за всіма видами класифікаторів. Графічне представлення узагальненої моделі системи. Дослідження операцій в системі. Класифікація основних умов функціонування системи за факторами, що впливають на здійснення визначеної операції.

    курсовая работа [418,8 K], добавлен 01.06.2013

  • Використання графічного методу і симплекс-методу при вирішенні задач лінейного програмування. Сутність двоякого симплекс-методу і М-методу, приклади використання. Аналіз методу динамичного програмування. Специфіка вирішення матричної, антагоністичної гри.

    контрольная работа [1,1 M], добавлен 02.07.2011

  • Визначення основних математичних понять по роботі із 3D-графікою і операцій над векторами і матрицями. Алгоритм видалення невидимих ребер та граней при побудові непрозорих об'єктів за допомогою модуля Graph 3D. Методи програмування анімації і спрайтів.

    курсовая работа [345,0 K], добавлен 16.09.2010

  • Розробка автоматизованої системи навчання. Операції над простими типами в середовищі Delphі. Прості типи даних. Арифметичні операції і операції відношення. Виконання логічних операцій. Черговість виконання операцій. Строкові операції отримання адреси.

    курсовая работа [2,4 M], добавлен 04.05.2013

  • Проектування ієрархії класів геометричних об'єктів: точка, проста фігура, композиційна фігура, представлені частиною вершин і способами розрахунку інших вершин і ключових точок. Виконання операцій в різних системах координат з геометричними фігурами.

    курсовая работа [958,1 K], добавлен 16.02.2013

  • Демонстрування можливостей використання калькулятора для матриць. Розробка програми, яка може бути використана для виконання основних арифметичних операцій над матрицями та для перевірки обчислень у розрахункових роботах. Алгоритм створення програми.

    курсовая работа [43,2 K], добавлен 12.12.2009

  • Операція: поняття, класифікація, склад та зміст типових технологічних операцій та організація їх виконання в економічних інформаційних системах. Технологія створення і ведення інформаційних масивів. Використання СУБД Ассеss для обробки даних по товару.

    контрольная работа [35,4 K], добавлен 27.07.2009

  • Поняття черги в програмуванні, основні операції з чергою і їх реалізація. Опис алгоритму й специфікація програми. Розробка додатку з використанням задачі Ларсона по опису зв'язного неорієнтованого графа. Алгоритм розв’язку і результати виконання програми.

    курсовая работа [1,1 M], добавлен 14.09.2012

  • Поняття про суперкомп’ютери та їх спеціалізація. Приклади виконання векторних операцій на мові Паскаль. Організація векторних обчислень. Векторний співпроцесор IBM 3090. Застосування конвеєрного арифметико-логічного пристрою для операцій з векторами.

    реферат [22,8 K], добавлен 08.09.2011

  • Поняття та класифікація технологічних операцій, їх склад і зміст, порядок організації їх виконання в економічних інформаційних системах. Технологія створення і ведення інформаційних масивів. Методика обробки інформації з ціноутворення та прибутків.

    реферат [34,8 K], добавлен 27.07.2009

  • Програма на мові програмування С++. Аналіз стану технологій програмування та обґрунтування теми. Розробка програми виконання завдання, методу вирішення задачі. Робота з файлами, обробка числової інформації і робота з графікою. Розробка програми меню.

    курсовая работа [41,0 K], добавлен 17.02.2009

  • Мінімізація часу виконання задачі за рахунок розподілу навантаження між декількома обчислювальними пристроями, паралельна модель програмування. Процес розробки паралельного алгоритму. Забезпечення комунікацій між підзадачами, забезпечення надійності.

    контрольная работа [170,3 K], добавлен 29.06.2010

  • Переваги та недоліки потоків в програмуванні в Delphi. Перемикання між процесами і потоками, реалізація багатопотокового додатку. Дочірній процес та сповіщення про зміну у файловій системі. Механізм перезапуску потоку при зміні обстежуваної теки.

    реферат [56,5 K], добавлен 19.06.2010

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.