05.07.01
| Иллюстрация | |
![]() | |
| Обложка книги. | |
Название книги можно перевести как "Высокопроизводительные вычисления" и эта тематика в русскоязычной литературе не освещена совсем.
Традиционно считается, что самой важной составляющей при создании программного обеспечения является алгоритмическая часть, ведь именно она задает границы по количеству выполняемых "атомарных" операций. Тем не менее, алгоритм определяет зависимость времени работы от объема входных данных до некоторого коэффициента умножения (или, точнее, коэффициентов). Если один из таких коэффициентов достаточно велик (за счет громоздкости какой-нибудь часто выполняемой операции), то его уменьшение может дать вполне ощутимый выигрыш в производительности.
Понятно, что изменение алгоритма на лучший (если такой вообще возможен) может ускорить работу программы на порядки. Но если, к примеру, задача обсчитывается 24 часа, а путем оптимизации некоторых маленьких процедур удастся уменьшить это время до 12, то это будет очень неплохо.
Успешность проведения подобных оптимизаций во многом зависит от того, насколько программист хорошо знаком с архитектурой микропроцессора, на котором выполняются вычисления и вообще, насколько он знаком с приемами оптимизации, потому что в десятый раз изобретать велосипеды очень утомительно.
Так вот в книге "High Perfomance Computing" рассказывается о том, какие методы оптимизации программного кода существуют сейчас. Большая часть материала посвящена RISC архитектуре --- наиболее часто используемой в современных вычислительных задачах.
Кроме того, объясняются основные приемы оптимизации, применяемыми современными оптимизирующими компиляторами. Это полезно, ведь зачастую проблема состоит в том, чтобы упростить задачу встроенному оптимизатору, а не самостоятельному (ручному) улучшению программного кода. При этом я понимаю, что с предыдущим утверждением можно поспорить, но я более чем уверен, что непосредственно вычислениями лучше заниматься тем специалистам, которым эти вычисления нужны (а не программистам). Связано это со многими причинами, в частности можно утверждать, что программист (как узкий специалист) не может в случае необходимости упростить вычислительную задачу. В то же самое время постановщик задачи может пойти на решение упрощенной задачи, так как оно может дать интересные результаты при меньших трудозатратах.
В качестве языка программирования, на котором написаны примеры, чаще всего выступает Фортран-77, что в общем, неудивительно. Для этого языка программирования существует большое количество математических библиотек, а его простая, приближенная к машинному языку программирования, структура позволяет написать эффективный оптимизатор. Кроме того, фортран чаще используется при решении подобных задач просто по историческим причинам.
Мало того, в книге утверждается (и аргументируется), что для высокопроизводительных вычислений лучше языка программирования нет. Как я уже отметил, это вполне оправданный тезис.
Объясняется множество достаточно простых, но полезных свойств современных процессоров, даются сравнительные характеристики различных семейств микропроцессоров. Все это, а так же понятно написанный текст, делают из книги еще и приятный обзор современных архитектур для тех людей, которые никогда еще не углублялись во внутреннее устройство компьютера. С другой стороны, для программистов, которые немного представляют себе что такое конвейер или знают о неоднородности оперативной памяти в ЭВМ, этот обзор ничего нового не даст.
Есть пара глав посвященных программированию при помощи потоков или распределению задач по машинам в сети (к примеру, используя PVM). Правда, в основном объясняются тривиальные вещи.
Книга написана достаточно интересно но, на мой взгляд неровно: есть главы, которые читаются взахлеб, а есть откровенно скучные, изобилующие повторениями и пережевываниями старых мыслей.
Надо понимать, что вычисления (о которых и идет речь в книге) встречаются в основном при решении научных прикладных проблем (к примеру, моделирования поведения какого-нибудь газа). Таким образом сама книга не для программистов, а, скорее, для прикладных математиков или физиков, которым особенно важно выжать из процессора все, на что он способен. Собственно, в тех задачах, для которых нужны программисты, сложные вычисления встречаются не так уж и часто (хотя проблема производительности процессора тоже встает, но в других контекстах). Для математиков, занимающихся сложными расчетами, книга, я думаю, должна быть очень полезна. Согласитесь, математику нет нужды в особых знаниях ассемблера или тонкостей оптимизации, но иметь общее представление было бы полезно.
Программистам же книжку можно рекомендовать только как обзорную, для развития кругозора. Полезная информация есть, но ее же можно узнать просто обратившись к фирменной документации на какой-нибудь современный микропроцессор, а так же применяя здравый смысл (еще иногда полезно смотреть ассемблерный выход; к примеру, я недавно доверился компилятору, а по прошествии нескольких месяцев оказалось что зря). Стоит отметить, я не пожалел, что приобрел эту книгу, повторюсь, что как обзор она, в общем-то, вполне нормальная. Хотя местами скучная.
Книга для "программирующих математиков", то есть людей, которым нужно, чтобы их программы на фортране работали быстрее, чем раньше. Так же, я думаю, интересно прочитать книгу в качестве обзора: подробно объясняется множество не совсем очевидных при поверхностном знакомстве с той или иной темой вещей, при этом я не заметил ошибок в изложении, что само по себе очень приятно. С другой стороны, ни одна из тем не изложена подробно.
Тем не менее, большую часть изложенного в книге материала можно изучить либо косвенно (просто в процессе программирования), либо при общении с другими программистами (непосредственно или в каких-либо конференциях). Во всяком случае, мне так кажется.
| http://www.amazon.com/exec/obi | Эта книга на amazon.com (с комментариями). |
| http://www.pregrad.net | Pregrad.Net, фирма, которая осуществляет доставку товаров из зарубежных интернет-магазинов. |