16. Вычисления на GPU: знакомство с OpenCL | Параллельное программирование 2026
Алексей Малов (лекции по программированию)
0:00 / 0:00
16. Вычисления на GPU: знакомство с OpenCL | Параллельное программирование 2026
958 просмотров · 2 недели назад
Алексей Малов (лекции по программированию)
6,31 тыс. подписчиков
958 просмотров · 2 недели назад
Курс "Параллельное программирование" специальность 09.03.04 "Программная инженерия", 3 курс. Про подготовку программистов в Институте iSpring здесь: https://ispring.institute/software-en...
Почему GPU может выполнять некоторые задачи в десятки и даже сотни раз быстрее CPU? И что нужно изменить в привычном мышлении программиста, чтобы начать эффективно использовать тысячи параллельных вычислительных потоков?
В этой лекции мы начинаем новую тему — программирование на GPU — и разберём основные принципы на примере OpenCL.
Сначала посмотрим, чем архитектура GPU отличается от CPU и почему GPU оптимизирован не под быстрое выполнение одного сложного потока, а под огромное количество однотипных вычислений одновременно.
Разберём:
чем отличаются CPU и GPU;
что такое гетерогенные вычислительные системы;
как GPU выполняет тысячи потоков одновременно;
что такое SIMT, warp и divergence;
почему ветвления могут сильно снижать производительность GPU;
как устроена модель вычислений OpenCL;
что такое Host, Device, Context и Command Queue;
как работают Work Items, Work Groups и NDRange;
чем отличаются Global, Local и Private Memory;
почему способ обращения потоков к памяти может радикально влиять на скорость программы;
как GPU скрывает задержки памяти за счёт массового параллелизма.
После теории перейдём к практике.
Напишем первую программу на OpenCL, найдём доступные GPU, создадим контекст и очередь команд, передадим данные на устройство и запустим собственный kernel.
В качестве первых примеров реализуем параллельное сложение больших массивов и умножение матриц.
На примере матриц увидим, как даже относительно простая реализация на GPU может значительно обогнать последовательный CPU-код. А затем разберёмся, почему такой алгоритм всё ещё далёк от оптимального и как производительность GPU связана с количеством обращений к глобальной памяти.
Эта лекция — отправная точка для дальнейшего изучения GPU-программирования, OpenCL и оптимизации массово-параллельных алгоритмов.
Полезные ссылки
Слайды и задачи по этому курсу: https://github.com/alexey-malov/pc
Мой Telegram для связи с подписчиками: https://t.me/vivid_coding
Поддержать меня на Boosty: https://boosty.to/vivid-bw
Тайм-коды:
0:00 — Что такое гетерогенные платформы
05:10 — Выполнение потоков на CPU
08:23 — Выполнение потоков на GPU
13:26 — Ветвления и Code Divirgence
16:00 — API для гетерогенных вычислений
17:42 — Знакомство с OpenCL
30:17 — Модель вычисления OpenCL
36:15 — Модель памяти OpenCL
45:14 — Суммирование элементов массива
56:33 — Наивное умножение матриц на GPU
В заставке использована композиция "Папа может в Си" музыкального коллектива "Научно-технический рэп" (https://vk.com/nii_rap)
Для анимирования изображения использовалась нейросеть Алиса AI