Кафедра інформатики КПНУ ім. І. Огієнка

Studies in tota vita

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

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

Розглянемо приклад реалізації алгоритму транспонування матриці для двохядерного процесора, в якому використовується технологія багатопоточності.

Опис та структура програми. Дана програма написана на мові програмування C++ в середовищі програмування Microsoft Visual Studio 2013. Програма транспонує квадратну матрицю довільної розмірності з використанням одного або двох потоків. На початку роботи, користувач вводить початкові дані, а саме: скільки використовувати потоків (1 чи 2) і розмірність квадратної матриці. Далі створюється квадратна матриця заданої розмірності шляхом заповнення генератором випадкових чисел. Після цього відбувається транспонування матриці. При завершенні транспонування, в консольному вікні виводиться час роботи алгоритму транспонування.

При транспонуванні з вико​ристанням двох потоків, матриця ділиться на дві частини (рис. 1), де кожний потік обробляє відповідну частину матриці.

Рис.1. Поділ матриці між двома потоками

Відповідно в результаті отримується транспонована матриця (рис. 2).

Рис.2. Результуюча транспонована матриця

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

Приклади роботи програми. Нижче, в таблиці 1 та на рис. 3, наведені отримані значення тривалості роботи алгоритму транспонування матриці  при одному і двох потоках, та різній розмірності квадратної матриці на двохядерній ЕОМ з процесором Intel® Core™ i3 CPUM 380 з частотою 2.53 GHz та операційною системою Windows 7 Professional x64.

Таблиця 1. Результати тривалості роботи програми
Кількість потоків Розмірність матриці
5000 10000 15000 20000 25000 30000 35000 40000
1 0.307 1.274 4.27 5.262 8.457 18.335 30.53 46.05
2 0.142 1.243 3.2 4.056 7.602 13.617 21.875 30.78
Рис.3. Графік залежності часу роботи програми від розмірності матриці при одному та двох потоках

Comments

Comments are closed on this post.