C++ and other lectures
9.62K subscribers
50 photos
3 files
273 links
Учебный канал в Телеграм: тут будут анонсы и ссылки на лекции и стримы.

Написать автору: @Tilir

Boosty автора: https://boosty.to/cpp_lects_rus
Download Telegram
Выложил лекцию по 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
👍40🔥2613👏2🙏1🫡1
В этом июле где то в 10-х числах у меня есть шанс побывать на Дальнем Востоке (Владивосток, возможно Находка). Просьба местных обозначиться в чате или у меня в лс и сказать (1) есть ли заинтересованность, (2) когда и где лучше устроить встречу с читателями и (3) можете ли вы помочь с организацией.

#author_event
🔥405👍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
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 Список литературы и вопросы.
34👍30🔥7