Планирование параллелизма - PullRequest
0 голосов
/ 04 марта 2009

Если вы планируете написать параллельное приложение, требующее больших вычислительных ресурсов, какие руководящие принципы вы бы использовали для проектирования ваших объектов (будь то классы, структуры или что-то еще), чтобы максимизировать ваш потенциал для максимального использования параллелизма.

Я имею в виду приложение, которое говорит, что интерпретирует / компилирует древовидный граф объектов, которые требуют создания материала, передачи его другому объекту для обработки и т. Д. С древовидной структурой.

Что следует учитывать в начале процесса проектирования?

Ответы [ 3 ]

6 голосов
/ 04 марта 2009

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

3 голосов
/ 04 марта 2009

Если вы создаете материал, а затем пропускаете его для обработки, то почти наверняка вы можете спроектировать свое приложение так, чтобы использовать передачу сообщений и изоляцию объекта.

Первым шагом будет определение обязанностей, то есть определение того, кто с чем справится. Каждый, кто окружен коробкой.

Вторым шагом будет определение потока информации между вашими ящиками, то есть, если А производит Х ... кто его потребляет?

После этих двух шагов у вас будет простой график с листьями, представляющими рабочих, и стрелками, представляющими сообщения. Каждая стрелка представляет порядок зависимости (то есть, если стрелка идет из От A до B, тогда необходимо выполнить A до B).

С этим вы сможете легко увидеть, какие действия могут быть сделаны параллельными, а какие действия действительно последовательными, в графическом, легко видимом, легко отображаемом виде.

Затем просто внедрите структуру Pipe , чтобы вы могли передавать сообщения между работниками , чтобы у каждого работника был конвейер работы.

На последнем замечании: После того, как оригинальный дизайн сделан, его относительно легко реорганизовать, чтобы улучшить. Например, узлы, выполняющие одну и ту же работу, могут совместно использовать рабочие ТРУБЫ, так что 8 синтаксический анализатор использует из канала «лексического токена» или изменяет его так, чтобы рабочие могли «красть» работу из других рабочих каналов и т. Д.

1 голос
/ 08 июля 2009

Шаблон, описанный выше Хорхе Кордобой, является лишь одним из подходов. Следующее, безусловно, стоит прочитать:

http://www.amazon.com/Patterns-Parallel-Programming-Software/dp/0321228111

Это очень сильно зависит от зависимости между вашими данными в том, как наилучшим образом разобрать вашу проблему. Например, такие шаблоны, как Master-Worker и однопрограммные множественные данные (SPMD), как правило, являются очень простыми подходами, если ваша проблема поддается решению проблемы.

...