# [Паралельне та розподілене програмування]()
[TOC]
# 1. Тестування паралельних програм на мобільних пристроях
## [Программа C++ Compiler для ОС Apple (провести тестування!)](https://apps.apple.com/ua/app/c-compiler-run-cpp-code/id1546361947?l=uk)
### Логотип

### Знімки екрану додатку

## Інформація
Постачальник OnePercent Software (OPC) Private Limited
Розмір 30,2 МБ
Категорія Освіта
Сумісність
iPhone -- Потрібна iOS 11.0 чи новішої версії.
iPad -- Потрібна iPadOS 11.0 чи новішої версії.
iPod touch -- Потрібна iOS 11.0 чи новішої версії.
Mac -- Потрібні macOS 11.0 або новішої версії та Mac із чіпом Apple M1 або новішої версії.
Мови Англійська
Ціна Безкоштовно
---
## Программа CPP N-IDE для ОС Андроїд

### Посилання для завантаження
[Посилання для завантаження](https://d.apkpure.com/b/APK/com.duy.c.cpp.compiler?version=latest)
### Версія 1.2.4-armeabi-v7a
### Опис CPP N-IDE
C/C++ компілятор для пристрою Android за допомогою GCC компілятора, без реклами, безкоштовно для використання
## Особливості
1. Офлайновий компілятор C
2. Офлайновий компілятор C++
3. Нативна активність, підтримка SDL2 для GUI
1. Створює виконуваний файл, експортує програму
2. Make 4.0, підтримка makefile, ви можете зібрати як на своєму ПК
3. Статичний аналіз коду, допомагає виправити "складні" помилки:
1) витоки пам'яті;
1) невідповідність розподілу та звільнення;
1) використання неініціалізованих змінних;
1) помилки індексу масиву поза межами.
4. Формат коду C/C++
5. Емулятор терміналу: повнофункціональний термінал
6. Підтримка Git, svn (встановлення за допомогою функцій плагіну Intall)
7. Діагностична утіліта: автоматичний перехід до помилкової позиції
8. Вихід компілятора: див. stdout, stderr
9. Підсвічування синтаксису: мова C/C++ і багато інших мов (лише підсвічування без компіляції)
10. [Приклади C/C++](https://www.programiz.com/cpp-programming/examples)
11. Файловий менеджер
12. Multi Tab, новий файл, відкрити, зберегти, зберегти як, скасувати/повторити, вставити деякі часто використовувані символи тощо. Змінити гарнітуру та розмір шрифту. Показати номери рядків. Регулярний пошук, заміна або заміна всіх, перемикач «Перенос слів», темні/світлі теми
### Скріншоти та відео
{%youtube KCX6zWjjBoA%}






---
CPU(s): 8
On-line CPU(s) list: 0-7
Thread(s) per core: 2
Яке прискорення можно очікувати від цього комп'ютера ?
---
# [2. Чисельні оцінки паралелізму у лабораторних роботах]([Прискорення](https://en.wikipedia.org/wiki/Analysis_of_parallel_algorithms))
## [Прискорення](https://en.wikipedia.org/wiki/Analysis_of_parallel_algorithms#:~:text=Speedup%20is%20the,.%5B6%5D)
**Прискорення $S$** — це міра, яка відображає переваги паралельного вирішення проблеми. Воно визначається як відношення часу, необхідного для розв'язання задачі на одному обробному елементі, $T_1$ (процесорах), до часу, необхідного для розв'язання тієї ж задачі на $p$ ідентичних обробних елементах, $T_p$.
Позначимо прискорення через
$$
S(p) = {T_1 \over T_p} ~~. \tag{1}
$$
.
Ми маємо лінійне прискорення, де якщо $S(p)-p=0$, це означає, що швидкість виконання зростає зі збільшенням кількості процесорів. Звичайно, це ідеальний випадок.
Повторимо ці умови:
$S(p) - p = 0$ — лінійне або ідеальне прискорення
$S(p) - p < 0$ — реальне прискорення
$S(p) - p > 0$ — надлінійне прискорення
## [Ефективність](https://en.wikipedia.org/wiki/Analysis_of_parallel_algorithms#:~:text=Efficiency%20is%20the%20speedup%20per%20processor%2C%20Sp%20/%20p.)
В ідеальному світі паралельна система з $p$ елементами обробки може дати нам прискорення, рівне $p$. Однак це вдається дуже рідко. Зазвичай деякий час витрачається або на байдикування і синхронізацію, або на спілкування між потоками. **Ефективність $E$** — це показник продуктивності, який оцінює, наскільки добре використовуються обладнання (процесори, потоки) для виконання завдання, порівняно з тим, скільки зусиль витрачається на зв’язок і синхронізацію.
Ми позначаємо її $E(p)$ і можемо визначити як
$$
E(p) = {S(p)\over p} = {T_1 \over p\cdot T_p}. \tag{2}
$$
Алгоритми з лінійним прискоренням мають значення $E(p) = 1$;
в інших випадках значення $E(p)< 1$.
Ці три випадки визначаються таким чином:
Коли $E(p) = 1$, це лінійний випадок;
Коли $E(p) < 1$, це реальний випадок;
Коли $E(p)<< 1$, це проблема, яка розпаралелюється з низькою ефективністю.
## Питання
1. Як зміниться формула (1), якщо ви тестуєте ваш паралельний додаток у обчислювальному середовищі з гетерегонними процесорами (наприклад, у мобільній архітектурі Big-Little)?
2. Які умови для надлінійного прискорення ?
3. Яке значення ефективності для надлінійного прискорення?
4. Чи може ефективність зростати зі збільшенням кількості процесорів? Чому?
5. Як можна визначити прискорення для двох різних типів величин: затримки та пропускної здатності ?
6. Який вид прискорення ви визначаєте у вашій роботі:
а) прискорення затримки;
б) прискорення пропускної здатності;
в) інше прискорення ? Чому?
7. Що таке віртуальне обладнання для паралельного програмування?
8. Якою командою можна оцінити кількість процесорів та потоків на комп'ютері, що надається Вам з хмари на хостингу replit.com
9. Як оцінити віртуальне обладнання, яке ви використовуєте на хостингу replit.com ?
11. Як оцінити інше обладнання, на якому ви тестуєте ваші паралельні програми ?
12. Як виправити Makefile, щоб він дозволяв виконувати паралельні програми з використанням технологій pthreads ?
13. Як виправити Makefile, щоб він дозволяв виконувати паралельні програми з використанням технологій openmp ?
## Помилки при побудові графіків
### Як називається такий тип графіків?
Як називається такий тип графіків і чому його слід подавати у звітах з лабораторних робіт та розрахунково-графічного завдання?

---
Як називається такий тип графіків і чому його слід подавати у звітах з лабораторних робіт та розрахунково-графічного завдання?

---
### У чому переваги та недолік такого графіка?
У чому переваги та недолік такого графіка?
Як це можна виправити?

# Посилання
1. [Speedup](https://en.wikipedia.org/wiki/Speedup)
2. [Прискорення (комп'ютерна архітектура)](https://uk.wikipedia.org/wiki/%D0%9F%D1%80%D0%B8%D1%81%D0%BA%D0%BE%D1%80%D0%B5%D0%BD%D0%BD%D1%8F_(%D0%BA%D0%BE%D0%BC%D0%BF%27%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D0%B0_%D0%B0%D1%80%D1%85%D1%96%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0))
3. [Parallel slowdown](https://en.wikipedia.org/wiki/Parallel_slowdown)
4. [Паралельне сповільнення](https://uk.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B5_%D1%81%D0%BF%D0%BE%D0%B2%D1%96%D0%BB%D1%8C%D0%BD%D0%B5%D0%BD%D0%BD%D1%8F)
5. [Parallel algorithm](https://en.wikipedia.org/wiki/Parallel_algorithm)
6. [Паралельний алгоритм](https://uk.wikipedia.org/wiki/%D0%9F%D0%B0%D1%80%D0%B0%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B8%D0%B9_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC)
7. [Analysis of parallel algorithms](https://en.wikipedia.org/wiki/Analysis_of_parallel_algorithms)
8. [Аналіз паралельних алгоритмів](https://uk.wikipedia.org/wiki/%D0%90%D0%BD%D0%B0%D0%BB%D1%96%D0%B7_%D0%BF%D0%B0%D1%80%D0%B0%D0%BB%D0%B5%D0%BB%D1%8C%D0%BD%D0%B8%D1%85_%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC%D1%96%D0%B2)