Re[2]: Хамелеоны быстрые и очень быстрые
От: remark Россия http://www.1024cores.net/
Дата: 19.09.09 18:01
Оценка: 10 (1)
Здравствуйте, minorlogic, Вы писали:

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


Такие задачи определенно есть.
В идеале, конечно, задача разбивается на очень много больших независимых кусков, и тогда характеристики системы поддержки параллелизма практически не влияют на свойства системы (просто так как она задействуется крайне редко). Но этого не всегда удаётся добиться.
Самый показательный пример — ран-таймы языков и библиотек поддержки параллелизма. Свойства ран-тайма напрямую влияют на стиль кодирования. Допустим у нас есть агентно-ориентированная система (типа Эрланг). Производим *естественную* декомпозицию прикладной задачи. Далее вопрос — обеспечит ли наш ран-тайм приемлемое функционирование системы при такой декомпозиции? В смыле, что оверхед вносимый ран-таймом будет допустимым. Если обеспечит — замечательно. Не обеспечит — у нас проблемы, нам придётся перепроектировать систему уже не столь естественным образом, а каким-то искуственным, что бы побороть оверхеды ран-тайма.
Например, это свойственно для многих систем моделирования. Если проводить естественную декомпозицию системы (1 элемент предметной области — 1 агент), зачастую оверхеды оказываются неприемлемыми. За примером далеко ходить не надо — допустим мы хотим смоделировать эту задачу о хамелеонах с помощью Эрланг, результат такой попытки можно видеть в таблице.
Речь естественно идёт не о полном отсутствии полезной локальной работы, а о том какой минимальный размер локальной работы позволяет иметь система.

Эти аспекты так же важны для различных исконно централизованных ресурсов (управление памятью, управление временем жизни объектов, логирование, лицензирование и т.д.). В каких-то языках что-то может быть встроенным (управление памятью, управление временем жизни объектов), но если что-то не встроено, то это придётся реализовывать вручную. И тут мы сталкнёмся фактически с достаточно похожей задачей, когда эффективная полезная работа может быть очень маленькой (тут надо учитывать, что чем больше физических процессоров, тем меньше эффективная локальная работа).

Сюда же такие вещи как базы данных и middlewre. При наличии, допустим, 16/32 физических процессоров (что уже практически сегодняшний день), конкуренция за центральные структуры данных может быть очень высокой (читай — отсутствие локальной работы).

В целом, это, конечно, не удел прикладного программирования. Но в системном программировании область применения значительна.


1024cores — all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.