Персональная страничка Ватутина Эдуарда Игоревича

На главную | Мои школьные друзья | Шпаргалки | Юмор | Для студентов | OEIS | Экспедиции | Карты флоры России

Дисциплины "Программирование", "Объектно-ориентированное программирование" (язык Delphi, 2004–2026)
Вопросы к экзамену Download (4 КБ)

Дисциплина "Теоретические основы организации многопроцессорных комплексов и систем" (2009–2026)
Вопросы к экзамену Download (3 КБ)

Дисциплина "Специальные процессоры, машины и системы" (2009–2017)
Вопросы к экзамену Download (3 КБ)

Дисциплина "Параллельное программирование" (2011–2026)
Разделы дисциплины:
1. Введение в параллельное программирование
Краткий исторический экскурс в историю развития параллельных систем и вычислений, основные современные проблемы и перспективы развития параллельного программирования. Закон Мура. Закон Деннарда. Классификация вычислительных систем по Флинну. Их влияние на архитектуру вычислительных систем с возможностью параллельной обработки информации (взгляд с точки зрения параллельного программирования: SISD/SIMD/MIMD, CISC/RISC/VLIW).
2. Понятие производительности вычислительной системы и способы ее измерения
Пиковая и реальная производительность, единицы измерения, аналитические оценки, CPI/IPC, бенчмарки (LINPACK, SPEC CPU, Intel IOMeter, RMMA, 3DMark, AIDA64, CINBENCH). Проблема первого прохода, статистическая обработка результатов измерений.
3. Закон Амдала. Закон Густавсона-Барсиса
Теоретическая оценка выигрыша от распараллеливания. Оценка масштабируемости с ростом числа вычислителей
4. Средства аппаратной поддержки параллельного исполнения программного кода
Основные способы организации (микро)архитектуры современных вычислительных средств, поддержка со стороны разработчика, виды параллелизма. Конвейеризация выполнения микроопераций, ILP, векторный параллелизм (MMX, SSE, AVX, AMX), многопоточное выполнение кода (SMT, Hyper-Threading Technology), видеокарты с поддержкой технологии GPGPU, специализированные ускорители (Intel Xeon Phi, TPU/NPU), вычислительные кластеры и суперкомпьютеры, грид-системы.
5. Теоретические основы оценки эффективности параллельных программ
Граф «операции – операнды». Ярусно-параллельная форма. Зависимости по данным и по управлению. Расписание запуска подзадач. Критический путь, оценки теоретически минимального времени выполнения. Показатели эффективности параллельных алгоритмов: ускорение, эффективность, стоимость вычислений. Схемы параллельных вычислений: последовательная, пирамидальная, модифицированная. Оценка коммуникационной сложности параллельных алгоритмов.
6. Практическая оценка эффективности параллельных программ. Профилирование и оптимизация программных средств
Понятие и функции профайлера: Intel VTune, Intel Parallel Studio, AMD CodeAnalyst. Идентификация узких мест, понятие алгоритмической, высокоуровневой и микроархитектурной оптимизации, примеры оптимизации и рекомендации, анализ возможностей и качества кода современных компиляторов (ICC/IFC, MSVC, GCC, CLang, LLVM). Примеры программирования: классическое умножение матриц, буферизованное и блочное умножение матриц с оптимизацией работы подсистемы (кэш)памяти.
7. Программирование векторных расширений системы команд процессоров семейства x86
Расширение MMX: целочисленные типы данных, MM-регистры, система команд (векторные арифметические, логические, сдвиги, сравнения, пересылки данных, упаковки/распаковки), генерация констант. Расширение 3DNow: вещественные типы данных, векторные и горизонтальные команды, команды преобразования, быстрое вычисление обратных значений с использованием формул Ньютона-Рафсона. Расширение SSE: вещественные типы данных, XMM-регистры, команды пересылки данных, скалярные и векторные команды, арифметические и логические команды, команды сравнения, команды распаковки/упаковки и перемешивания, команды преобразования, команды префетча. Расширение SSE2: целочисленные и вещественные типы данных, система команд. Расширения SSE3 и SSSE3: дополнительные команды пересылки, горизонтальные команды, гетерогенные команды, обработка комплексных чисел. Расширения AVX, AVX2 и AVX-512: типы данных, YMM- и ZMM-регистры, команды маскирования операций, gather/scatter, broadcast, команды работы с битами. Обзор расширений AMX, GFNI, AES, SHA. Обзор организации расширения ARM NEON. Примеры программирования: обработка одномерных массивов (векторов), обработка матриц, обработка изображений масочными операторами, векторизация в задачах без явных признаков векторизации (формула Герона, ряды Тейлора).
8. Организация параллельного исполнения кода в операционной системе с вытесняющей многозадачностью
Потоки и процессы. Дескрипторы, приоритеты потоков и процессов, привязка к ядрам процессора. Примитивы синхронизации. Семафоры, мьютексы, критические секции. WinAPI, WaitForSingleObject/WaitForMultipleObjects. Проблема блокировок. SMP и NUMA системы. Введение в технологию OpenMP. Стандарт POSIX, введение в POSIX PThreads. Примеры программирования: поэлементное сложение векторов, умножение матриц.
9. Программирование с использованием интерфейса MPI
Принципы организации и программирования кластерных систем, кластеры и суперкомпьютеры. Сильно- и слабосвязные задачи. Интерфейс MPI. Блокирующие и неблокирующие обмены. Примитивы синхронизации. Топологии обмена данными. Виды обменов. Планировщик ресурсов SLURM: обзор основных возможностей. Примеры программирования: поэлементное сложение векторов, умножение матриц, алгоритмы Фокса и Кэнона, задача N тел.
10. Программирование в рамках концепции GPGPU
Концепция GPGPU. Основные инструментарии программирования: CUDA, OpenCL, STREAM, OpenACC. Организация GPU на аппаратном уровне: память, потоковые мультипроцессоры, организация обмена данными через шину PCI Express. Типы данных. Математические функции, типы округления. Сетка, блоки и нити (thread'ы). Группы потоков (WARP’ы). Конфигурация запуска CUDA-ядра. Синхронное и асинхронное исполнение кода. Барьерная синхронизация, синхронизация CPU и GPU. Обработка ошибок. Типы памяти GPU: глобальная, разделяемая, локальная, текстурная, константная, регистровая; организация, время доступа, кэширование. Примеры программирования: поэлементное сложение векторов, скалярное произведение векторов, транспонирование матрицы, сложение матриц, умножение матриц, задача N тел.
11. Грид-системы
Типы грид-систем: desktop grid, enterprise grid. Добровольные распределенные вычисления: организация, проекты (GIMPS, Folding@Home, etc.). Инструментарии для организации грид-систем: ***, Fresco, Globus Toolkit, HTCondor.
Грид-системы:
Лабораторная работа № 1 "Добровольные распределенные вычисления" Download (1,2 МБ)
Лабораторная работа № 2 "Конфигурация сервера проекта добровольных распределенных вычислений" Download (x МБ)
Алгоритмическая, высокоуровневая, микроархитектурная оптимизация:
Лабораторная работа № 3 "Методика измерения времени выполнения заданного фрагмента программы" Download (314 КБ)
Лабораторная работа № 4 "Использование инструкции CPUID для определения функциональных возможностей CPU" Download (365 КБ)
Лабораторная работа № 5 "Измерение латентности, темпа обмена данными и пропускной способности кэш-памяти процессора и оперативной памяти для заданной вычислительной системы" Download (780 КБ)
Лабораторная работа № 6 "Введение в алгоритмическую и высокоуровневую оптимизацию на пример задачи умножения матриц" Download (234 КБ)
Программирование векторных расширений (MMX, SSE, AVX):
Лабораторная работа № 7 "Использование векторных расширений системы команд процессора на примере решения задач обработки одномерных массивов" Download (317 КБ)
Лабораторная работа № 8 "Использование векторных расширений системы команд процессора на примере решения задачи умножения матриц" Download (x КБ)
Лабораторная работа № 9 "SIMD-оптимизация сверточных операторов обработки изображений на примере оператора Собела с использованием различных наборов команд" Download (379 КБ)
Программирование в рамках концепции GPGPU (CUDA, OpenCL, STREAM):
Лабораторная работа № 10 "Разработка программ с поддержкой технологии CUDA с использованием компилятора командной строки" Download (220 КБ)
Лабораторная работа № 11 "Определение параметров видеокарты с поддержкой технологии CUDA в среде Microsoft Visual Studio" Download (298 КБ)
Лабораторная работа № 12 "Измерение пропускной способности памяти видеокарт с поддержкой технологии CUDA" Download (175 КБ)
Лабораторная работа № 13 "Оптимизация работы с глобальной и разделяемой памятью для видеокарт с поддержкой технологии CUDA" Download (219 КБ)
Многопоточное программирование (WinAPI, OpenMP, PThreads):
...
Программирование с использованием интерфейса MPI:
...
Вопросы к экзамену Download (2 КБ)

Программа для численного решения задачи N тел

Дисциплина "Введение в специальность/направление подготовки" (2009–2017)
Вопросы к зачету Download (2 КБ)

Дисциплина "Программирование" (сокращенники)
Задание на контрольную работу Download (300 КБ)
Задание на курсовой проект Download (162 КБ)

Дисциплина "Теоретические основы организации многопроцессорных комплексов и систем" (сокращенники)
Задание на контрольную работу Download (1,2 МБ)

Дисциплина "Основы комбинаторной оптимизации" (2011–2026)
Задание на контрольную работу Download (143 КБ)

Дисциплины "Технологии программирования и инструментальные средства разработки систем искусственного интеллекта" / "Междисциплинарный курсовой проект" (2024–2026)
Задание на курсовую работу/проект Download (3,3 МБ)

Discipline "Computer Organization and Architecture" (2024–2025)
...

Discipline "Networks and Telecommunications" (2009–2011, 2024–2025)
...

Дисциплина "Алгоритмы и структуры данных" / "Algorithms and Data Structures" (2026)
...


Последнее обновление странички: 14.04.2026