Вопрос

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

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

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

Это было полезно?

Решение

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

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

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

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

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

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

На заключительной ноте:Как только оригинальный дизайн готов, его относительно легко реорганизовать, чтобы улучшить.Например, узлы, которые выполняют одну и ту же работу, могут совместно использовать рабочие КАНАЛЫ, так что синтаксический анализатор 8 использует канал "лексический токен" или изменяет его так, чтобы рабочие могли "красть" работу из других рабочих каналов и т.д.

Другие советы

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top