Научно-технические семинары
- Семинары по архитектуре процессоров НТЦ Модуль NeuroMatrix (осень-весна, 2025-2026)
Текущие учебные дисциплины
- Параллельные вычислительные технологии (бакалавриат, СибГУТИ, 2 семестра, весна-осень, 2-3 курсы)
- Компиляторные технологии (бакалавриат, СибГУТИ, осень, 4 курс)
- Программирование встраиваемых систем (бакалавриат, СибГУТИ, весна, 3 курс)
- Архитектурно-ориентированная оптимизация кода (курс повышения квалификации, СибГУТИ)
Архив курсов
- Распределенная обработка информации (магистратура, СибГУТИ, осень-весна, 2019-2023)
- Параллельные программирование (магистратура, СибГУТИ, 2016-2018)
- Введение в параллельное программирование (семинары ИФП СО РАН, 2015-2016)
- Параллельные и распределенные вычисления (Школа анализа данных Яндекс, НГУ, 2014-2016)
- Высокопроизводительные вычислительные системы (СибГУТИ, 2010-2016)
- Структуры и алгоритмы обработки данных (СибГУТИ, 2012-2016)
- Теория функционирования распределенных вычислительных систем (СибГУТИ, 2007-2013)
- Теория вычислительных процессов (СибГУТИ, 2006-2012)
Контакты
- Курносов Михаил Георгиевич, д.т.н., профессор, профессор кафедры вычислительных систем СибГУТИ
- WWW: https://www.mkurnosov.net
- E-mail: mkurnosov[at]sibguti.ru
- Telegram: [at]mkurnosov
- Offline: СибГУТИ, Кафедра вычислительных систем, к. 403а
Процессоры цифровой обработки сигналов НТЦ Модуль NeuroMatrix
Здесь собраны материалы цикла семинаров по архитектуре процессоров цифровой обработки сигналов НТЦ Модуль NeuroMatrix.
Записи семинаров
Материалы семинаров
- Семинар 1. Архитектура СБИС К1879ВМ8Я (NM6408) // Слайды, nm-seminar-01.tar.gz
- Семинар 2. Карта памяти и межпроцессорные взаимодействия SoC NM6408 // Слайды, nm-seminar-01.tar.gz
- Семинар 3. Обмен данными с NM6408, параллельные вычисления на NMC-ядрах // Слайды, nm-seminar-01.tar.gz
Erlang Q&A
Атомы
Сколько атомов может создать Erlang процесс?
Небольше чем заданный при запуске виртуальной машины BEAM размер глобальной таблицы атомов. По умолчанию таблица вмещает 1_048_576 атомов. https://www.erlang.org/doc/system/system_limits.html#atoms
Атомы хранятся в глобальной таблице, которая разделяется всеми процессами виртуальной машины BEAM.
Размер таблицы можно увеличить при старте BEAM (опция командной строки erl +t).
Таблица очищается при завершении BEAM и не очищается сборщиком мусора во время выполнения.
Нужно избегать динамического порождения атомов (list_to_atom/1, binary_to_atom/1).
Как узнать предельное количество атомов в глобальной таблице?
Функция erlang:system_info(atom_limit)
atom_count- количество атомов в таблице текущего узлаatom_limit- максимальное количество атомов в таблице текущего узла
Размер памяти занятый атомами:
erlang:memory(atom)- размер памяти занятой атомами и резервом места под нихerlang:memory(atom_used)- размер памяти занятой атомами
Как переполнить таблицу атомов?
При переполнении таблицы выводится сообщение "no more index entries in atom_tab (max=1048576)",
виртуальная машина аварийно завершает работу "Crash dump is being written to...".
-module(atoms).
-export([gen/1]).
gen(N) when is_integer(N), N > 0 ->
mem_usage("Before"),
gen_rec(N),
mem_usage("After").
gen_rec(1) -> create_atom(1);
gen_rec(N) when is_integer(N), N > 1 ->
create_atom(N - 1),
gen_rec(N - 1).
create_atom(N) ->
try
AtomName = "atom_" ++ integer_to_list(os:system_time(microsecond)) ++ "_" ++ integer_to_list(rand:uniform(1000000)),
list_to_atom(AtomName)
catch
error:Reason -> io:format("Can not create atom: N = ~p (~p)~n", [N, Reason])
end.
mem_usage(Str) ->
io:format("~p: atoms table: reserved ~p atoms, used ~p atoms, memory reserved + used ~.2f MiB, memory used ~.2f MiB~n",
[Str, erlang:system_info(atom_limit), erlang:system_info(atom_count),
erlang:memory(atom) / 1024 / 1024, erlang:memory(atom_used) / 1024 / 1024]).
Компилируем и запускаем генерацию > 2_000_000 атомов:
$ erlc ./atoms.erl
$ erl +t 2000000 -eval "atoms:gen(2_900_000)." -noshell -s init stop
Списки
Как реализованы списки в Erlang?
Тип list в Erlang - это базовый тип поддерживаемый виртуальной машиной BEAM. Он реализован как односвязный список (singly linked list), в котором каждый элемент (cons cell) содержит указатель на голову (head, car) и указатель на хвост (tail, cdr) - следующий элемент в списке. Реализация на C:
struct cons_cell {
Eterm *head; /* Указатель на значение (value) */
Eterm *tail; /* Указатель на следующий элемент */
};
- The BEAM Book: Understanding the Erlang Runtime System. "Chapter 4.3. Lists" // https://blog.stenmans.org/theBeamBook/?ref=crustofcode.com#_lists
Каждая ячейка (cons cell) занимает два машинных слова BEAM.
Список из N элементов занимает минимум 2 * N машинных слов для указателей head и tail. Если элемент помещается в машинное слово, то его значение хранится в head вместо указателя. Например, список из 1 миллиона целых чисел (small integers) требует 1 миллиона cons ячеек - на 64-битной машине это 2 * 8 * 10^6 байт.
Операции добавления элементов:
- Prepend: добавления элемента Head в начала списка
Tail(prepend, cons):[Head | Tail], требует только корректировки указателяtailэлементаHead, время выполнения O(1) - Append: конкатенация списков
L3 = L1 ++ L2,L3 = lists:append(L1, L2): выполняет копирование элементов L1 и связывает последний элемент со головой L2, время выполнения O(|L1|).
Чем отличаются [1, 2 | [a, b, c]] и [1, 2] ++ [a, b, c]?
- (быстрее) Выражение
[1, 2 | [a, b, c]]- это операция prepend, связывает указательtailэлемента 2 с головой списка[a, b, c], выполняется только корректировка указателя за время O(1). - (медленнее) Выражение
[1, 2] ++ [a, b, c]- это операция append; создается копия списка[1, 2], элемент 2 нового списка связывается с головой списка[a, b, c], необходимо выполнить копирование первого списка и откорректировать указатель.
Где хранятся списки и чем ограничена их длина?
Списки хранятся в куче (heap) процесса. Длина списка ограничена доступной памятью для кучи.
По умолчанию куча может расти до ограничений BEAM и операционной системы. Сборщик мусора (garbage collector, GC) увеличивает кучу по мере необходимости. Ограничения на размер кучи для процесса можно установить через вызов функции process_flag(max_heap_size, ...).
Дерево супервизоров распределенной СУБД CouchDB
CouchDB — документо-ориентированная распределенная система управления базами данных с открытым исходным кодом (NoSQL). Одной из особенностей является поддержка репликации с несколькими ведущими узлами (multi-primary, multi-master).
https://github.com/apache/couchdb
На основе CouchDB построены: IBM Cloudant, СУБД Енисей.
Запуск Erlang VM (BEAM)
Когда CouchDB запускается из релиза (например, _rel/bin/couch start), Erlang VM (BEAM) инициализирует базовую среду и запускает
два критчески важных приложения, без которых не может работать ни один Erlang-узел: kernel и stdlib.
kernelотвечает за базовые сервисы: загрузку кода, логирование, работу с файловой системой, управление приложениями.stdlib- стандартная библиотека Erlang/OTP.
Старт kernel и создание контроллера приложений
В процессе запуска приложения kernel его внутренняя логика создает процесс, который регистрируется под именем application_controller.
Он существует с момента старта узла до его остановки.
Запуск приложения CouchDB
Для запуска приложения couch (src/couch/src/couch.app.src) контроллер application_controller выполняет следующие действия:
- запускает приложения из списка зависимостей приложения couch:
{applications, [kernel, stdlib, ..., ibrowse, mochiweb, ...]} - из стартового модуля вызывает
couch_app:start/2, который создает дерево супервизоров (couch_sup:start_link()).
Дерево супервизоров CouchDB

Параллельные вычислительные технологии (ПВТ)
Осенний семестр 2025
17 лекций, 17 практических занятий, курсовая работа, экзамен
Экзамен
Курсовая работа
Материалы лекций
- Лекция 1. Вводная лекция: вычислительные системы с распределенной памятью
- Лекция 2. Стандарт MPI. Двусторонние обмены
- Лекция 3. Стандарт MPI. Коллективные операции
- Лекция 4. Параллельное численное интегрирование
- Лекция 5. Матричные вычисления
- Лекция 6. Стандарт MPI. Производные типы данных
- Лекция 7. Параллельное решение СЛАУ
- Лекция 8. Параллельные сеточные вычисления
- Лекция 9. Параллельные методы решения задачи N-тел
Практические работы
Лабораторные работы выполняются в операционной системе GNU/Linux на языках программирования C/C++.
- Работа 1. Основные схемы обмена сообщениями // deadline TBA
- Работа 2. Параллельное численное интегрирование // deadline TBA
- Работа 3. Параллельное умножение матрицы на вектор (SGEMV) // deadline TBA
- Работа 4. Параллельное решение стационарного двумерного уравнения Лапласа. Двумерная декомпозиция расчетной области // deadline TBA
Материалы по курсу
Параллельные вычисления
- Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования. - М.: Вильямс, 2003.
- Лацис А. Параллельная обработка данных. - М.: Академия, 2010.
- Расс Миллер, Лоренс Боксер. Последовательные и параллельные алгоритмы. - М.: Бином, 2009
- Ian Foster. Designing and Building Parallel Programs
Многопоточное программирование
- Уильямс Э. Параллельное программирование на С++ в действии. Практика разработки многопоточных программ. - М.: ДМК Пресс, 2012.
- Шамим Эхтер, Джейсон Робертс. Многоядерное программирование. - СПб.: Питер, 2010.
- Maurice Herlihy, Nir Shavit. The Art of Multiprocessor Programming, Morgan Kaufmann, 2012
- Darryl Gove. Multicore Application Programming: for Windows, Linux, and Oracle Solaris, Addison-Wesley, 2010
- Richard H. Carver, Kuo-Chung Tai. Modern Multithreading : Implementing, Testing, and Debugging Multithreaded Java and C++/Pthreads/Win32 Programs, Wiley-Interscience, 2005
- Gadi Taubenfeld. Synchronization Algorithms And Concurrent Programming, Pearson, 2006
OpenMP
- http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf OpenMP 4.0 Specification
- Антонов А.С. Параллельное программирование с использованием технологии OpenMP. - М.: МГУ, 2009
- Алексей Колосов, Андрей Карпов, Евгений Рыжков. 32 подводных камня OpenMP при программировании на Си++, 2009
- Антонов А.С. Технологии параллельного программирования MPI и OpenMP. - М.: МГУ, 2012
- Tim Mattson. A “Hands-on” Introduction to OpenMP
- Advanced OpenMP Topics // NAS Webinar, 2012
MPI
- MPI 4.0 Standard, 2021
- Курносов М.Г. Алгоритмы коллективных операций стандарта MPI. - М.: Горячая Линия - Телеком, 2025. - 288 с. ISBN 978-5-9912-1149-9
- Supalov A. Inside MPI, 2020
- Антонов А.С. Параллельное программирование с использованием технологии MPI. - М.: МГУ, 2004
- Pavan Balaji, Torsten Hoefler. MPI for Dummies // ACM Symposium on Principles and Practice of Parallel Programming, 2013
- Pavan Balaji, Torsten Hoefler. Advanced Parallel Programming with MPI-1, MPI-2, and MPI-3 // ACM Symposium on Principles and Practice of Parallel Programming, 2013
- Rolf Rabenseifner, Georg Hager, Gabriele Jost. Hybrid MPI and OpenMP Parallel Programming // Day-long tutorial on Hybrid MPI and OpenMP Parallel Programming from SC13, 2013
Архитектура вычислительных систем
- Хорошевский В.Г. Архитектура вычислительных систем. - М.: МГТУ им. Н. Э. Баумана, 2008.
- Корнеев В.В. Вычислительные системы. – М.: Гелиос АРВ, 2004. – 512 с.
- Степаненко С.А. Мультипроцессорные среды суперЭВМ. Масштабирование эффективности. – М.: ФИЗМАТЛИТ, 2016. – 312 с.
- Столлингс В. Структурная организация и архитектура компьютерных систем. - М.: Вильямс, 2002
- John L. Hennessy, David A. Patterson. Computer Architecture: A Quantitative Approach, 5 ed., Morgan Kaufmann, 2011
- Randal E. Bryant, David R. O'Hallaron. Computer Systems: A Programmer's Perspective. - Addison-Wesley, 2010
- Denis Bakhvalov. Performance Analysis and Tuning on Modern CPUs: Squeeze the last bit of performance from your application, 2020
Параллельные вычислительные технологии (ПВТ)
Осенний семестр 2025
17 лекций, 17 практических занятий, курсовая работа, экзамен
Экзамен
Курсовая работа
- Темы курсовых работ Deadline: защита курсовой работы 10, 17, 24 декабря 2025 г.
- Шаблон отчета
Материалы лекций
- Лекция 1. Вводная лекция: вычислительные системы с распределенной памятью
- Лекция 2. Стандарт MPI. Двусторонние обмены
- Лекция 3. Стандарт MPI. Коллективные операции
- Лекция 4. Параллельное численное интегрирование
- Лекция 5. Матричные вычисления
- Лекция 6. Стандарт MPI. Производные типы данных
- Лекция 7. Параллельное решение СЛАУ
- Лекция 8. Параллельные сеточные вычисления
- Лекция 9. Параллельные методы решения задачи N-тел
Практические работы
Лабораторные работы выполняются в операционной системе GNU/Linux на языках программирования C/C++.
- Работа 1. Основные схемы обмена сообщениями // deadline 05.10.2025
- Работа 2. Параллельное численное интегрирование // deadline 19.10.2025
- Работа 3. Параллельное умножение матрицы на вектор (SGEMV) // deadline 09.11.2024
- Работа 4. Параллельное решение стационарного двумерного уравнения Лапласа. Двумерная декомпозиция расчетной области // deadline 30.11.2025
- Курсовая работа -- защита 10, 17, 24 декабря 2025.
Материалы по курсу
Параллельные вычисления
- Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования. - М.: Вильямс, 2003.
- Лацис А. Параллельная обработка данных. - М.: Академия, 2010.
- Расс Миллер, Лоренс Боксер. Последовательные и параллельные алгоритмы. - М.: Бином, 2009
- Ian Foster. Designing and Building Parallel Programs
Многопоточное программирование
- Уильямс Э. Параллельное программирование на С++ в действии. Практика разработки многопоточных программ. - М.: ДМК Пресс, 2012.
- Шамим Эхтер, Джейсон Робертс. Многоядерное программирование. - СПб.: Питер, 2010.
- Maurice Herlihy, Nir Shavit. The Art of Multiprocessor Programming, Morgan Kaufmann, 2012
- Darryl Gove. Multicore Application Programming: for Windows, Linux, and Oracle Solaris, Addison-Wesley, 2010
- Richard H. Carver, Kuo-Chung Tai. Modern Multithreading : Implementing, Testing, and Debugging Multithreaded Java and C++/Pthreads/Win32 Programs, Wiley-Interscience, 2005
- Gadi Taubenfeld. Synchronization Algorithms And Concurrent Programming, Pearson, 2006
OpenMP
- http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf OpenMP 4.0 Specification
- Антонов А.С. Параллельное программирование с использованием технологии OpenMP. - М.: МГУ, 2009
- Алексей Колосов, Андрей Карпов, Евгений Рыжков. 32 подводных камня OpenMP при программировании на Си++, 2009
- Антонов А.С. Технологии параллельного программирования MPI и OpenMP. - М.: МГУ, 2012
- Tim Mattson. A “Hands-on” Introduction to OpenMP
- Advanced OpenMP Topics // NAS Webinar, 2012
MPI
- MPI 4.0 Standard, 2021
- Курносов М.Г. Алгоритмы коллективных операций стандарта MPI. - М.: Горячая Линия - Телеком, 2025. - 288 с. ISBN 978-5-9912-1149-9
- Supalov A. Inside MPI, 2020
- Антонов А.С. Параллельное программирование с использованием технологии MPI. - М.: МГУ, 2004
- Pavan Balaji, Torsten Hoefler. MPI for Dummies // ACM Symposium on Principles and Practice of Parallel Programming, 2013
- Pavan Balaji, Torsten Hoefler. Advanced Parallel Programming with MPI-1, MPI-2, and MPI-3 // ACM Symposium on Principles and Practice of Parallel Programming, 2013
- Rolf Rabenseifner, Georg Hager, Gabriele Jost. Hybrid MPI and OpenMP Parallel Programming // Day-long tutorial on Hybrid MPI and OpenMP Parallel Programming from SC13, 2013
Архитектура вычислительных систем
- Хорошевский В.Г. Архитектура вычислительных систем. - М.: МГТУ им. Н. Э. Баумана, 2008.
- Корнеев В.В. Вычислительные системы. – М.: Гелиос АРВ, 2004. – 512 с.
- Степаненко С.А. Мультипроцессорные среды суперЭВМ. Масштабирование эффективности. – М.: ФИЗМАТЛИТ, 2016. – 312 с.
- Столлингс В. Структурная организация и архитектура компьютерных систем. - М.: Вильямс, 2002
- John L. Hennessy, David A. Patterson. Computer Architecture: A Quantitative Approach, 5 ed., Morgan Kaufmann, 2011
- Randal E. Bryant, David R. O'Hallaron. Computer Systems: A Programmer's Perspective. - Addison-Wesley, 2010
- Denis Bakhvalov. Performance Analysis and Tuning on Modern CPUs: Squeeze the last bit of performance from your application, 2020
Параллельные вычислительные технологии (ПВТ)
Весенний семестр 2026
17 лекций, 17 практических занятий, зачет
Зачет
- TBD
Материалы лекций
- Лекция 1. Многопроцессорные вычислительные системы
- Лекция 2. Оптимизация работы с кеш-памятью процессора
- Лекция 3. Оптимизация ветвлений и размещения кода
- Лекция 4. Многопоточное программирование POSIX Threads
- Лекция 5. Стандарт OpenMP: умножение матрицы на вектор
- Лекция 6. Стандарт OpenMP: численное интегрирование
- Лекция 7. Стандарт OpenMP: решение СЛАУ
- Лекция 8. Стандарт OpenMP: параллельные сеточные вычисления
- Лекция 9. Стандарт OpenMP: гравитационная задача N тел
Практические работы
Лабораторные работы выполняются в операционной системе GNU/Linux на языках программирования C/C++.
- Задание 1. Оптимизация доступа к памяти, циклов и ветвлений, (src: pct-spring-lab1.tar.gz) Deadline: 15.03.2026
- Задание 2. Распараллеливание умножения матрицы на вектор (DGEMV), Deadline: 05.04.2026
- Задание 3. Параллельное численное интегрирование, Deadline: 26.04.2026
- Задание 4. Гравитационная задача n-тел (n-body), Deadline: 10.05.2026
- Задание 5. Параллелизм задач, Deadline: до зачетной недели
Материалы по курсу
Параллельные вычисления
- Эндрюс Г. Основы многопоточного, параллельного и распределенного программирования. - М.: Вильямс, 2003.
- Лацис А. Параллельная обработка данных. - М.: Академия, 2010.
- Расс Миллер, Лоренс Боксер. Последовательные и параллельные алгоритмы. - М.: Бином, 2009
- Ian Foster. Designing and Building Parallel Programs
Многопоточное программирование
- Уильямс Э. Параллельное программирование на С++ в действии. Практика разработки многопоточных программ. - М.: ДМК Пресс, 2012.
- Шамим Эхтер, Джейсон Робертс. Многоядерное программирование. - СПб.: Питер, 2010.
- Maurice Herlihy, Nir Shavit. The Art of Multiprocessor Programming, Morgan Kaufmann, 2012
- Darryl Gove. Multicore Application Programming: for Windows, Linux, and Oracle Solaris, Addison-Wesley, 2010
- Richard H. Carver, Kuo-Chung Tai. Modern Multithreading : Implementing, Testing, and Debugging Multithreaded Java and C++/Pthreads/Win32 Programs, Wiley-Interscience, 2005
- Gadi Taubenfeld. Synchronization Algorithms And Concurrent Programming, Pearson, 2006
OpenMP
- http://www.openmp.org/mp-documents/OpenMP4.0.0.pdf OpenMP 4.0 Specification
- Антонов А.С. Параллельное программирование с использованием технологии OpenMP. - М.: МГУ, 2009
- Алексей Колосов, Андрей Карпов, Евгений Рыжков. 32 подводных камня OpenMP при программировании на Си++, 2009
- Антонов А.С. Технологии параллельного программирования MPI и OpenMP. - М.: МГУ, 2012
- Tim Mattson. A “Hands-on” Introduction to OpenMP
- Advanced OpenMP Topics // NAS Webinar, 2012
Архитектура вычислительных систем
- Хорошевский В.Г. Архитектура вычислительных систем. - М.: МГТУ им. Н. Э. Баумана, 2008.
- Корнеев В.В. Вычислительные системы. – М.: Гелиос АРВ, 2004. – 512 с.
- Степаненко С.А. Мультипроцессорные среды суперЭВМ. Масштабирование эффективности. – М.: ФИЗМАТЛИТ, 2016. – 312 с.
- Столлингс В. Структурная организация и архитектура компьютерных систем. - М.: Вильямс, 2002
- John L. Hennessy, David A. Patterson. Computer Architecture: A Quantitative Approach, 5 ed., Morgan Kaufmann, 2011
- Randal E. Bryant, David R. O'Hallaron. Computer Systems: A Programmer's Perspective. - Addison-Wesley, 2010
- Denis Bakhvalov. Performance Analysis and Tuning on Modern CPUs: Squeeze the last bit of performance from your application, 2020
Компиляторные технологии
Осенний семестр, 4 курс, 8 лекций, 17 практических занятий, экзамен
Материалы лекций и практик
- Лекция 1. [Download]
- Лекция 2. [Download]
- Лекция 3. [Download]
- Лекция 4. [Download]
- Лекция 5. [Download]
- Лекция 6. [Download]
- Лекция 7. [Download]
Практические занятия
- Задание 1. Calculator (deadline: 14.09.2025)
- Задание 2. Frontend-компилятора: драйвер, лексический анализатор, синтаксический анализ (рекурсивный спуск, построение AST), семантический анализ (deadline: 04.10.2025)
- Задание 3. LLVM IR: трансляция языковых конструкций в IR (deadline: 12.10.2025)
- Задание 4. Трансляция конструкций учебного языка в LLVM IR (deadline: 01.11.2025)
- Задание 5. Трансляция выражений работы с массивами и структурами в LLVM IR (deadline: 16.11.2025)
- Задание 6. LLVM Plugin API (deadline: 23.11.2025)
- Задание 7. LLVM JIT (deadline: 07.12.2025)
Экзамен
- Вопросы [Download]
Программирование встраиваемых систем
Весенний семестр, 3 курс, 15 лекций, 15 практических занятий (5 групп), экзамен
Лекции
- Лекция 1. Архитектура встраиваемых систем
Практические занятия
- Занятие 1. Сборка средств-кросс компиляции (building a cross-compiling toolchain)
- Занятие 2. Загрузчик U-Boot (bootloader U-Boot)
- Занятие 3. Кросс-компиляция ядра Linux (fetching kernel + cross-compiling)
- Занятие 4. Формирование корневой ФС на базе BusyBox (embedded system with BusyBox)
- Занятие 5. Файлы устройств, загрузка с блочного устройства (accessing hardware devices + filesystems)
- Занятие 6. Кросс-компиляция приложения
- Занятие 7. Защита
- Занятие 8. Формирование прошивки системой сборки Buildroot (using a build system Buildroot)
- Занятие 9. Защита
- Занятие 10. Разработка модуля ядра Linux
- Занятие 11. Защита
- Занятие 12. Структура драйвера сетевого контроллера Ethernet
- Занятие 13. Защита
- Занятие 14. Структура драйвера WiFi-адаптера
- Занятие 15. Защита
Материалы
Архитектурно-ориентированная оптимизация кода
Курс повышения квалификации по заказу предприятия (~ 5 дней).
Keywords
Intel64, ILP/TLP, DRAM/SRAM,
k-way set-associative cache, cache line, cache hit,
cache misprediction, false sharing, struct splitting,
AoS-SoA, MESIF,
branch prediction, branchless code, data hazard, loop unrolling,
out-of-order execution, code vectorization (avx2, avx-512),
TLB, huge pages, THP, NUMA, Linux memory affinity,
first touch policy, NUMA balancing, NUMAStat, Intel TMAM, perf, toplev,
MPI, MPI RMA, MPI Hybrid MPI + OpenMP, MPI collective operations.
Материалы лекций и практик
- Структурная организация процессоров с архитектурой Intel 64. Понятие архитектуры и микроархитектуры процессора. Уровни параллелизма ILP/TLP [Download]
- Организация оперативной памяти (DRAM/SRAM, многоканальность). Cбор информации о конфигурации целевой системы GNU/Linux [Download]
- Кеш память процессора. Методы отображения адресов. Множественноассоциативное отображение. Протоколы поддержания согласованности кеш-памяти (Intel 64). Атомарные операции x86-64. Оптимизация локальности обращения к памяти. Оптимизация кеширования структур данных. Анализ эффективности использования кешпамяти с помощью perf [Download]
- Оптимизация кода для суперскалярного ядра Intel 64. Оптимизация предсказания ветвлений (branch prediction). Устранение ветвлений (branchless code). Оптимизация загрузки суперскалярного ядра: конфликты данных (data hazards), loop unrolling, внеочередное выполнение инструкций. Векторизация кода (AVX2/AVX512) [Download]
- Оптимизация трансляции адресов (TLB). Большие страницы памяти (huge pages, transparent huge pages). Выделение больших страниц памяти и использование в программах [Download]
- Архитектура NUMA-систем. Адресное пространство процесса и политики выделения памяти GNU/Linux (memory affinity). Политики выделения физических страниц памяти с NUMA-узлов (first touch policy). Мониторинг загрузки и автоматическая балансировка NUMAузлов (NUMATop, vmstat) [Download]
- Методика анализа производительности Intel Top-Down Microarchitecture Analysis Method [Download]
- Масштабируемость интерфейса MPI и его реализаций [Download]
- Гибридные параллельные программы MPI+OpenMP. Оптимизация обменов с использованием разделяемой памяти вычислительных узлов (MPI + MPI 3.0 RMA Shared Memory) [Download]
- Коллективные операции MPI (подходы к оптимизации) [Download]
Курс может быть адаптирован под интересы целевого предприятия/компании