Выложил лекцию по GPGPU и SYCL на английском языке.
https://youtu.be/Ebj21eXDRDY
В этой лекции мы обсудим, почему модель программирования для графики и гетерогенных вычислений исторически отличается от обычного C++. Начнём с классических шейдерных языков, stateful memory, binding tables и адресных пространств, а затем перейдём к OpenCL и проблемам separate-source compute API. После этого разберём основы SYCL как примера single-source подхода к гетерогенному программированию, познакомимся с устройствами и очередями, а также с моделью исполнения SIMT. На примерах сложения векторов и перемножения матриц посмотрим, как часть работы отправляется на устройство и как SYCL описывает зависимости между вычислениями. Основная часть лекции посвящена памяти и синхронизации. Мы постепенно оптимизируем перемножение матриц и разбираем, как на производительность влияют разные виды памяти, tiled execution, барьеры и specialization constants. Затем обсудим гистограмму как пример конкурентного доступа к данным и поговорим об атомиках в GPU API. В финале вернёмся к C++ и обсудим природу указателей, а также generic address space в SYCL. На протяжении всей лекции нас будет сопровождать большое количество замеров производительности.
Timeline.
00:00 Введение. Гетерогенные вычисления и GPU как execution model.
03:50 Память в классических шейдерных языках на примере GLSL: stateful и stateless pointers.
10:35 Первые compute API с раздельными исходниками на примере OpenCL. Проблема небезопасности типов в API.
15:40 На пути к единому compute API: как расширять C++ для гетерогенного программирования?
19:34 Основы SYCL: очереди, command groups, iteration space и vector addition.
29:15 Перемножение матриц -- основная задача GPGPU.
35:28 Более интересное управление памятью: shared memory, device memory и снова аллокаторы.
40:25 Продолжаем умножать матрицы: приватная память, oneMKL и первые замеры.
45:15 Локальная память и барьеры. Инверсия параллелизма внутри рабочей группы.
52:52 Улучшаем перемножение матриц: tiled multiplication, specialization constants и ещё немного замеров.
59:52 Конкурентный доступ к данным: гистограмма, атомики и memory model в GPU API.
01:09:53 Обсуждение природы указателей, generic address space в SYCL, hierarchical parallelism и завершение лекции.
#cpp_postgraduate
https://youtu.be/Ebj21eXDRDY
В этой лекции мы обсудим, почему модель программирования для графики и гетерогенных вычислений исторически отличается от обычного C++. Начнём с классических шейдерных языков, stateful memory, binding tables и адресных пространств, а затем перейдём к OpenCL и проблемам separate-source compute API. После этого разберём основы SYCL как примера single-source подхода к гетерогенному программированию, познакомимся с устройствами и очередями, а также с моделью исполнения SIMT. На примерах сложения векторов и перемножения матриц посмотрим, как часть работы отправляется на устройство и как SYCL описывает зависимости между вычислениями. Основная часть лекции посвящена памяти и синхронизации. Мы постепенно оптимизируем перемножение матриц и разбираем, как на производительность влияют разные виды памяти, tiled execution, барьеры и specialization constants. Затем обсудим гистограмму как пример конкурентного доступа к данным и поговорим об атомиках в GPU API. В финале вернёмся к C++ и обсудим природу указателей, а также generic address space в SYCL. На протяжении всей лекции нас будет сопровождать большое количество замеров производительности.
Timeline.
00:00 Введение. Гетерогенные вычисления и GPU как execution model.
03:50 Память в классических шейдерных языках на примере GLSL: stateful и stateless pointers.
10:35 Первые compute API с раздельными исходниками на примере OpenCL. Проблема небезопасности типов в API.
15:40 На пути к единому compute API: как расширять C++ для гетерогенного программирования?
19:34 Основы SYCL: очереди, command groups, iteration space и vector addition.
29:15 Перемножение матриц -- основная задача GPGPU.
35:28 Более интересное управление памятью: shared memory, device memory и снова аллокаторы.
40:25 Продолжаем умножать матрицы: приватная память, oneMKL и первые замеры.
45:15 Локальная память и барьеры. Инверсия параллелизма внутри рабочей группы.
52:52 Улучшаем перемножение матриц: tiled multiplication, specialization constants и ещё немного замеров.
59:52 Конкурентный доступ к данным: гистограмма, атомики и memory model в GPU API.
01:09:53 Обсуждение природы указателей, generic address space в SYCL, hierarchical parallelism и завершение лекции.
#cpp_postgraduate
YouTube
Lecture 27. C++ for GPGPU: Heterogeneous Computing (MIPT, 2025-2026).
Master's degree lectures at MIPT on modern C++ in English. Department of Microprocessor Technologies.
In this lecture, we will discuss why the programming model for graphics and heterogeneous computing has historically been different from ordinary C++. We…
In this lecture, we will discuss why the programming model for graphics and heterogeneous computing has historically been different from ordinary C++. We…
👍40🔥26❤13👏2🙏1🫡1
В этом июле где то в 10-х числах у меня есть шанс побывать на Дальнем Востоке (Владивосток, возможно Находка). Просьба местных обозначиться в чате или у меня в лс и сказать (1) есть ли заинтересованность, (2) когда и где лучше устроить встречу с читателями и (3) можете ли вы помочь с организацией.
#author_event
#author_event
🔥40❤5👍1
Выложил лекцию по std::execution на английском языке. Это последняя, 28-я лекция англоязычного магистерского курса.
https://youtu.be/ZMcUTZppCAw
Финальная лекция магистерского курса по C++ посвящена std::execution -- новой модели исполнения, которая входит в C++26. Мы начнём с давно известных механизмов: параллельных алгоритмов стандартной библиотеки, ручного запуска потоков и std::async. На примере параллельного reduce посмотрим, почему этих средств быстро становится недостаточно, если хочется не просто запустить несколько потоков, но также аккуратно описывать и комбинировать вычисления. После этого перейдём к senders/receivers: разберём, что такое scheduler, sender, receiver и operation state, как работают адапторы и как вычисление может переходить между разными execution resources. Свяжем эту тему с миром GPGPU через bulk-вычисления, посмотрим на рекурсивное порождение асинхронных задач через execution scopes и обсудим разные варианты завершения вычислений. В конце поговорим о связи std::execution с корутинами, отмене задач через environment и ещё раз соберём общую картину: как C++26 предлагает описывать асинхронное и параллельное исполнение без ручного управления потоками.
Timeline
00:00 Введение. Параллельные алгоритмы в стандартной библиотеке.
03:30 Пишем собственный параллельный reduce.
10:05 std::async и его особенности. Замеры производительности.
16:50 Единая абстракция исполнения. Основы std::execution в C++26.
26:59 Концепт sender и адапторы.
35:00 Монадическая природа вычислений и let_value.
40:16 Адаптор bulk: снова заходим в мир GPGPU.
46:05 Параллельный reduce с использованием std::execution.
49:40 Execution scopes: динамическое создание задач. Параллельная сортировка.
54:41 Каналы в sender. Поведение upon_error и upon_stopped. Сигнатуры завершения.
01:02:19 Проверка completion signatures: упражнение в метапрограммировании и рефлексии.
01:06:50 Связь сендеров с корутинами: execution::task.
01:14:40 Снова многопоточная подписка и отмена задач.
01:18:47 Основные концепции ещё раз, список литературы и завершение.
#cpp_postgraduate
https://youtu.be/ZMcUTZppCAw
Финальная лекция магистерского курса по C++ посвящена std::execution -- новой модели исполнения, которая входит в C++26. Мы начнём с давно известных механизмов: параллельных алгоритмов стандартной библиотеки, ручного запуска потоков и std::async. На примере параллельного reduce посмотрим, почему этих средств быстро становится недостаточно, если хочется не просто запустить несколько потоков, но также аккуратно описывать и комбинировать вычисления. После этого перейдём к senders/receivers: разберём, что такое scheduler, sender, receiver и operation state, как работают адапторы и как вычисление может переходить между разными execution resources. Свяжем эту тему с миром GPGPU через bulk-вычисления, посмотрим на рекурсивное порождение асинхронных задач через execution scopes и обсудим разные варианты завершения вычислений. В конце поговорим о связи std::execution с корутинами, отмене задач через environment и ещё раз соберём общую картину: как C++26 предлагает описывать асинхронное и параллельное исполнение без ручного управления потоками.
Timeline
00:00 Введение. Параллельные алгоритмы в стандартной библиотеке.
03:30 Пишем собственный параллельный reduce.
10:05 std::async и его особенности. Замеры производительности.
16:50 Единая абстракция исполнения. Основы std::execution в C++26.
26:59 Концепт sender и адапторы.
35:00 Монадическая природа вычислений и let_value.
40:16 Адаптор bulk: снова заходим в мир GPGPU.
46:05 Параллельный reduce с использованием std::execution.
49:40 Execution scopes: динамическое создание задач. Параллельная сортировка.
54:41 Каналы в sender. Поведение upon_error и upon_stopped. Сигнатуры завершения.
01:02:19 Проверка completion signatures: упражнение в метапрограммировании и рефлексии.
01:06:50 Связь сендеров с корутинами: execution::task.
01:14:40 Снова многопоточная подписка и отмена задач.
01:18:47 Основные концепции ещё раз, список литературы и завершение.
#cpp_postgraduate
YouTube
Lecture 28: The C++ Standard Execution Model (MIPT, 2025–2026)
Master's degree lectures at MIPT on modern C++ in English. Department of Microprocessor Technologies.
The final lecture of the master's level C++ course is dedicated to std::execution, the new execution model entering C++26. We begin with familiar mechanisms:…
The final lecture of the master's level C++ course is dedicated to std::execution, the new execution model entering C++26. We begin with familiar mechanisms:…
❤34🔥32👍14😢1
Выложил лекцию по проблеме рекламации памяти, прочитанную в институте iSpring город Йошкар-Ола (на русском языке).
Youtube:
https://youtu.be/13b5hHwRvVk
Rutube:
https://rutube.ru/video/596ab835ce4cbb1ef4154bc43da58397/
Большое спасибо Алексею Малову (кстати у него есть канал https://youtube.com/@vividbw) и институту iSpring за приглашение, съёмку и монтаж видео.
00:00 Начало. Пример, который мы будем использовать всю лекцию.
03:56 Потоки и гонка за данные.
09:35 Mutex или простота хуже воровства.
12:12 RAII обёртки над mutex.
19:23 Мьютекс это очередь. Концепция read/write lock.
25:51 Сеттинг который мы будем использовать в лекции и первые замеры.
29:14 Убираем в целом блокировки. CAS-циклы.
34:45 Happens before, барьеры и модели памяти.
42:50 Проблема рекламации.
47:30 Атомарный разделяемый указатель и новые замеры.
52:05 C++26: решение проблемы рекламации в стиле RCU и ещё замеры.
01:01:35 C++26: решение проблемы рекламации через Hazard Pointers и ещё замеры.
01:07:55 Список литературы и вопросы.
Youtube:
https://youtu.be/13b5hHwRvVk
Rutube:
https://rutube.ru/video/596ab835ce4cbb1ef4154bc43da58397/
Большое спасибо Алексею Малову (кстати у него есть канал https://youtube.com/@vividbw) и институту iSpring за приглашение, съёмку и монтаж видео.
00:00 Начало. Пример, который мы будем использовать всю лекцию.
03:56 Потоки и гонка за данные.
09:35 Mutex или простота хуже воровства.
12:12 RAII обёртки над mutex.
19:23 Мьютекс это очередь. Концепция read/write lock.
25:51 Сеттинг который мы будем использовать в лекции и первые замеры.
29:14 Убираем в целом блокировки. CAS-циклы.
34:45 Happens before, барьеры и модели памяти.
42:50 Проблема рекламации.
47:30 Атомарный разделяемый указатель и новые замеры.
52:05 C++26: решение проблемы рекламации в стиле RCU и ещё замеры.
01:01:35 C++26: решение проблемы рекламации через Hazard Pointers и ещё замеры.
01:07:55 Список литературы и вопросы.
YouTube
Проблема рекламация памяти и два новых решения в C++26. Лекция в университете iSpring.
Лекция прочитанная весной 2026-го года в городе Йошкар-Ола. Мы начинаем от самых основ и прицельно разбираем разные аспекты проблемы рекламации памяти в многопоточных программах.
Timeline:
00:00 Начало. Пример, который мы будем использовать всю лекцию.
03:56…
Timeline:
00:00 Начало. Пример, который мы будем использовать всю лекцию.
03:56…
❤34👍30🔥7