Skip to content

BITree2004/CW1

Repository files navigation

CW1

Задача

От Вас требуется написать последовательную версию алгоритма (seq) и параллельную версию (par). Взять случайный массив из 10^8 элементов и отсортировать. (Усреднить по 5 запускам) Сравнить время работы par на 4 процессах и seq на одном процессе - у Вас должно быть раза в 3 быстрее. (Если будет медленнее, то выставление баллов оставляется на моё усмотрение. Подготовьте хотя бы объяснение, почему Вы считаете, что работает плохо. А лучше вообще до этого не доводить.) Также нужно сопроводить тестами на корректность работы алгоритма. Это оставляю вам на самостоятельную разработку - считайте, что как на работе.

Требования к пк

  • C++20 компилятор
  • CMake 3.17+
  • 1.2GB+ свободной оперативной памяти
  • Чтобы программе дано было столько оперативки

Реализация

Сделано просто параллельность на уровне рекурсии с отсечением на маленькие размеры. Была еще идея с тем, что если массив большой (а $10^8$ как-будто достаточно), то можно еще добавить параллельное разбиение на два массива. Благо в parlay есть par filter. Но почему-то это лишь замедлило... Но раз были достигнуты целевые показатели, то я отказался от данной идеи.

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 $\geq 3$

Снимок экрана прикрепил

Тесты

С учетом, что main это уже своего рода стресс-тесты(там везде проверяется и корректность).

То test.cpp содержит маленькие unit-тесты (даже без Gtest с учетом масштаба🤭)

Перед запуском сделайте:

git clone https://github.com/cmuparlay/parlaylib.git third_party/parlaylib

Так можно, ибо это header only библиотека

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors