What is a GPU? A Graphics Processing Unit or GPU (also occasionally called Visual Processing Unit or VPU) is a dedicated graphics rendering device for.

Презентация:



Advertisements
Похожие презентации
Вычисления Общего Назначения на Графическом Ускорителе.
Advertisements

Массивно-параллельные вычислительные системы на основе архитектуры CUDA.
Факультет прикладной математики и физики Кафедра вычислительной математики и программирования МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ (национальный исследовательский.
Библиотека для работы с конечными множествами, использующая графический процессор в качестве основного вычислительного устройства Новосибирский Государственный.
Часть I: Введение в CUDA Александр Межов Ассистент кафедры Информатики 30 сентября 2011 Кафедра Информатики.
Библиотека для работы с конечными множествами, использующая графический процессор в качестве основного вычислительного устройства Новосибирский Государственный.
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А. (NVidia) Архитектура и программирование массивно- параллельных вычислительных систем.
Библиотека для работы с конечными множествами, использующая графический процессор в качестве основного вычислительного устройства Новосибирский Государственный.
Архитектура Tesla. Программно-аппаратный стек CUDA. zЛекторы: yБоресков А.В. (ВМиК МГУ)Боресков А.В. (ВМиК МГУ) yХарламов А.А. (NVidia)Харламов А.А. (NVidia)
Транспьютеры What is Transputer ? Транспьютер (англ. transputer) элемент построения многопроцессорных систем, выполненный на.
Кластер mvs17 Управляющая машина mvs17.cc.dvo.ru OpenPBS Maui две очереди для заданий GPU simple GPU ПАСПОРТ ЗАДАЧИ: обязательные параметры: -l nodes.
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А. (NVidia) Архитектура и программирование массивно- параллельных вычислительных систем.
GPU vs. CPU 681 млн. транзисторов Тактовая частота 575Mhz * 768MB 1.8 Ghz памяти DDR4 ~650 млн. транзисторов Тактовая частота ~700Mhz 1GB 1.1 Ghz памяти.
Лекторы: Боресков А.В. (ВМиК МГУ) Харламов А. (NVIDIA) Архитектура и программирование массивно- параллельных вычислительных систем.
Сравнение возможностей инструментария разработки программного обеспечения графических процессоров.
Анатолий Свириденков (сodedgers.com) Блог:
Использование функционального представления (FRep) для компьютерной анимации и интерактивных сред.
Разработка программного обеспечения для сигнальных процессоров TMS320C64xx Часть 3. Архитектура ядра процессоров с64хх.
RISC-архитектуры ( Reduced Instruction Set Computer)
МОСКОВСКИЙ АВИАЦИОННЫЙ ИНСТИТУТ (национальный исследовательский университет) (национальный исследовательский университет) Факультет прикладной математики.
Транксрипт:

What is a GPU? A Graphics Processing Unit or GPU (also occasionally called Visual Processing Unit or VPU) is a dedicated graphics rendering device for a personal computer or game console. Modern GPUs are very efficient at manipulating and displaying computer graphics, and their highly-parallel structure makes them more effective than typical CPUs for a range of complex algorithms. - Definition from wikipedia.org Radeon 9800 Pro

History of GPUs The pre-GPU era VGAs in the 80s 4 (or even 5) generations of GPUs in the last decade Fixed functions vs. programmability API support OpenGL, Direct3D (v6.0 to v9.0) Shader models (v1.0 – v3.0)

Предыстория к GPGPU Сопроцессор Видео- ускоритель Шейдеры GPU

Why shifting from CPU to GPU? Why not just keep increasing the CPU speed and leave the GPU to handle what is its best? CPU speed is reaching a bottle neck (how many transistors can be integrated on a chip) Solution, in the future, nano technology, short term, dual core machines (double CPUs), clustered CPUs, …, even grid computing and supercomputing GPU facing the same problem, but still have space to press on due to its task specific designs and parallelism paradigm

Существующие многоядерные системы Посмотрим на частоты CPU: 2004 г. - Pentium 4, 3.46 GHz 2005 г. - Pentium 4, 3.8 GHz 2006 г. - Core Duo T2700, 2333 MHz 2007 г. - Core 2 Duo E6700, 2.66 GHz 2007 г. - Core 2 Duo E6800, 3 GHz 2008 г. - Core 2 Duo E8600, 3.33 Ghz 2009 г. - Core i7 950, 3.06 GHz

Мотивация: Вычислительная Мощность Courtesy Ian Buck, John Owens

An Aside: Вычислительная мощность Почему GPU становятся мощнее так быстро? Арифметика : особенности архитектуры GPUs позволяют относительно просто использовать дополнительные транзисторы для вычислений, а не для кэша Экономика : Многомиллиардная индустрия компьютерных игр вкладывает деньги в разработку все более совершенных GPU

Мотивация: Гибкость и Точность Современные GPUs хорошо программируемы Программируемые пиксельные, вершинные, видео процессоры Установившаяся поддержка высокоуровневых языков программирования Современные GPUs обеспечивают высокую точность вычислений Аппаратная поддержка чисел с плавающей точкой одинарной точности (32 бита). Что достаточно много для многих(не всех) приложений

Мотивация: Потенциал GPGPU Кратко: Гибкость и мощность GPUs делает их привлекательными для вычислений общего назначения Сфера применения GPGPU очень широка – от алгоритмов компьютерной графики, таких как задача глобального освещения, до задач численных методов и ММС. Цель: сделать доступными разработчикам недорогую вычислительную мощность GPU как вычислительного сопроцессора

Проблемы: Сложность использования GPUs разработаны для & направляемы компьютерными играми Необычная модель программирования Идиомы программирования связаны с компьютерной графикой Среда программирования сильно ограничена Архитектура: Высоко параллельная Быстрое развитие Нельзя просто перенести CPU код на GPU!

Основы GPU :Классический Графический Конвейер Упрощенный графический конвейер Отметим что конвейер варьируем Кэши, Списки и многое другое не показано GPUCPU Приложение Трансформация & Свет Растериза- ция Растериза- ция Тени Память ВК (Текстуры) Память ВК (Текстуры) Освещенные вершины (2D) Graphics State Рендеринг в текстуру Сборка примитивов Сборка примитивов вершины (3D) Экранные треугольники (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, Глубина )

GPU Transform CPU Приложение Растериза- ция Растериза- ция Shade Память ВК (Текстуры) Память ВК (Текстуры) Освещенный вершины (2D) Graphics State Рендеринг в текстуру Сборка Примитивов Сборка Примитивов Вершины (3D) Экранные треугольники (2D) Фрагменты (pre-pixels) Итоговые пиксели ( цвет, глубина ) Программируемый вершинный процессор! Программируемый фрагментный процессор! Основы GPU : Современный Графический Конвейер Вершинные Процессоры

GPU Конвейер: Преобразования Вершинный процессор (несколько параллельных) Преобразования из глобальной системы координат в систему координат изображения Повершенное вычисление света

GPUCPU Приложение Вершинный процессор Вершинный процессор Растериза- ция Растериза- ция Фрагментный Процессор Фрагментный Процессор Текстуры Xformed, Lit Vertices (2D) Graphics State Рендеринг в текстуру Вершины (3D) Screenspace triangles (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, глубина) Программируемая сборка примитивов! Более гибкая адресация памяти! Графический Конвейер последнего поколения Assemble Primitives Геометрический процессор Геометрический процессор

GPU Конвейер: Растеризация Растеризатор Перевод геометрического пр. (вершины) в плоское пр. (фрагменты) Фрагмент = фрагмент изображения Пиксель + связанные с ним данные: цвет, глубина, трафарет, etc. Интерполирование повершенных данных через пиксели

GPUCPU Приложение Вершинный процессор Вершинный процессор Растериза- ция Растериза- ция Фрагментный Процессор Фрагментный Процессор Текстуры Xformed, Lit Vertices (2D) Graphics State Рендеринг в текстуру Вершины (3D) Screenspace triangles (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, глубина) Программируемая сборка примитивов! Более гибкая адресация памяти! Графический Конвейер последнего поколения Assemble Primitives Фрагментный процессор Фрагментный процессор

GPU Конвейер: Тени Фрагментный процессор (несколько параллельных) Вычисление цвета для каждого пикселя Возможность чтения из текстур (изображений)

GPUCPU Приложение Вершинный процессор Вершинный процессор Растериза- ция Растериза- ция Фрагментный Процессор Фрагментный Процессор Текстуры Xformed, Lit Vertices (2D) Graphics State Рендеринг в текстуру Вершины (3D) Screenspace triangles (2D) Фрагменты (pre-pixels) Итоговые пиксели ( Цвет, глубина) Программируемая сборка примитивов! Более гибкая адресация памяти! Графический Конвейер последнего поколения Assemble Primitives Пиксельный процессор Пиксельный процессор

Deep Pipelines Vertex Shader Triangle Setup Fragment Shader Fragment Blender Frame- Buffer(s) Deep Pipelines think assembly line conveyer belt

Wide Pipelines (many conveyor belts) Vertex Shader Triangle Setup Fragment Shader Fragment Blender Frame- Buffer(s) Deep Pipelines Wide Pipelines

Parallelism, Parallelism, Parallelism Deep/Wide pipelines allow memory latency to be hidden. If one fragment(or vertex) is waiting on a memory fetch, go work on another element for a while. Dont need expensive huge caches (unlike CPUs) Fill precious chip space with arithmetic logic units (ALU).

The Big Bandwidth Bugaboo L1 L2 Video Memory 6.4 GB/sec Main Memory AGP Mem CPUCPU GPUGPU Moving Data is expensive DMA

General Purpose Computing (GPGPU) Whats the GPU good for? Everything you can get it to do efficiently for you!!! Physics Collision Detection AI And yes, graphics too… Skyworks, Mark Harris Cullide: Naga Govindaraju et. al

General Purpose Computing Texture Maps are arrays of data elements Fragment Program is an instruction Frame buffer holds the result of the SIMD operation Single Instruction Multiple Data/ Stream Processor n m m n n m Fragment Program 0,0 0,11,1 1,0 Screen Filling Quadrilateral Texture Maps (Multiple Data) Fragment Program (Single Instruction) Framebuffer

Архитектура Tesla: Мультипроцессор Tesla 8 TEX SM Texture Processing Cluster Streaming Multiprocessor Instruction $Constant $ Instruction Fetch Shared Memory SFU SP SFU SP Register File

TEX SM Texture Processing Cluster SM Архитектура Tesla Мультипроцессор Tesla 10 Streaming Multiprocessor Instruction $Constant $ Instruction Fetch Shared Memory SFU SP SFU SP Double Precision Register File

Архитектура Tesla 10 TPC Interconnection Network ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 ROP L2 DRAM Work Distribution CPUBridgeHost Memory

Архитектура Маштабируемость: [+][-] SM внутри TPC [+][-] TPC [+][-] DRAM партиции Схожие архитектуры: Tesla 8: 8800 GTX Tesla 10: GTX 280

SIMT (Single Instruction, Multiple Threads) zПараллельно на каждом SM выполняется большое число отдельных нитей (threads) zНити подряд разбиваются на warpы (по 32 нити) и SM управляет выполнением warpов zНити в пределах одного warpа выполняются физически параллельно zБольшое число warpов покрывает латентность

Программная модель CUDA GPU (device) это вычислительное устройство, которое: Является сопроцессором к CPU (host) Имеет собственную память (DRAM) Выполняет одновременно очень много нитей

Типы памяти в CUDA Самая быстрая – shared (on-chip) Самая медленная – глобальная (DRAM) Для ряда случаев можно использовать кэшируемую константную и текстурную память Доступ к памяти в CUDA идет отдельно для каждой половины warpа (half-warp)

Работа с памятью в CUDA Основа оптимизации – оптимизация работы с памятью Максимальное использование shared- памяти Использование специальных паттернов доступа к памяти, гарантирующих эффективный доступ Паттерны работают независимо в пределах каждого half-warpа

Программная модель памяти ТипДоступРасположение Латентность Регистры Поток GPU (R\W)SM 2-4 такта ЛокальнаяПоток GPU (R\W)DRAM ~500 тактов РазделяемаяБлок потоков GPU (R\W)SM 2-4 такта ГлобальнаяCPU(R\W), GPU(R\W)DRAM ~500 тактов Константная CPU(R\W), GPU(Read-only) DRAM + КЕШ SM ~500 к DRAM 2-4 к кешу Текстурная CPU(R\W), GPU(Read-only) DRAM + КЕШ SM ~500 к DRAM 2-4 к кешу

Программная модель CUDA Последовательные части кода выполняются на CPU Массивно-параллельные части кода выполняются на GPU как ядра Отличия нитей между CPU и GPU Нити на GPU очень «легкие» HW планировщик задач Для полноценной загрузки GPU нужны тысячи нитей Для покрытия латентностей операций чтения / записи Для покрытия латентностей sfu инструкций

Программная модель CUDA Параллельная часть кода выполняется как большое количество нитей Нити группируются в блоки фиксированного размера Блоки объединяются в сеть блоков Ядро выполняется на сетке из блоков Каждая нить и блок имеют свой идентификатор

Программная модель CUDA Потоки в CUDA объединяются в блоки: Возможна 1D, 2D, 3D топология блока Общее кол-во потоков в блоке ограничено В текущем HW это 512 потоков

Программная модель CUDA Блоки потоков объединяются в сетку (grid) потоков Возможна 1D, 2D топология сетки блоков потоков

Программная модель потоков B (0:0) B (0:1) B (0:2) B (0:3) B (1:0) B (1:1) B (1:2) B (1:3) B (2:0) B (2:1) B (2:2) B (2:3) B (3:0) B (3:1) B (3:2) B (3:3) B (4:0) B (4:1) B (4:2) B (4:3) Grid Block T (0:0:0) T (0:1:0) T (0:2:0) T (1:0:0) T (1:1:0) T (1:2:0) T (2:0:0) T (2:1:0) T (2:2:0) Приведен пример сетки из 20 блоков (5x4), в каждом блоке 18 (3x3x2) потоков. Всего в сетке 360 потоков.