Какой параллельный поток интерфейс использовать для разделения задач и разделения, используя стек? - PullRequest
2 голосов
/ 23 ноября 2011

Я планирую написать код, в котором я хочу поделиться работой, используя задачи, которые можно разделить.В последовательной версии я использую стек, инициализированный с корневой задачей.Стек очищается путем многократного выталкивания задачи, которая затем либо выполняется, либо разделяется, а подзадача отбрасывается обратно в стек.Каков наилучший (наиболее эффективный и простой) способ и интерфейс (tbb, openmp и т. Д.) Для параллельной реализации этого?Этот параллельный стек явно поддерживается каким-либо параллельным потоком интерфейсом (или есть лучшая альтернатива стеку)?

1 Ответ

2 голосов
/ 23 февраля 2012

То, что вы на самом деле описываете, это очередь на кражу работы.Это началось с языка программирования Cilk (http://en.wikipedia.org/wiki/Cilk) и продолжается с Cilk ++, который является частью компилятора Intel. Вы можете получить бесплатную ознакомительную версию для Linux.

Intel TBB также имеет очередь для кражи работы иподдерживает автоматическое разделение задач, плюс дополнительный контроль, если вы хотите разделить их самостоятельно. OpenMP не имеет такого контроля, но я не думаю, что это невозможно сделать.

Есть также qthreads из Sandia (https://code.google.com/p/qthreads/) хороший пакет, который позволяет вам иметь планировщик M: N (потоки уровня пользователя M в потоках ОС N).

...