projects:libcds:tasks
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
projects:libcds:tasks [2018/10/27 16:09] – kel | projects:libcds:tasks [2019/02/04 20:12] (current) – kel | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Алгоритмы для доработки в libcds ====== | ====== Алгоритмы для доработки в libcds ====== | ||
- | ===== Профилирование и поиск ошибок ===== | + | ===== Требования к реализации ===== |
- | Найти, обосновать и исправить не менее | + | //К следующему семестру более явно написать формулировки пп. 4 и 9// |
- | - Valgrind // | + | - Pull Request должен быть сливаем с текущей master-веткой репозитория |
- | - Intel Parallel Studio | + | - Отсутствие закомментированных |
- | - Google Thread Sanitizer... | + | - Код написан в стиле и стандарте кодирования |
+ | - Написан набор модульных и стресс-тестов (если структура данных стандартная, | ||
+ | - Поддерживается интерфейс сбора статистики по контейнеру, если таковой есть в библиотеке для | ||
+ | - Сборка и прогон тестов с активированными Address и Undefined Behavior Sanitizers не выдаёт никаких ошибок (" | ||
+ | - Тесты | ||
+ | - Тесты проанализированы сторонним средством поиска | ||
+ | - После выполнения вышеуказанных пунктов ветка добавляется в CI и на всех поддерживаемых платформах все тесты проходят успешно | ||
- | ===== Алгоритмы ===== | + | ===== Нереализованные ===== |
==== [2011] Bar-Nissan, Hendler, Suissa. A dynamic elimination-combining stack algorithm.pdf ==== | ==== [2011] Bar-Nissan, Hendler, Suissa. A dynamic elimination-combining stack algorithm.pdf ==== | ||
// | // | ||
Line 14: | Line 20: | ||
- Распределения динамической памяти (allocation) под структуры multiOp быть не должно. Лучшим вариантом будет, если multiOp создаются на стеке, но в этом случае могут быть серьезные проблемы с временем жизни, - обращение к разрушенным данным и пр. | - Распределения динамической памяти (allocation) под структуры multiOp быть не должно. Лучшим вариантом будет, если multiOp создаются на стеке, но в этом случае могут быть серьезные проблемы с временем жизни, - обращение к разрушенным данным и пр. | ||
- Центральный стек — алгоритм Трейбера. Будет здорово, | - Центральный стек — алгоритм Трейбера. Будет здорово, | ||
- | |||
- | ==== [2014] Henzinger, Kirsch, Payer, Sezgin, Sokolova Quantitative Relaxation of Concurrent Data Structures.pdf ==== | ||
- | |||
- | // | ||
- | |||
- | Сегментированный стек. В статье приводится псевдокод для tagged pointers (указатель + версия). Следует реализовать его на Hazard Pointer, intrusive и stl-like версию. Размер сегмента — степень двойки, | ||
- | |||
- | ==== [2010] Gidenstam, | ||
- | |||
- | // | ||
- | |||
- | Также: А также: [2010] Gidenstam, | ||
- | |||
- | ==== [2003] Michael CAS-Based Lock-Free Algorithm for Shared Deques.pdf ==== | ||
- | |||
- | // | ||
- | |||
- | Реализовать описанный в статье алгоритм bounded deque. SMR здесь не требуется, | ||
- | |||
- | ==== [2003] Gao, Groote, Hesselink Efficient almost wait-free parallel accessible dynamic Hashtables.pdf ==== | ||
- | |||
- | // | ||
- | |||
- | Интересный алгоритм open-addressing hash table. Следует сделать intrusive-вариант: | ||
- | Алгоритм описан достаточно хорошо, | ||
- | Замечания: | ||
- | - Понять, | ||
- | * < a := b > => atomic load, atomic store | ||
- | * < if a == 0 then a := b > => a.CAS( 0, b ) | ||
- | - Псевдокод описан в предположении, | ||
- | - К данным, | ||
- | |||
- | Развитие: | ||
==== [2005] Purcell, Harris Non-blocking Hashtables with open addressing.pdf ==== | ==== [2005] Purcell, Harris Non-blocking Hashtables with open addressing.pdf ==== | ||
Line 59: | Line 32: | ||
Ещё одна реализация skip-list. Алгоритм интересен тем, что на нулевом уровне узлы связаны в double-linked list. Авторы не говорят, | Ещё одна реализация skip-list. Алгоритм интересен тем, что на нулевом уровне узлы связаны в double-linked list. Авторы не говорят, | ||
- | |||
- | ==== [2010] Ellen, | ||
- | |||
- | // | ||
- | |||
- | В libcds уже есть HP- и RCU-based реализации (без helping' | ||
==== [2011] Brown,Helga Non-blocking k-ary Search Trees.pdf ==== | ==== [2011] Brown,Helga Non-blocking k-ary Search Trees.pdf ==== | ||
Line 125: | Line 92: | ||
Интересный алгоритм open-addressing hash table. Похож на Cuckoo hashing, реализация которого есть в libcds. | Интересный алгоритм open-addressing hash table. Похож на Cuckoo hashing, реализация которого есть в libcds. | ||
+ | |||
+ | ==== [2010] Ellen, | ||
+ | > // | ||
+ | > [[https:// | ||
+ | |||
+ | В libcds уже есть HP- и RCU-based реализации (без helping' | ||
==== A.Williams “C++ Concurrency in Action” - lock-free очередь на shared_ptr ==== | ==== A.Williams “C++ Concurrency in Action” - lock-free очередь на shared_ptr ==== | ||
Line 143: | Line 116: | ||
Перспективный алгоритм построения lock-free стека, очереди, | Перспективный алгоритм построения lock-free стека, очереди, | ||
+ | |||
+ | ==== [2003] Gao, Groote, Hesselink Efficient almost wait-free parallel accessible dynamic Hashtables.pdf ==== | ||
+ | > // | ||
+ | > [[https:// | ||
+ | |||
+ | Интересный алгоритм open-addressing hash table. Следует сделать intrusive-вариант: | ||
+ | Алгоритм описан достаточно хорошо, | ||
+ | Замечания: | ||
+ | - Понять, | ||
+ | * < a := b > => atomic load, atomic store | ||
+ | * < if a == 0 then a := b > => a.CAS( 0, b ) | ||
+ | - Псевдокод описан в предположении, | ||
+ | - К данным, | ||
+ | |||
+ | Развитие: | ||
+ | |||
+ | ==== [2010] Gidenstam, | ||
+ | > // | ||
+ | > [[https:// | ||
+ | |||
+ | Также: А также: [2010] Gidenstam, | ||
+ | |||
+ | ==== [2014] Henzinger, Kirsch, Payer, Sezgin, Sokolova Quantitative Relaxation of Concurrent Data Structures.pdf ==== | ||
+ | > // | ||
+ | > [[https:// | ||
+ | |||
+ | Сегментированный стек. В статье приводится псевдокод для tagged pointers (указатель + версия). Следует реализовать его на Hazard Pointer, intrusive и stl-like версию. Размер сегмента — степень двойки, | ||
===== Реализованные ===== | ===== Реализованные ===== | ||
+ | ==== [2003] Michael CAS-Based Lock-Free Algorithm for Shared Deques.pdf ==== | ||
+ | > // | ||
+ | > [[https:// | ||
+ | Реализовать описанный в статье алгоритм bounded deque. SMR здесь не требуется, |
projects/libcds/tasks.1540645799.txt.gz · Last modified: 2018/10/27 16:09 by kel