Subsections
Параллельные вычисления были и остаются одной из самых активно развивающихся
областей программирования как в России, так и за рубежом. Однако традиционные
методы параллельного программирования в основном рассчитаны на решение
специфических классов вычислительных задач и ориентированы на использование
специальных видов оборудования. В настоящее время спектр задач, требующих
высокопроизводительных вычислений, значительно расширился, а конфигурация
вычислительных систем для их решения может включать даже глобальные
компьютерные сети. В такой ситуации для части задач традиционные
методы параллельного программирования становятся слабо применимыми или
неприменимыми вовсе. С точки зрения авторов, одним из возможных решений
проблемы может являться динамическое распараллеливание программ, основанное на
параллельной редукции графов. Первые успешные шаги в этой области были сделаны
в ИПС РАН при реализации первой версии Т-системы [1].
Анализ проделанной в ИПС РАН работы показал, что заложенные в Т-системе идеи
могут быть обобщены, что дает возможность применять параллельную редукцию
графов для решения более широкого класса задач.
Ниже сделана попытка обзора тех приложений, которые могут быть эффективно
реализованы путем динамического распараллеливания программ на основе
параллельной редукции графов. Большая часть этих приложений требует наличия
кластеров для получения наилучшей производительности, хотя некоторые задачи
могут выполняться в обычных компьютерных сетях.
Базы данных уже давно рассматриваются как объект для распараллеливания.
Крупные коммерческие базы данных, такие как Oracle, имеют версии,
предназначенные для работы на кластерах. В свободно распространяемых базах
данных, однако, такие возможности отсутствуют. И, хотя создание свободно
распространяемой базы с возможностью кластерной обработки представляет собой
крайне интересную задачу, хотелось бы поставить акцент не на этом, а на
приложениях, работающих поверх баз данных. Сюда можно отнести системы
аналитической обработки данных, интеллектуальные системы поиска, системы
визуализации данных. Все эти приложения требуют достаточно интенсивных
вычислений и имеют относительно сложную внутреннюю структуру, что делает
применение динамических методов распараллеливания особенно актуальным.
Как и в случае с базами данных, наибольший интерес представляет не
распараллеливание собственно серверных приложений, а того уровня программного
обеспечения, которое работает поверх них. Здесь можно упомянуть поисковые и
информационные системы, серверы приложений. Следует отметить возможность
повышения скорости реакции подобных систем для часто встречающихся запросов
путем мемоизации (кэширования значений уже вычисленных функций).
Среди прочих Internet-приложений стоит упомянуть возможность кластерной
реализации www-кэша (в версии 2.0 протокола WCCP предусмотрена поддержка
кластеров).
Сюда можно отнести средства интеллектуального анализа текстовой информации,
средства мониторинга магистральных каналов связи. Поскольку время обработки
отдельных элементов информации может сильно различаться, динамическое
распараллеливание позволяет эффективно использовать вычислительные ресурсы,
так как узлы, завершившие вычисления, автоматически получают новые задания.
В эту категорию можно отнести системы администрирования, системы
документооборота, системы управления компьютерными сетями. Эти приложения
являются примером применения параллельной редукции графов в обычных сетях.
Более того, в них в основном не требуется динамическое распараллеливание.
Однако применение параллельной редукции графов сильно упрощает написание
систем подобного рода, потому что многие принципы dataflow уже заложены в ядре
параллельной редукции.
Отдельно хочется упомянуть об отказоустойчивости параллельных систем.
Здесь существует два класса проблем -- отказоустойчивость ресурсов (баз данных,
файловых систем и т.п.) и отказоустойчивость приложений. При применении
динамического распараллеливания, основанного на параллельной редукции графов,
отказоустойчивость приложений обеспечивается автоматически, так как неудача
при вычислении функции (например, при отказе какого-то кластерного узла
или потери связи с ним),
вызовет ее автоматическое перевычисление на одном из оставшихся узлов.
2000-09-12