course language
course duration
needed to educate
for credit at your university
Рассматривается применение метапрограммирования шаблонов языка C++ для упрощения записи алгоритмов и для переноса части вычислений (различных целочисленных констант, например, биномиальных коэффициентов) на стадию компиляции, что теоретически позволяет ускорить выполнение программ и может быть весьма актуальным для численного решения задач математической физики. Метапрограммирование шаблонов позволяет автоматизировать некоторые сложные вычисления, такие, например, как раскрытие скобок в сложных выражениях и вычисление символьных производных от формул.
Курс является двуязычным. Материал подается в основном на английском языке с русскими субтитрами.
Знание базового языка C++, желательно (но не обязательно) знание шаблонов в языке.
В результате обучения по курсу слушатель будет
Знать, что такое метафункции и метаклассы. Уметь применять как стандартные метафункции (из стандартной библиотеки языка), так и писать свои собственные. Владеть навыком «метафункционального» мышления.
Знать, что такое шаблонный полиморфизм (и его отличия от классического виртуального полиморфизма), что такое шаблон CRTP и шаблоны выражений.
Понимать, что во многих математических вычислениях, зависящих от целочисленного параметра, значение которого известно во время компиляции, часть вычислений можно вынести на стадию компиляции, что уменьшает время счёта. Уметь это знание применять на практике.
Знать устройство цикла времени компиляции (фактически компилятор разворачивает цикл, так как число итераций цикла известно во время компиляции).
Знать, как предложенный автором сеточно-операторный подход к программированию, основанный на шаблонах выражений, позволяет решать две задачи: упрощение записи математических формул в текстах программ и автоматический перенос программ на графические ускорители CUDA.
Уметь применять метапрограммирование шаблонов для реализации численных методов. Понимать, как символьное дифференцирование, основанное на шаблонах выражений, упрощает написание многих алгоритмов, основанных на методе Ньютона. Основываясь на этом примере, уметь писать свои алгоритмы для решения других задач.
Уметь применять циклы времени компиляции для автоматизации логически сложных задач, таких, например, как автоматические раскрытие скобок.
Уметь с помощью шаблонов выражений строить свои предметно-ориентированные языки (DSL, Domain Specific Language).
Знать, что такое метафункции и метаклассы. Уметь применять как стандартные метафункции (из стандартной библиотеки языка), так и писать свои собственные. Владеть навыком «метафункционального» мышления.
Знать, что такое шаблонный полиморфизм (и его отличия от классического виртуального полиморфизма), что такое шаблон CRTP и шаблоны выражений.
Понимать, что во многих математических вычислениях, зависящих от целочисленного параметра, значение которого известно во время компиляции, часть вычислений можно вынести на стадию компиляции, что уменьшает время счёта. Уметь это знание применять на практике.
Знать устройство цикла времени компиляции (фактически компилятор разворачивает цикл, так как число итераций цикла известно во время компиляции).
Знать, как предложенный автором сеточно-операторный подход к программированию, основанный на шаблонах выражений, позволяет решать две задачи: упрощение записи математических формул в текстах программ и автоматический перенос программ на графические ускорители CUDA.
Уметь применять метапрограммирование шаблонов для реализации численных методов. Понимать, как символьное дифференцирование, основанное на шаблонах выражений, упрощает написание многих алгоритмов, основанных на методе Ньютона. Основываясь на этом примере, уметь писать свои алгоритмы для решения других задач.
Уметь применять циклы времени компиляции для автоматизации логически сложных задач, таких, например, как автоматические раскрытие скобок.
Уметь с помощью шаблонов выражений строить свои предметно-ориентированные языки (DSL, Domain Specific Language).
course language
course duration
needed to educate
for credit at your university
Кандидат физико-математических наук
Position: Заместитель директора центра инженерно-физических расчётов и суперкомпьютерного моделирования НИЯУ МИФИ
Кандидат физико-математических наук
Position: Старший научный сотрудник ИПМ им. М.В. Келдыша РАН