Выбрать главу

Но все вопросы, сопровождающие суперкомпьютер, конечно же, решаются. Да, использовать суперкомпьютеры сложнее, чем персоналку: нужны дополнительные знания и технологии, высококвалифицированные специалисты, более сложная информационная инфраструктура. Написать эффективную параллельную программу намного сложнее, чем последовательную, да и вообще создание программного обеспечения для параллельных компьютеров — это центральная проблема суперкомпьютерных вычислений. Но без супер-ЭВМ сегодня не обойтись, и отрадно, что в нашей стране есть понимание необходимости развития этих технологий. Так, в ноябре прошлого года в Президиуме Российской академии наук состоялось открытие межведомственного суперкомпьютерного центра. В процессе становления суперкомпьютерные центры в Дубне, Черноголовке, Институте прикладной математики РАН им. М. В. Келдыша, Институте математического моделирования РАН, Московском государственном университете им. М. В. Ломоносова. Создана и развивается линия отечественных суперкомпьютеров МВС-1000. Активно разворачивает свою деятельность Информационно-аналитический центр по параллельным вычислениям в сети Интернет WWW.PARALLEL.RU, осуществляющий информационную поддержку многих российских проектов. А иначе и нельзя. Параллельные вычисления и параллельные компьютеры — это реальность, и это уже навсегда.

ПОДРОБНОСТИ ДЛЯ ЛЮБОЗНАТЕЛЬНЫХ

ЗАКОН АМДАЛА

Представьте себе ситуацию: у вас есть программа и доступ, скажем, к 256-процессорному суперкомпьютеру. Вы, вероятно, ожидаете, что программа будет выполняться в 256 раз быстрее, чем на одном процессоре? А вот этого, скорее всего, и не произойдет.

Предположим, что в вашей программе доля операций, которые нужно выполнять последовательно, равна f, причем 0 < f < 1 (эта доля определяется не по числу строк кода, а по числу операций в процессе выполнения). Крайние случаи в значениях f соответствуют полностью параллельным (f = 0) и полностью последовательным (f = 1) программам. Так вот, для того, чтобы оценить, какое ускорение S можно получить на компьютере, состоящем из р процессоров, при данном значении f, воспользуемся законом Амдала:

S <= 1/{f + (1 — f)/p}.

Если вдуматься как следует, то закон на самом деле страшный. Предположим, что в вашей программе лишь 10 % последовательных операций, т. е. f = 0,1. В этом случае закон утверждает: сколько бы процессоров вы ни использовали, ускорения работы программы более чем в десять раз никак не получите. Да и то десять — это теоретическая оценка сверху самого лучшего случая, когда никаких других отрицательных факторов нет…

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

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

s = 0,

Do i = 1, n

s = s + а(i)

End Do

Этот алгоритм строго последовательный, так как на i-той итерации цикла требуется результат (i — 1) — вой, и все итерации выполняются одна за другой. В данном случае f = 1, и, стало быть, никакого эффекта от использования параллельных компьютеров для выполнения этого алгоритма мы не получим. Вместе с тем выход очевиден. Поскольку в большинстве реальных случаев нет существенной разницы, в каком порядке складывать числа, выберем иную схему сложения. Сначала найдем сумму пар соседних элементов: а(1) + а(2), а(3) + а(4), а(5) + а(6) и т. д. Заметим, что при такой схеме все пары можно складывать одновременно. На следующих шагах будем действовать аналогично, получив вариант параллельного алгоритма.