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