Внимание

За задание можно получить до 5 баллов, соблюдая следующие условия:

  • Написано на C++ ( + 2 балла)
  • Задание зачтено ( +3 балла)

В отчете должно быть указано следующие:

  1. Титульный лист, где указаны ФИО преподавателя, номер задания, номер варианта
  2. Формулировка задания
  3. Ссылка на github-репозиторий с работающим кодом
  4. В конце работы приводятся реальные замеры на вашем ЭВМ в виде таблицы 1 и графика
  5. Сопоставить график из работа 3 и график из работы 4
  6. Рассчитать коэффициент ускорения. Результаты внести в таблицу 2. (см. Коэффициент ускорения для многопоточной быстрой сортировки)
  7. Сделать выводы относительно ускорения. Праивльно ли вами был подобран N?
  8. Для реализации С++ (реже python) если будет использован mutex, дать описание что это такое и как он работает. Также вы можете реализовать используя Omp (OpenMP), но в таком случае от вас также требуется описание работы. В своей параллельной схеме я не вижу необходимости в использовании вышеуказанных средств, но вдруг кто-то увидит.

Пример таблицы 1 (2,4, 8 потоки, БС - быстрая сортировка, БС_П - быстрая сортировка параллельная)

Размер массиваБС (сек)БС_П 2 потока (сек)БС_П 4 потока (сек)БС_П 8 потока (сек)
100хххххххххххх
1000хххххххххххх
10000хххххххххххх
20000хххххххххххх
30000хххххххххххх
40000хххххххххххх
50000хххххххххххх

1 Паралельная схема

  1. Функция quicksort реализуется аналогично практике 6, за исключением ввода нового параметра num_threads - количество потоков
  2. Фиксируется N - длина массива, если массив большой, то происходит Параллельная обработка подмассивов если достаточно потоков
  3. Если подмассивы достаточно маленькие, сортируем их с помощью стандартной сортировки

2 Коэффициент ускорения для многопоточной быстрой сортировки

Для расчёта коэффициента ускорения используем следующую формулу:

3 Формула для коэффициента ускорения (Speedup):

Speedup = frac{Время для обычной сортировки}{Время для многозадачной сортировки}

4 Шаги для расчёта коэффициента ускорения:

  1. Для каждого теста (для каждого размера массива):
    • Найдите время выполнения обычной сортировки (Normal quicksort time).
    • Найдите время выполнения многозадачной сортировки для каждого количества потоков (Multithreaded quicksort time for N threads).
  2. Расчитайте коэффициент ускорения для каждого количества потоков:
    • Используйте формулу выше, подставив значения для обычной и многозадачной сортировки.

5 Пример расчёта:

Для массива из 100 элементов:

  • Время для обычной сортировки: 1.46e-05 секунд.
  • Время для многозадачной сортировки с 2 потоками: 7.1e-06 секунд.
  • Время для многозадачной сортировки с 4 потоками: 5.4e-06 секунд.
  • Время для многозадачной сортировки с 8 потоками: 7.4e-06 секунд.

Коэффициенты ускорения:

  • Для 2 потоков:
    Speedup2 = (1.46e-05 / 7.1e-06) ≈ 2.06
  • Для 4 потоков:
    Speedup4 = (1.46e-05 / 5.4e-06) ≈ 2.70
  • Для 8 потоков:
    Speedup8 = (1.46e-05 / 7.4e-06) ≈ 1.97

6 Таблица 2. Коэффициенты ускорения для всех тестов:

Размер массиваВремя обычной сортировки (с)Время сортировки с 2 потоками (с)Время сортировки с 4 потоками (с)Время сортировки с 8 потоками (с)Speedup (2 потока)Speedup (4 потока)Speedup (8 потока)
1001.46e-057.1e-065.4e-067.4e-062.062.701.97
10000.00018025.37e-056.45e-055.23e-053.352.793.44
100000.00328460.00093140.00087850.00083133.533.743.95
200000.00530280.00186310.00181220.00185892.842.922.85
300000.00776760.00529550.00243910.00239031.473.183.24
400000.01040270.00316280.00273410.00292743.293.813.55
500000.01323610.00355790.00341210.0039223.733.883.37

Коэффициент ускорения позволяет оценить, насколько быстрее работает многозадачная версия алгоритма по сравнению с обычной версией. Как видно из таблицы, ускорение значительно варьируется в зависимости от размера массива и числа потоков. Например, для массива из 1000 элементов скорость увеличивается с 3.35 для 2 потоков до 3.44 для 8 потоков, но для более крупных массивов ускорение может снижаться из-за накладных расходов на создание и управление потоками.

Примечание : данная таблица посчитана для C++. на Python результаты могут быть иными. Подозреваю, что Speedup у вас будет в таком случае напротив меньше 1.

Навигация
Содержание