Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...YandexЕвгений Крутько, НИЦ «Курчатовский институт».
В докладе на примере программы моделирования динамики движения конструкций по методу конечных элементов рассматриваются возможности и практика распараллеливания вычислений. Речь в нём пойдёт как о технике создания новых вычислительных потоков, так и об использовании стандартов openMP и MPI.
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey PaznikovЛЕКЦИЯ 1. Актуальность параллельных вычислений. Анализ параллельных алгоритмов. Многоядерные вычислительные систем с общей памятью
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey PaznikovДоклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey PaznikovЛЕКЦИЯ 2. Коллективные операции в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey PaznikovЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey PaznikovЛЕКЦИЯ 1. Основные понятия стандарта MPI. Дифференцированные обмены
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python MeetupPython AST: между исходным текстом и байт-кодом / Николай Карелин / Системный архитектор VPI Development Center
Николай познакомит слушателей с деталями устройства Python AST и, в частности, расскажет некоторые интересные факты о работе диалекта Hy.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Использование юнит-тестов для повышения качества разработкиvictor-yastrebovВ докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey PaznikovЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияAlexey PaznikovЛЕКЦИЯ 1. Введение в параллельные вычисления
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Методы поиска уязвимостейsolertiaО том, как ищут уязвимости в программах и проверяют их на возможность эксплуатации. А еще об инструментарии для фаззинга, анализе поведения программ, проверке исходного кода на опасные ошибки.
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarovaЭто моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)OnticoВ эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
ПВТ - весна 2015 - Лекция 1. Актуальность параллельных вычислений. Анализ пар...Alexey PaznikovЛЕКЦИЯ 1. Актуальность параллельных вычислений. Анализ параллельных алгоритмов. Многоядерные вычислительные систем с общей памятью
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Кулагин И.И., Пазников А.А., Курносов М.Г. Оптимизация информационных обменов...Alexey PaznikovДоклад Кулагина И.И., Пазникова А.А., Курносова М.Г. "Оптимизация информационных обменов в параллельных PGAS-программах" на 3-й Всероссийской научно-технической конференции «Суперкомпьютерные технологии» (СКТ-2014)
29 сентября – 4 октября 2014 г., с. Дивноморское
Лекция 2. Коллективные операции в MPI. Параллельные алгоритмы случайного блуж...Alexey PaznikovЛЕКЦИЯ 2. Коллективные операции в стандарте MPI
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
ПВТ - весна 2015 - Лекция 2. POSIX Threads. Основные понятия многопоточного п...Alexey PaznikovЛЕКЦИЯ 2. POSIX Threads. Жизненный цикл потоков. Планирование. Синхронизация
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
Лекция 1. Основные понятия стандарта MPI. Дифференцированные обменыAlexey PaznikovЛЕКЦИЯ 1. Основные понятия стандарта MPI. Дифференцированные обмены
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
http://cpct.sibsutis.ru/~apaznikov/teaching
Python AST / Николай Карелин / VPI Development Center [Python Meetup 27.03.15]Python MeetupPython AST: между исходным текстом и байт-кодом / Николай Карелин / Системный архитектор VPI Development Center
Николай познакомит слушателей с деталями устройства Python AST и, в частности, расскажет некоторые интересные факты о работе диалекта Hy.
Python Meetup - встречи минского сообщества любителей языка программирования Python.
Присоединяйся к нам!
Мы в twitter: https://twitter.com/pythonminsk
Мы на youtube: http://www.youtube.com/pythonMinsk
Мы на slideshare: http://www.slideshare.net/MinskPythonMeetup
Использование юнит-тестов для повышения качества разработкиvictor-yastrebovВ докладе рассмотрены подходы к созданию надежных юнит-тестов, которые просты в поддержке и модернизации, а также принципы создания кода пригодного для покрытия автотестами. Приведены два способа внедрения зависимости: с использованием конструктора тестируемого объекта, а также с использованием подхода "выделить и переопределить". Каждый из способов разобран на примере, демонстрирующем особенности его реализации и применения. Приведен ряд практических советов, нацеленных на создание надежных юнит-тестов. Использование на практике приведенных подходов и принципов позволяет упростить процесс поддержки и модификации существующего кода, а также дает уверенность в надежности работы добавляемого нового функционала. В конечном итоге это приводит к повышению качества разрабатываемого продукта.
ПВТ - весна 2015 - Лекция 7. Модель памяти С++. Внеочередное выполнение инстр...Alexey PaznikovЛЕКЦИЯ 7. Модель памяти С++. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения
Курс "Параллельные вычислительные технологии" (ПВТ), весна 2015
Сибирский государственный университет телекоммуникаций и информатики
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
http://cpct.sibsutis.ru/~apaznikov
ПВТ - осень 2014 - лекция 1 - Введение в параллельные вычисленияAlexey PaznikovЛЕКЦИЯ 1. Введение в параллельные вычисления
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
Методы поиска уязвимостейsolertiaО том, как ищут уязвимости в программах и проверяют их на возможность эксплуатации. А еще об инструментарии для фаззинга, анализе поведения программ, проверке исходного кода на опасные ошибки.
Intel IPP Samples for Windows - работа над ошибкамиTatyanazaxarovaЭто моя очередная заметка о том, как PVS-Studio делает программы более надёжными. То есть где, и какие ошибки он обнаруживает. На этот раз под молоток попали примеры, демонстрирующие работу с библиотекой IPP 7.0 (Intel Performance Primitives Library).
Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)OnticoВ эпоху распределённых архитектур и микросервисов как никогда актуальными становятся вопросы — как эффективно сериализовать и передать данные. Большинство решает данный вопрос просто — используют стандартный, универсальный и всем понятный формат JSON. Другие же, ориентируясь на производительность, ищут в интернете бенчмарки и выбирают protobuf или msgpack.
Мы протестировали разные реализации статически (thrift, protocol buffers) и динамически (json, msgpack) типизированных протоколов для python; сравнили их производительность в разных сценариях, возможности, внутреннее устройство, удобство разработки.
Я расскажу о результатах нашего исследования, особенностях "приготовления" библиотек и выявленных подводных камнях.
Aleksei Milovidov "Let's optimize one aggregate function in ClickHouse"FwdaysLet's calculate an average of one column for each key, like the following query: SELECT key, avg(value) FROM table GROUP BY key. What can be more simple? But the question is: what is the most efficient way to do it? How to write code to achieve maximum performance on a variety of hardware?
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Platonov SergeyКто-то верно подметил, что разработчики статических анализатора часто сталкиваются с "проблемой айсберга". Им сложно объяснить разработчикам, почему сложно написать и развивать статические анализаторы кода. Дело в том, что сторонние наблюдатели видят только вершину всего процесса, так как им доступен для изучения только простой интерфейс, который предоставляют анализаторы для взаимодействия с миром. Это ведь не графический редактор с сотнями кнопок и рычажков. В результате и возникает ощущение, что раз прост интерфейс взаимодействия, то и прост продукт. На самом деле статические анализаторы кода — это сложные программы, в которых живут и взаимодействуют разнообразнейшие методы поиска дефектов. В них реализуется множество экспертные системы, выдающие заключения о коде на основе как точных, так и эмпирических алгоритмах. В парном докладе, основатели анализатора PVS-Studio расскажут о том, как незаметно потратить 10 лет, чтобы написать хороший анализатор. Дьявол кроется в деталях!
Haskell Lite - presentation for DevDay about Haskell languageAlexander GraninPresentation about Haskell programming language.
DevDay, 31.05.2013, Novosibirsk
Video: http://www.youtube.com/watch?v=ieOhEX1RCB8
HaskellDevDayФункциональное программирование в примерах.
Язык Haskell: характеристики, история, сильные и слабые стороны, истории успеха и неудач.
Спецификация Haskell’98: синтаксис, компиляторы, интепретаторы, документация, IDE.
Особенности языка: тип Maybe, списки, классы типов, основы монад.
Библиотеки и фреймворки: Parsec, GenXml, HaXml
DSL
На десерт что-то из Existential Types, State Monad, ST Monad, Monad Transformers.
Статический анализ кода: Что? Как? Зачем?Andrey KarpovМетодология статического анализа год за годом зарекомендовывает себя в поисках дефектов в исходном коде программ.
Максим расскажет про:
- методологию статического анализа и какие плюсы и минусы у нее есть;
- технологии этой методологии, которые позволяют выявлять разнообразнейшие дефекты в коде;
- интересные примеры ошибок в реальных проектах, которые были найдены при помощи статического анализа;
- интеграцию инструментов статического анализа в проекты любой сложности, и почему так важно регулярное использование подобных инструментов.
разработка серверов и серверных приложений лекция №3etyumentcevВ третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
разработка серверов и серверных приложений лекция №3Eugeniy TyumentcevВ третьей главе рассматриваются базовые свойства акторов, описанные в PhD диссертации Gul Agha: каждый актор имеет адрес, большой почтовый ящик, куда доставляются сообщения, адресованные актору и поведение. В ответ на входящее сообщение актор может отправить конечный набор сообщений другим акторам и/или создать конечное число новых акторов и/или поменять свое поведение для обработки следующего сообщения.
В рамках данного курса будет разработана библиотека для разработки параллельных приложений на платформе .NET, построенная по модели акторов.
Исходные коды библиотеки будут выкладываться на GitHub: https://github.com/hwdtech/HWdTech.DS
Код библиотеки будет разработан с использованием следующих принципов, приемов и методик:
S.O.L.I.D. - принципы
Unit-tests
Mock
IoC контейнеры
Для удобства слушателей курса краткий обзор данных практик приведен в Главе 4.
ПВТ - осень 2014 - Лекция 6 - Атомарные операции. Внеочередное выполнение инс...Alexey PaznikovЛЕКЦИЯ 6. Атомарные операции. Внеочередное выполнение инструкций. Барьеры памяти. Семантика захвата-освобождения. Модель памяти C++
Курс "Параллельные вычислительные технологии" (ПВТ), осень 2014
Сибирский государственный университет телекоммуникаций и информатики
преподаватель:
Пазников Алексей Александрович
к.т.н., доцент кафедры вычислительных систем СибГУТИ
2. План вебинара:
1. Адресное пространство процесса в Linux. Основы управления памятью в
современных ОС.
2. Управление памятью в GO.
3. Оптимизация GO программ. Toolchain и примеры. Cgo.
4. Адресное пространство процесса в Linux. Stack
- LIFO структура данных.
- Ограничен ОС.
- Элемент данных - stack frame.
Представляет собой память под
локальные переменные, аргументы
и возвращаемые значения функции.
- Размер stack frame'а известен на
этапе компиляции, количество - нет.
- Память очищается автоматически.
5. Адресное пространство процесса в Linux. Heap
- произвольный доступ
- ОС не ограничивает размер
- размер не известен на этапе компиляции, нужно запрашивать память у ОС
- нет автоматической очистки
7. Адресное пространство процесса в Linux.
Stack VS Heap
Stack Heap
Есть ограничения по максимальному размеру Нет ограничений по максимальному размеру
Статичен, размер stack frame'а известен на этапе
компиляции
Хранение данных размер которых не известен на
этапе компиляции
Функция "видит" память только своего stack frame Произвольный доступ (из разных функций, потоков
и даже процессов)
Автоматический менеджмент памяти Нужно подчищать (или переиспользовать) память:
- ручное управление (malloc/free)
- полуавтоматическое управление (unique_ptr,
shared_ptr)
- автоматическое управление (garbage collection)
8. На практике куча нужна если:
- функция хочет видеть данные аллоцированные в другой функции
- имеем дело с данными динамического размера
- имеем дело с данными большого размера
- данные "шарятся" между потоками
Адресное пространство процесса в Linux.
Stack VS Heap
9. Управление памятью в GO. Аллокатор
Используется свой аллокатор tcmalloc:
- mmap (not brk)
- память под stack горутины на самом деле выделяется в heap
- используется garbage collector
10. Управление памятью в GO. Heap тормозит?
Нет! Тормозит gc:
- должен знать о всей памяти выделяемой на heap'е, выполнять обход этой
памяти
- полностью останавливать программу для очистки памяти (STW)
- сохранять инвариант
- бороться с фрагментацией
11. Управление памятью в GO. А можно ли управлять?
int *mul2(int x) {
int multiplier = 2; // allocated
on stack
int *result =
malloc(sizeof(int)); // allocated on heap
*result = x * multiplier;
return result;
}
func mul2(x int32) *int32 {
var multiplier int32 = 2 //
allocated on stack
result := x * multiplier //
allocated on heap
return &result
}
12. Управление памятью в GO. А можно ли управлять?
В GO компилятор сам решает где аллоцировать переменную, он действует
согласно набору эвристик - escape analysis. Используя эти правила можно
заставить компилятор GO аллоцировать память там где нам надо.
13. Оптимизация. Toolchain
Кун-фу оптимизации:
- локализовать "горячее" место - pprof
- обеспечить повторяемость, тестируемость гипотез - go benchmark
- провести анализ кода - escape analysis
- ?????
- PROFIT!
"Преждевременная оптимизация — корень всех зол" - Дональд Кнут.
14. Оптимизация. Toolchain. Pprof
Можно профилировать тесты либо добавить к себе pprof сервер.
Профилирование по памяти - показывает где и сколько аллоцируется памяти
в heap'е. Профилирование производительности может подтвердить что
аллокации замедляют нашу программу.
15. Оптимизация. Toolchain. GO benchmark
Позволяют обеспечить повторяемость сценария который мы хотим
оптимизировать. Показывает сколько процессорного времени и аллокаций
было затрачено на одну итерацию бенчмарка.
```bash
go test . -bench=. -benchmem
```
16. Оптимизация. Toolchain. Escape Analysis
Объясняет почему компилятор GO аллоцировал память так а не иначе.
```bash
go test . -gcflags="-m -m"
```
17. Оптимизация. Примеры. Копирование структуры
type S struct {
a, b, c int64
d, e, f string
g, h, i float64
}
func byPointer() *S {
return &S{
a: 1, b:
1, c: 1,
e: "foo",
f: "foo",
g: 1.0,
h: 1.0, i: 1.0,
}
}
BenchmarkMemoryHeap
41.43 ns/op 96 B/op 1 allocs/op
func BenchmarkMemoryHeap(b *testing.B) {
var s *S
for i := 0; i < b.N; i++ {
s =
byPointer()
}
_ = fmt.Sprintf("%v", s.a)
}
func byCopy() S {
return S{
a: 1, b: 1,
c: 1,
e: "foo",
f: "foo",
g: 1.0, h:
1.0, i: 1.0,
}
}
func BenchmarkMemoryStack(b *testing.B) {
var s S
for i := 0; i < b.N; i++ {
s = byCopy()
}
_ = fmt.Sprintf("%v", s.a)
}
BenchmarkMemoryStack
5.154 ns/op 0 B/op 0 allocs/op
func BenchmarkMemoryHeap2(b *testing.B) {
for i := 0; i < b.N; i++ {
s :=
byPointer()
if s.a != 1 {
panic("a!=1")
}
}
}
BenchmarkMemoryHeap2-4
5.060 ns/op 0 B/op 0 allocs/op
18. Оптимизация. Примеры. Строки
type PackageType string
const (
TypeControl = "control"
TypeData = "data"
TypeUnknown = "unknown"
)
type RawPackage struct {
typ []byte
}
func ParseType(p *RawPackage) PackageType {
strType := string(p.typ)
switch strType {
case TypeControl, TypeData:
return
PackageType(strType)
default:
return
TypeUnknown
}
}
func BenchmarkParse(b *testing.B) {
for i := 0; i < b.N; i++ {
typ :=
ParseType(testPackages[i % 3])
runtime.KeepAlive(typ)
}
}
BenchmarkParse
16.44 ns/op 5 B/op
1 allocs/op
var (
TypeControlBytes = []byte("control")
TypeDataBytes = []byte("data")
)
func ParseTypeNoAlloc(p *RawPackage) PackageType {
if bytes.Compare(p.typ, TypeControlBytes)
== 0 {
return TypeControl
}
if bytes.Compare(p.typ, TypeDataBytes) == 0
{
return TypeData
}
return TypeUnknown
}
func BenchmarkParseNoAlloc(b *testing.B) {
for i := 0; i < b.N; i++ {
tp :=
ParseTypeNoAlloc(testPackages[i % 3])
runtime.KeepAlive(tp)
BenchmarkParseNoAlloc
8.699 ns/op 0 B/op
0 allocs/op
19. Оптимизация. Примеры. Строки
func ExternalLibFunc(typ string) {
}
func BenchmarkExternal(b *testing.B) {
var str string
for i := 0; i < b.N; i++ {
str =
string(testPackages[i % 3].typ)
ExternalLibFunc(str)
}
}
BenchmarkExternal
14.74 ns/op 5 B/op 1 allocs/op
func (p *RawPackage) TypeUnsafe() string {
return
*(*string)(unsafe.Pointer(&p.typ))
}
func BenchmarkExternalNoAlloc(b *testing.B) {
var str string
for i := 0; i < b.N; i++ {
str = testPackages[i %
3].TypeUnsafe()
ExternalLibFunc(str)
}
}
BenchmarkExternalNoAlloc
1.366 ns/op 0 B/op 0 allocs/op