Обложка Максютов М.С. Искусство вычислений в эпоху параллельности: Осваиваем на С++
Id: 274386
879 руб.

Искусство вычислений в эпоху параллельности:
Осваиваем на С++

URSS. 2021. 208 с. ISBN 978-5-9519-2070-6.
  • Твердый переплет
Белая плотная офсетная бумага.

Аннотация

В связи с интенсивным развитием средств «быстрого» создания приложений, не учитывающих развитие современных компьютерных архитектур, в наукоемких областях знаний возникает острая необходимость в высокоэффективных производительных вычислениях, учитывающих эти изменения. Предлагаемые на рынке «универсальные решатели», к сожалению, не всегда могут решить специфические проблемы в этих областях. Поэтому необходимость в написании ...(Подробнее)эффективного вычислительного кода не только не теряет своей актуальности сегодня, но и требует от специалиста знаний в области современных моделей программирования. Эта книга сможет послужить помощником при разработке таких программ.

Работа будет полезна широкому кругу читателей — от студентов физико-математических специальностей вузов до специалистов в области высокопроизводительных вычислений.


Содержание
Оглавление3
Глава 1. Введение5
Глава 2. Язык программирования С++9
1. Конструкции языка9
2. Структура программы13
3. Типы используемых данных15
4. Типы указатель и массив22
5. Некоторые аспекты передачи параметров в функциях31
6. Параметр массив35
7. Обобщение символьных массивов. Тип данных string44
8. Динамически выделяемая память49
9. Дальнейшие расширения стандарта и некоторые параллельные конструкции при работе с массивами55
10. Библиотека потокового ввода-вывода 58
11. Операторы63
12. Дополнительные операции ввода/вывода70
13. Операции равенства, отношения и логические операции78
14. Рекурсия и подстановка81
15. Шаблоны85
Глава 3. Основы объектно-ориентированного программирования87
1. Структуры87
2. Классы93
3. Конструкторы95
4. Деструкторы99
5. Инкапсуляция, наследственность и полиморфизм102
6. Основной класс Array и виртуальные функции105
7. Производные классы111
8. Классы С++ в работе121
9. Шаблон класса126
Глава 4. Оптимизация вычислений131
1. Режимы отладки и оптимизации131
2. Векторизация142
3. Распараллеливание вычислений151
Глава 5. Использование математических библиотек159
1. Параллельное обращение матрицы. Проект MKL161
2. Оценка эффективности распараллеливания.167
Приложения174
Приложение 1. Векторно-матричные операции с классами174
Приложение 2. Шаблон класса Array194
Приложение 3. Работа с MKL198
Список литературы202

Введение

Читатель, держащий в руках эту книгу, невольно задаст вопрос: «Еще один „учебник“ по программированию»?! Спешу успокоить — это не совсем так. Более того, по большей части это не так. Да, необходимое здесь описание языка, его базового стандарта, безусловно, приводится. Но основное ее назначение в другом. Это не «книга о программировании», но «книга о вычислениях». Поэтому основной упор при описании языка сделан на данные и массивы. В XXI веке и сами вычисления претерпевают значительные трансформации, прежде всего в области параллелизма. Сегодня любое устройство, даже бытовое, содержит в себе многоядерный процессор. Задача его эффективного программирования становится настоящим искусством. Особенно важно использовать это искусство в таких чувствительных областях, как ядерная энергетика, космос и оборона.

Если вернуться к истории возникновения различных языков программирования, то можно обратить внимание, что изначальной областью их применения были вычисления. Вспомним хотя бы самый первый стандарт языка программирования, язык FORTRAN. До сегодняшнего дня ему нет равных по эффективности в научной и инженерной области деятельности. Да и сам язык претерпел значительные изменения, став фактически единственным нативным инструментом для параллельных вычислений. Тем не менее, за многие годы использования язык С++ тоже приобрел огромную популярность. Прежде всего, благодаря своей гибкости. Можно определенно сказать, что это один из первых языков, использование которого не было ориентировано исключительно на вычисления. Область его использования охватывает широкий круг задач. Поэтому для применения в научной и инженерной деятельности необходима его некоторая адаптация. К сожалению, немногие программисты, владеющие этим языком и берущиеся за решение вычислительных задач, достаточно эффективно его используют. Очень много примеров, когда разработчики коммерческих программ на С++, приходя в научные лаборатории, допускают досадные ошибки при программировании. Особенно в тех случаях, когда использование, например, FORTRAN выглядело бы более безопасным.

Помочь программистам избежать такого рода ситуаций и призвана эта монография. Я подготовил ее, прежде всего, для программистов-математиков. Для них в настоящее время, помимо понятий «сходимости и согласованности», выходят на первый план понятия векторизации, использования инструкций и ядер процессора, проблемы параллелизма данных и вычислений. Хотя одинаково эффективно ее смогут использовать и инженеры в различных областях знаний, требующих высокопроизводительных математических расчетов. Книг по программированию для этого круга читателей было написано достаточно еще в прошлом веке, но времена меняются, меняются языки и их стандарты, а искусство программирования вышло далеко за рамки научных лабораторий и вычислительных центров. Оно шагнуло в массовый сектор, где подробное знание особенностей программирования вычислительных алгоритмов не требуется.

Однако проблема высокопроизводительных, научно-техни-ческих вычислений сегодня не менее остра, чем прежде. Более того, она тесно связана с серьезными капиталовложениями в наукоемких областях промышленности. Предлагаемые на рынке «универсальные решатели», к сожалению, не всегда могут решить специфические проблемы в этих областях. Разрабатываемое программное обеспечение может также содержать ошибки, приводящие к серьезным финансовым потерям. Достаточно вспомнить катастрофу нефтеналивной платформы Statoil в Норвежском море или преждевременное отключение двигателей ракеты-носителя Ariane 5 управляющим компьютером из-за ошибок в программном обеспечении. Сегодня круг разработчиков, специализирующихся на численных методах, стал довольно узок, так как возросла доля использования готового программного обеспечения. Тем не менее, остается необходимость в вычислениях для задач, требующих индивидуального подхода. Надеюсь, что эта монография сможет послужить помощником при разработке таких программ.

Язык С++ довольно гибкий инструмент программирования, который может быть адаптирован к различным областям знаний, как гуманитарным, так и техническим. В последние годы он стал весьма популярным и в высокопроизводительных вычислениях, что подвигнуло меня использовать его в качестве основного «генератора кода». В первых главах монографии я взялся за краткое его описание, которое служит исключительно справочным материалом. Для глубокого и всестороннего ознакомления с языком я бы рекомендовал более емкий труд, например, великолепную книгу Стенли Липмана «С++ для начинающих» [1]. Материала, изложенного в этой монографии, будет вполне достаточно для того, чтобы начать писать вычислительные коды «с нуля». Все примеры, разобранные в этой книге, собраны при помощи компилятора компании Intel, с которой я веду многолетнее сотрудничество. Все это время Intel любезно предоставляла академические лицензии для меня и моих студентов, которых набралось уже не одно поколение. Большое число «жестких экспериментов», в том числе описанных в данной монографии, опробовано на них. Я благодарен им за проявленный интерес, терпение и настойчивость при изучении моих курсов. Я выражаю также глубокую признательность директору по развитию продуктов Intel Грэгу Андерсону и Игорю Воробцову, ведущему инженеру-кон¬сультанту Intel, за поддержку. Я также благодарен сотрудникам отдела математического моделирования компании Trinity, подразделения госкорпорации «Росатом», опыт работы в которой привел меня к идее написания этой книги.


Об авторе
Максютов Малик Сабитович
Кандидат технических наук, доцент. Работает старшим научным сотрудником в Троицком институте инновационных и термоядерных исследований (отделение безопасности объектов атомной энергетики TRINITY). Много лет ведет преподавательскую деятельность на кафедре математики Российского государственного геологоразведочного университета им. Серго Орджоникидзе (МГРИ), а также на кафедре прикладной математики Московского государственного строительного университета, ведет курсы программирования и численных методов для математиков-прикладников. Основная область научных интересов — высокопроизводительные вычисления.