Читаем 2000 №5 полностью

Предположим, что в вашей программе доля операций, которые нужно выполнять последовательно, равна 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) и т. д. Заметим, что при такой схеме все пары можно складывать одновременно. На следующих шагах будем действовать аналогично, получив вариант параллельного алгоритма.

Казалось бы, в данном случае все проблемы удалось разрешить. Но остается еще множество других трудностей, связанных с разной производительностью процессоров, скоростью передачи данных и т. д. Но это уже тонкости параллельного программирования, с азами которого вы в скором времени сможете познакомиться в интернетовском курсе по адресу http://parallel.ru/vvv/.

<p>СТО ЛЕТ НАЗАД</p><p>Наука и жизнь в конце XIX века</p>Находчивость американских инженеров

При прокладке туннеля под рекой Гудсоном в Нью-Йорке работы в туннеле проводились под давлением сжатого воздуха, не допускавшего просачивания воды в туннель. Галерея была доведена почти до середины реки, как вдруг в ней вспыхнул пожар. Пламя быстро охватило временную деревянную обшивку галереи. Люди успели выбежать; входы в туннель были тотчас закрыты, и все сооружение наполнили водою, погасившею огонь. Затем выкачали воду и впустили снова в галерею сильно сжатый воздух. Но тогда и обнаружился причиненный пожаром изъян: огонь прожег в полу деревянной галереи несколько дырок, через которые сжатый воздух выходил наружу. И хотя напор последнего препятствовал проникновению воды внутрь самого сооружения, но при ослаблении напряженности его притока вода мгновенно затопила бы всех рабочих в галерее. Понадобилось для безопасности работ заткнуть эти отверстия во что бы то ни стало, но как — никто не знал.

Тогда строителям туннеля пришло на ум следующее средство. Они распорядились, чтобы им достали самых крупных крыс из пакгаузных складов, привязали к их хвостам куски туго скрученной пакли втрое длиннее туловища крысы, и всю эту ватагу пустили в галерею. Крысы, чувствуя в своих движениях помеху, стали неистово метаться во все стороны, пока не добежали до прожженных в полу отверстий, в которые и проскочили. Но пакля не прошла и, заткнув отверстия, задержала крыс. Чем отчаяннее рвались они вперед, тем плотнее затыкали паклей отверстия, так что рабочим представилась уже возможность совершенно безопасно спуститься в галерею и прочно заделать в ней дырья, присутствие которых обозначали торчащие вверх концы пакли.

«Журнал новейших открытий и изобретений», 1900 г.

Питание и характер

По словам одного английского доктора, человек, питающийся воловьим мясом, делается энергичным, смелым, способным на всякие подвиги.

Свинина действует иначе: человек делается пессимистом, а потом впадает в меланхолию.

Люди, питающиеся бараниной, становятся ипохондриками.

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

Коровье молоко благоприятно влияет на характер и здоровье.

Перейти на страницу:

Все книги серии Наука и жизнь, 2000

Похожие книги