Наверно, мало что теперь столь же будоражит умы людей, погруженных в информационные технологии, как параллельные вычисления. И не только потому, что их использование обещает повышение вычислительных возможностей человека, а скорее в связи с той новой философией, которую он обретает, учась жить в преодолении неудобств последовательных действий.
В.В. Воеводин, Вл.В. Воеводин, Параллельные вычисления. СПб.: «БХВ-Петербург», 2002. — 608 с.: ил.

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

Занятие такого рода проблемами привело С.А. Лебедева и С.И. Брука к активному использованию параллельной архитектуры для повышения надежности и быстродействия уже в первых, созданных ими, вычислительных машинах. Другим важным направлением, обозначившим глубокий интерес к параллельным действиям, стало создание алгоритмов с большим быстродействием. При этом нередко удавалось решать задачи с помощью таких алгоритмов и на существенно меньшей памяти, чем при последовательной реализации — вспомним хотя бы решение задач динамического программирования методом, предложенным Р. Беллманом. Поэтому, когда появляется новая книга по параллельным вычислениям, испытываешь непременный интерес: далеко ли удалось продвинуться?

За последние полгода вышло из печати сразу несколько книг, посвященных параллельным вычислениям и программированию, например, труды К.Ю. Богачева, С. Немнюгина и О. Стесик. Но и среди них выделяется фундаментальная работа отца и сына Воеводиных. Старший из авторов, Валентин Воеводин — известный математик, академик РАН, со студенческой скамьи на мехмате МГУ увлекшийся численными методами линейной алгебры. Младший, Владимир — выпускник ВМК, работающий в области высокопроизводительных вычислительных систем. Взяв в руки их книгу, можно без труда заметить, что в ней удачно синтезированы алгоритмический, программный и платформный взгляды на проблемы параллелизма в компьютерах. Так, три части книги как раз и освещают вычислительные системы, программирование и алгоритмические аспекты параллелизма. При этом в заключении авторы отмечают, что параллельные вычисления требуют непременной интеграции этих трех составляющих. Обстоятельность, с которой авторы раскрывают темы, заслуживает отдельного упоминания, поскольку она имеет значение для многих читателей, и не важно кто они — научные работники, студенты или преподаватели.

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

Во второй части книги авторы изложили взгляды на параллельное программирование, начав с описания понятий большие задачи и параллельные вычисления. Основное, почему выделяют такие задачи, это значительный объем исходных данных и/или необходимых вычислений. Затем рассматривается представление алгоритмов в виде графов и дается описание принципов параллельных вычислений, а также концепций неограниченного и внутреннего параллелизма алгоритмов. Затем излагаются технологии параллельного программирования, использующие традиционные последовательные языки, системы программирования на основе передачи сообщений и другие языки и системы программирования. Отдельная глава книги описывает тонкую информационную структуру программ, представленную графовыми моделями: классами, графами зависимостей и минимальными графами, простыми и элементарными графами, а также лексикографическим порядком, циклами ParDO и избыточными вычислениями. Подробно рассмотрены эквивалентные преобразования программ.

В заключительной третьей части книги вниманию читателя предложены темы о вычислительных системах и алгоритмах, а также о пользователе в среде параллелизма. Опираясь на сформулированный Г.И. Марчуком принцип отображения задачи вычислительной математики на архитектуру вычислительных систем, авторы утверждают, что мы придем к необходимости совместного рассмотрения численных методов и структур вычислительных систем. Они раскрывают это утверждение в книге, используя расширение и уточнение линейного класса, граф-машины, регулярные и направленные графы итерационных процессов, математические модели систолических массивов и алгебраического вычислителя, а также матрицы и структуры алгоритмов. При этом излагаются новые возможности применения сведений о структуре. Завершает книгу глава о типичных ситуациях, возникающих в практике параллельного программирования, о путях их разрешения, о необходимом программном сервисе для выполнения параллельных вычислений, об организации поддержки пользователей.

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