Дослідження базових операцій з потоками виконання
Комплексний озгляд основних операцій з потоками виконання. Використання неблокуючої паралелізації для вирішення найпростіших математичних задач, застосовуючи мову програмування 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