Перейти к содержимому

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