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 [2017/02/25 14:59] – 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 15: | Line 21: | ||
| - Центральный стек — алгоритм Трейбера. Будет здорово, | - Центральный стек — алгоритм Трейбера. Будет здорово, | ||
| - | ==== [2014] Henzinger, Kirsch, Payer, Sezgin, Sokolova Quantitative Relaxation of Concurrent Data Structures.pdf ==== | + | ==== [2005] Purcell, Harris Non-blocking Hashtables with open addressing.pdf ==== |
| - | // | + | // |
| - | Сегментированный стек. В статье приводится псевдокод для tagged pointers (указатель + версия). Следует | + | Еще одна разновидность open-addressing hash table. Алгоритм не описывает расширение таблицы, |
| - | ==== [2010] Gidenstam,Sundell,Tsigas Cache-Aware Lock-free Queues for Multiple Producers-Consumers and Weak Memory Consistency.pdf ==== | + | ==== [2012] Crain,Gramoli,Raynal A Contention-Friendly, Non-Blocking Skip List.pdf ==== |
| - | // | + | // |
| - | Также: А также: [2010] Gidenstam, | + | Ещё одна реализация skip-list. Алгоритм интересен тем, что |
| - | ==== [2013] Henzinger,Payer, | + | ==== [2011] Brown,Helga Non-blocking k-ary Search Trees.pdf ==== |
| - | // | + | // |
| - | Мне этот | + | Развитие подхода [2010] Ellen, |
| - | ==== [1995] Valois Lock-Free Linked Lists Using Compare-and_Swap.pdf ==== | + | ==== [2012] Afek, |
| - | // | + | // |
| - | Эта работа, | + | [2012] Korenfeld CBTree - A Practical Concurrent Self-Adjusting Search Tree.pdf |
| + | Разновидность самобалансирующегося дерева, построенного с использованием техники hand-over-hand locking. Проанализировать, какой SMR подходит (HP, RCU, оба), либо же алгоритм | ||
| - | ==== [2003] Michael CAS-Based Lock-Free | + | ==== [2011] Prokopec, |
| - | // | + | // |
| - | Реализовать описанный в статье алгоритм bounded deque. SMR здесь не требуется, | + | [2011] Prokopec,Bagwell,Odersky Lock-Free Resizable Concurrent Tries.pdf |
| - | + | [2011] Prokopec,Bronson,Bagwell,Odersky Concurrent Tries with Efficient Non-Blocking Snapshots.pdf | |
| - | ==== [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 ==== | + | |
| - | + | ||
| - | // | + | |
| - | + | ||
| - | Еще одна разновидность open-addressing hash table. Алгоритм не описывает расширение таблицы, | + | |
| + | ===== Требующие доработки ===== | ||
| ==== [2007] Herlihy, Lev, Luchangco, Shavit A Provably Correct Scalable Concurrent Skip List .pdf ==== | ==== [2007] Herlihy, Lev, Luchangco, Shavit A Provably Correct Scalable Concurrent Skip List .pdf ==== | ||
| - | + | > // | |
| - | // | + | > [[https:// |
| Skip-list, основанный на fine-grained locks (блокировка на уровне элементов — именно для такого класса алгоритмов интересно реализовать различные mutex' | Skip-list, основанный на fine-grained locks (блокировка на уровне элементов — именно для такого класса алгоритмов интересно реализовать различные mutex' | ||
| Line 86: | Line 75: | ||
| </ | </ | ||
| - | ==== [2008] Herlihy,Shavit,Tzafrir Hopscotch Hashing.pdf ==== | + | ==== [2013] Henzinger,Payer,Sezgin Replacing competition with cooperation to achieve scalable lock-free FIFO queues.pdf ==== |
| + | > // | ||
| + | > [[https:// | ||
| - | //Сложность://5+\\ | + | Мне этот алгоритм очень хочется попробовать. Единственный минус — авторы не показали, |
| - | Интересный алгоритм open-addressing hash table. Похож на Cuckoo hashing, реализация которого есть | + | ==== [1995] Valois Lock-Free Linked Lists Using Compare-and_Swap.pdf ==== |
| + | > //Сложность://3+ | ||
| + | > [[https:// | ||
| - | ==== [2012] Crain,Gramoli,Raynal A Contention-Friendly, Non-Blocking Skip List.pdf ==== | + | Эта работа, несмотря на свою «старость», интересна тем, что позволяет сделать полноценные итераторы по lock-free структуре. На основе описанного алгоритма списка можно построить hash-map (MichaelHashSet/ |
| - | // | + | ==== [2008] Herlihy, |
| + | > // | ||
| + | > [[https:// | ||
| - | Ещё одна реализация skip-list. Алгоритм интересен тем, что на нулевом уровне узлы связаны в double-linked list. Авторы не говорят, | + | Интересный алгоритм |
| ==== [2010] Ellen, | ==== [2010] Ellen, | ||
| - | + | > // | |
| - | // | + | > [[https:// |
| В libcds уже есть HP- и RCU-based реализации (без helping' | В libcds уже есть HP- и RCU-based реализации (без helping' | ||
| - | ==== [2010] Bronson, | + | ==== A.Williams “C++ Concurrency in Action” - lock-free очередь на shared_ptr |
| + | > // | ||
| + | > [[https:// | ||
| - | //Сложность://7\\ | + | Алгоритм и его подробный анализ есть в книге. Требуется создать очередь на C++11. Оценить, |
| - | Реализация конкурентного AVL-tree, новый метод optimistic hand-over-hand locking. Проанализировать, какой SMR подходит (HP, RCU, оба), | + | ==== A.Williams “C++ Concurrency in Action” |
| + | > //Сложность://1+ | ||
| + | > [[https:// | ||
| - | ==== [2011] Brown,Helga Non-blocking k-ary Search Trees.pdf ==== | + | Алгоритм и его подробный анализ есть в книге. Требуется создать стек на C++11, используя оба алгоритма, |
| - | // | + | ==== [2014] Dodds, |
| + | > // | ||
| + | > [[https:// | ||
| - | Развитие подхода [2010] Ellen, | + | Перспективный алгоритм построения lock-free стека, очереди, deque. Должен обеспечивать очень |
| - | ==== [2012] Afek,Kaplan,Korenfeld, | + | ==== [2003] Gao, Groote, Hesselink Efficient almost wait-free parallel accessible dynamic Hashtables.pdf ==== |
| + | > // | ||
| + | > [[https:// | ||
| - | //Сложность: | + | Интересный алгоритм open-addressing hash table. |
| + | Алгоритм описан достаточно хорошо, | ||
| + | Замечания: | ||
| + | - Понять, где следует применять атомарные операции. В псевдокоде это отмечено скобками < >: | ||
| + | * < a := b > => atomic load, atomic store | ||
| + | * < if a == 0 then a := b > => a.CAS( 0, b ) | ||
| + | - Псевдокод описан в предположении, | ||
| + | - К данным, | ||
| - | [2012] Korenfeld CBTree - A Practical Concurrent Self-Adjusting Search Tree.pdf | + | Развитие: если можно выделить алгоритм расширения hash-таблицы в отдельную |
| - | Разновидность самобалансирующегося дерева, | + | |
| - | ==== [2011] Prokopec,Bagwell,Odersky | + | ==== [2010] Gidenstam,Sundell,Tsigas |
| + | > // | ||
| + | > [[https:// | ||
| - | //Сложность://8\\ | + | Также: А также: [2010] Gidenstam, |
| - | [2011] Prokopec,Bagwell,Odersky Lock-Free Resizable | + | ==== [2014] Henzinger, Kirsch, Payer, Sezgin, Sokolova Quantitative Relaxation of Concurrent |
| - | [2011] Prokopec, | + | > // |
| - | Реализация конкурентного trie. No comments. | + | > [[https:// |
| + | |||
| + | Сегментированный стек. В статье приводится псевдокод для tagged pointers (указатель + версия). Следует реализовать его на Hazard Pointer, intrusive и stl-like версию. Размер сегмента — степень двойки, | ||
| ===== Реализованные ===== | ===== Реализованные ===== | ||
| - | ==== A.Williams “C++ Concurrency in Action” | + | ==== [2003] Michael CAS-Based Lock-Free Algorithm for Shared Deques.pdf |
| - | > // | + | > // |
| - | > [[https:// | + | > [[https:// |
| - | Алгоритм и его подробный анализ | + | Реализовать описанный в статье алгоритм |
| - | + | ||
| - | ==== A.Williams “C++ Concurrency in Action” - lock-free очередь на shared_ptr ==== | + | |
| - | > // | + | |
| - | > [[https:// | + | |
| - | + | ||
| - | Алгоритм | + | |
| - | + | ||
| - | ==== [2014] Dodds, | + | |
| - | + | ||
| - | > //Сложность:// | + | |
| - | > [[https:// | + | |
| - | + | ||
| - | Перспективный алгоритм построения lock-free стека, очереди, | + | |
projects/libcds/tasks.1488023947.txt.gz · Last modified: 2017/02/25 14:59 by kel