От Вас требуется написать последовательную версию алгоритма (seq) и параллельную версию (par). Взять случайный массив из 10^8 элементов и отсортировать. (Усреднить по 5 запускам) Сравнить время работы par на 4 процессах и seq на одном процессе - у Вас должно быть раза в 3 быстрее. (Если будет медленнее, то выставление баллов оставляется на моё усмотрение. Подготовьте хотя бы объяснение, почему Вы считаете, что работает плохо. А лучше вообще до этого не доводить.) Также нужно сопроводить тестами на корректность работы алгоритма. Это оставляю вам на самостоятельную разработку - считайте, что как на работе.
- C++20 компилятор
- CMake 3.17+
- 1.2GB+ свободной оперативной памяти
- Чтобы программе дано было столько оперативки
Сделано просто параллельность на уровне рекурсии с отсечением на маленькие размеры.
Была еще идея с тем, что если массив большой (а
| Run | Seq algo | Par algo |
|---|---|---|
| 1 | 38.05 | 11.32 |
| 2 | 36.28 | 12.76 |
| 3 | 40.85 | 10.17 |
| 4 | 40.15 | 15.23 |
| 5 | 47.13 | 14.27 |
| avg | 40.49 | 12.75 |
Speedup = 3.18
Снимок экрана прикрепил
С учетом, что main это уже своего рода стресс-тесты(там везде проверяется и корректность).
То test.cpp содержит маленькие unit-тесты (даже без Gtest с учетом масштаба🤭)
git clone https://github.com/cmuparlay/parlaylib.git third_party/parlaylib
Так можно, ибо это header only библиотека