Выложил лекцию по 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