Разработка параллельных программ для GPU
АППАРАТНЫЕ Особенности GPU
Основные тенденции
Классификация архитектур
Архитектура многоядерных CPU
Архитектура GPU: Device
Архитектура GPU: TPC
Архитектура GPU: SM
Основные отличия GPU от CPU
Развитие вычислений на GPU
Эволюция GPU
GPGPU
Программная модель CUDA
CUDA – Compute Unified Device Architecture
Организация работы CUDA GPU
Warp и латентность
Топология блоков (block)
Топология сетки блоков (grid)
Адресация элементов данных
Барьерная синхронизация
CUDA: Расширение C++
Расширение языка С++
Процесс компиляции
Типы данных CUDA
Спецификаторы функций
Спецификаторы функций
Ограничения функций GPU
Спецификаторы переменных
Ограничения переменных GPU
Переменные ядра
Директива запуска ядра
Общая структура программы CUDA
Предустановки
Литература
Вопросы?
307.13K
Категория: ПрограммированиеПрограммирование

Разработка параллельных программ для GPU. Введение в CUDA

1. Разработка параллельных программ для GPU

Введение в CUDA

2. АППАРАТНЫЕ Особенности GPU

Краткий обзор архитектурных особенностей GPU
АППАРАТНЫЕ ОСОБЕННОСТИ GPU

3. Основные тенденции

• Переход к многопроцессорным системам
• Развития технологий параллельного
программирования
– OpenMP, MPI, TPL etc.
– Простота в использовании

4. Классификация архитектур

• Виды параллелизма
– На уровне данных (Data)
– На уровне задач (Instruction)
Single Data (SD)
Single Instruction (SI) Multiple Instruction (MI)
SISD
MISD
Multiple Data (MD) SIMD
MIMD
*GPU: SIMT – Single Instruction Multiple Thread

5. Архитектура многоядерных CPU

• Кэш первого уровня
– для инструкций (L1-I)
– для данных (L1-D)
L2
L1-I
L1-D
L1-I
L1-D
• Кэш второго уровня
Processor 1
Processor 2
– на одном кристалле
– используется раздельно
• Проблема синхронизации
кэш-памяти

6. Архитектура GPU: Device

Texture Processing
Cluster
SM
Texture
Texture Processing
Cluster
SM
...
Texture
...
SM
...
SM
L2
Device RAM

7. Архитектура GPU: TPC

Texture memory
Texture Processing
Cluster (TPC)
Streaming
Multiprocessor
...
Streaming
Multiprocessor
• Кластер
текстурных
блоков (TPC)
– Память для
текстур
– Потоковый
мультипроцессор

8. Архитектура GPU: SM

Streaming Multiprocessor
Instructions
Constants
Registers
Shared Memory
SP
SP
SP
SP
SP
SP
SFU
SP
SP
Память констант
Память инструкций
Регистровая память
Разделяемая память
• 8 скалярных
процессоров
SFU
• 2 суперфункциональных
блока

9. Основные отличия GPU от CPU

• Высокая степень параллелизма (SIMT)
• Минимальные затраты на кэш-память
• Ограничения функциональности

10. Развитие вычислений на GPU

Развитие технологии неграфических вычислений
РАЗВИТИЕ ВЫЧИСЛЕНИЙ НА GPU

11. Эволюция GPU

GPGPU
Shader
T&L
Voodoo
Floatingpoint

12. GPGPU

• General-Purpose Computation on GPU
– Вычисления на GPU общего (неграфического)
назначения
– AMD FireStream
– NVIDIA CUDA
– DirectCompute (DirectX 10)
– OpenCL

13. Программная модель CUDA

Основные понятия и определения CUDA
ПРОГРАММНАЯ МОДЕЛЬ CUDA

14. CUDA – Compute Unified Device Architecture

• Host – CPU (Central Processing Unit)
• Device – GPU (Graphics Processing Unit)

15. Организация работы CUDA GPU

Исходные данные
Блок
Блок
Блок
Потоки
Потоки
Потоки
Ядро (Kernel)

16. Warp и латентность

• Warp
– Порция потоков для выполнения на потоковом
мультипроцессоре (SM)
• Латентность
– Общая задержка всех потоков warp’а при
выполнении инструкции

17. Топология блоков (block)

• Возможна 1, 2 и 3-мерная топология
• Количество потоков в блоке ограничено (512)
1D
2D
3D

18. Топология сетки блоков (grid)

• Возможна 1 и 2-мерная топология
• Количество блоков в каждом измерении
ограничено 65536=216
1D
2D

19. Адресация элементов данных

• CUDA предоставляет встроенные
переменные, которые идентифицируют
блоки и потоки
– blockIdx
– blockDim
– threadIdx
1D Grid & 2D Block:
int dataIdnex = blockIdx.x * blockDim.x + threadIdx.x

20. Барьерная синхронизация

Блок
Потоки
• Синхронизация потоков
блока осуществляется
встроенным
оператором
__synchronize

21. CUDA: Расширение C++

Особенности написания программ для GPU CUDA
CUDA: РАСШИРЕНИЕ C++

22. Расширение языка С++


Новые типы данных
Спецификаторы для функций
Спецификаторы для переменных
Встроенные переменные (для ядра)
Директива для запуска ядра

23. Процесс компиляции

Файлы CUDA (GPU)
*.cu
Файлы CPU
*.cpp, *.h
nvcc
VC90
Исполняемый модуль
*.dll, *.exe

24. Типы данных CUDA

• 1, 2, 3 и 4-мерные вектора базовых типов
– Целые: (u)char, (u)int, (u)short, (u)long, longlong
– Дробные: float, double
– Пример: float(1), float2, float3, float4
• dim3 ~ uint3
– Пример: dim3(n) = uint(n,1,1)

25. Спецификаторы функций

Спецификатор Выполняется Вызывается
__device__
device
device
__global__
__host__
device
host
host
host

26. Спецификаторы функций

• Ядро помечается __global__
• Ядро не может возвращать значение
• Возможно совместное использование
__host__ и __device__
• Спецификаторы __global__ и __host__ не
могут использоваться совместно

27. Ограничения функций GPU


Не поддерживается рекурсия
Не поддерживаются static-переменные
Нельзя брать адрес функции __device__
Не поддерживается переменное число
аргументов

28. Спецификаторы переменных

Спецификатор Находится
__device__
device
__constant__
__shared__
device
device
Доступна
device
Вид доступа
R
device / host
block
R / R/W
R/W

29. Ограничения переменных GPU

• Переменные __shared__ не могут
инициализироваться при объявлении
• Запись в __constant__ может производить
только host через CUDA API
• Спецификаторы нельзя применять к полям
структур и union

30. Переменные ядра


dim3 gridDim
unit3 blockIdx
dim3 blockDim
uint3 threadIdx
int warpSize

31. Директива запуска ядра

• Kernel<<<blocks, threads>>>(data)
– blocks – число блоков в сетке
– threads – число потоков в блоке

32. Общая структура программы CUDA

__global__ void Kernel(float* data)
{
...
}
void main()
{
...
Kernel<<<blocks, threads>>>(data);
...
}

33. Предустановки

• Видеокарта NVIDIA с поддержкой CUDA
• Драйвера устройства с поддержкой CUDA
• NVIDIA CUDA Toolkit
• NVIDIA CUDA SDK
• NVIDIA Nsight
• Visual Studio 2008+
• Компилятор Visual C++ 9.0+

34. Литература

• NVIDIA Developer Zone
– http://developer.nvidia.com/cuda
• NVIDAI CUDA – Неграфические вычисления на
графических процессорах
– http://www.ixbt.com/video3/cuda-1.shtml
• Создание простого приложения CUDA в Visual
Studio 2010
– http://mezhov.blogspot.com/2011/09/cuda-visualstudio-2010.html

35. Вопросы?

ВОПРОСЫ?
English     Русский Правила