Слайд 2
![АППАРАТНЫЕ ОСОБЕННОСТИ GPU Краткий обзор архитектурных особенностей GPU](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-1.jpg)
АППАРАТНЫЕ ОСОБЕННОСТИ GPU
Краткий обзор архитектурных особенностей GPU
Слайд 3
![Основные тенденции Переход к многопроцессорным системам Развития технологий параллельного программирования](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-2.jpg)
Основные тенденции
Переход к многопроцессорным системам
Развития технологий параллельного программирования
OpenMP, MPI, TPL etc.
Простота
в использовании
Слайд 4
![Классификация архитектур Виды параллелизма На уровне данных (Data) На уровне](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-3.jpg)
Классификация архитектур
Виды параллелизма
На уровне данных (Data)
На уровне задач (Instruction)
*GPU: SIMT –
Single Instruction Multiple Thread
Слайд 5
![Архитектура многоядерных CPU Кэш первого уровня для инструкций (L1-I) для](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-4.jpg)
Архитектура многоядерных CPU
Кэш первого уровня
для инструкций (L1-I)
для данных (L1-D)
Кэш второго уровня
на
одном кристалле
используется раздельно
Проблема синхронизации кэш-памяти
Слайд 6
![Архитектура GPU: Device](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-5.jpg)
Слайд 7
![Архитектура GPU: TPC Кластер текстурных блоков (TPC) Память для текстур Потоковый мультипроцессор](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-6.jpg)
Архитектура GPU: TPC
Кластер текстурных блоков (TPC)
Память для текстур
Потоковый мультипроцессор
Слайд 8
![Архитектура GPU: SM Память констант Память инструкций Регистровая память Разделяемая](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-7.jpg)
Архитектура GPU: SM
Память констант
Память инструкций
Регистровая память
Разделяемая память
8 скалярных процессоров
2 суперфункциональных блока
Слайд 9
![Основные отличия GPU от CPU Высокая степень параллелизма (SIMT) Минимальные затраты на кэш-память Ограничения функциональности](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-8.jpg)
Основные отличия GPU от CPU
Высокая степень параллелизма (SIMT)
Минимальные затраты на кэш-память
Ограничения
функциональности
Слайд 10
![РАЗВИТИЕ ВЫЧИСЛЕНИЙ НА GPU Развитие технологии неграфических вычислений](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-9.jpg)
РАЗВИТИЕ ВЫЧИСЛЕНИЙ НА GPU
Развитие технологии неграфических вычислений
Слайд 11
![Эволюция GPU](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-10.jpg)
Слайд 12
![GPGPU General-Purpose Computation on GPU Вычисления на GPU общего (неграфического)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-11.jpg)
GPGPU
General-Purpose Computation on GPU
Вычисления на GPU общего (неграфического) назначения
AMD FireStream
NVIDIA CUDA
DirectCompute
(DirectX 10)
OpenCL
Слайд 13
![ПРОГРАММНАЯ МОДЕЛЬ CUDA Основные понятия и определения CUDA](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-12.jpg)
ПРОГРАММНАЯ МОДЕЛЬ CUDA
Основные понятия и определения CUDA
Слайд 14
![CUDA – Compute Unified Device Architecture Host – CPU (Central](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-13.jpg)
CUDA – Compute Unified Device Architecture
Host – CPU (Central Processing Unit)
Device
– GPU (Graphics Processing Unit)
Слайд 15
![Организация работы CUDA GPU](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-14.jpg)
Организация работы CUDA GPU
Слайд 16
![Warp и латентность Warp Порция потоков для выполнения на потоковом](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-15.jpg)
Warp и латентность
Warp
Порция потоков для выполнения на потоковом мультипроцессоре (SM)
Латентность
Общая задержка
всех потоков warp’а при выполнении инструкции
Слайд 17
![Топология блоков (block) Возможна 1, 2 и 3-мерная топология Количество потоков в блоке ограничено (512)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-16.jpg)
Топология блоков (block)
Возможна 1, 2 и 3-мерная топология
Количество потоков в блоке
ограничено (512)
Слайд 18
![Топология сетки блоков (grid) Возможна 1 и 2-мерная топология Количество блоков в каждом измерении ограничено 65536=216](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-17.jpg)
Топология сетки блоков (grid)
Возможна 1 и 2-мерная топология
Количество блоков в каждом
измерении ограничено 65536=216
Слайд 19
![Адресация элементов данных CUDA предоставляет встроенные переменные, которые идентифицируют блоки](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-18.jpg)
Адресация элементов данных
CUDA предоставляет встроенные переменные, которые идентифицируют блоки и потоки
blockIdx
blockDim
threadIdx
1D
Grid & 2D Block:
int dataIdnex = blockIdx.x * blockDim.x + threadIdx.x
Слайд 20
![Барьерная синхронизация Синхронизация потоков блока осуществляется встроенным оператором __synchronize](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-19.jpg)
Барьерная синхронизация
Синхронизация потоков блока осуществляется встроенным оператором __synchronize
Слайд 21
![CUDA: РАСШИРЕНИЕ C++ Особенности написания программ для GPU CUDA](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-20.jpg)
CUDA: РАСШИРЕНИЕ C++
Особенности написания программ для GPU CUDA
Слайд 22
![Расширение языка С++ Новые типы данных Спецификаторы для функций Спецификаторы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-21.jpg)
Расширение языка С++
Новые типы данных
Спецификаторы для функций
Спецификаторы для переменных
Встроенные переменные (для
ядра)
Директива для запуска ядра
Слайд 23
![Процесс компиляции Файлы CUDA (GPU) *.cu Файлы CPU *.cpp, *.h Исполняемый модуль *.dll, *.exe nvcc VC90](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-22.jpg)
Процесс компиляции
Файлы CUDA (GPU)
*.cu
Файлы CPU
*.cpp, *.h
Исполняемый модуль
*.dll, *.exe
nvcc
VC90
Слайд 24
![Типы данных CUDA 1, 2, 3 и 4-мерные вектора базовых](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-23.jpg)
Типы данных 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
![Спецификаторы функций](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-24.jpg)
Слайд 26
![Спецификаторы функций Ядро помечается __global__ Ядро не может возвращать значение](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-25.jpg)
Спецификаторы функций
Ядро помечается __global__
Ядро не может возвращать значение
Возможно совместное использование __host__
и __device__
Спецификаторы __global__ и __host__ не могут использоваться совместно
Слайд 27
![Ограничения функций GPU Не поддерживается рекурсия Не поддерживаются static-переменные Нельзя](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-26.jpg)
Ограничения функций GPU
Не поддерживается рекурсия
Не поддерживаются static-переменные
Нельзя брать адрес функции __device__
Не
поддерживается переменное число аргументов
Слайд 28
![Спецификаторы переменных](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-27.jpg)
Слайд 29
![Ограничения переменных GPU Переменные __shared__ не могут инициализироваться при объявлении](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-28.jpg)
Ограничения переменных GPU
Переменные __shared__ не могут инициализироваться при объявлении
Запись в __constant__
может производить только host через CUDA API
Спецификаторы нельзя применять к полям структур и union
Слайд 30
![Переменные ядра dim3 gridDim unit3 blockIdx dim3 blockDim uint3 threadIdx int warpSize](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-29.jpg)
Переменные ядра
dim3 gridDim
unit3 blockIdx
dim3 blockDim
uint3 threadIdx
int
warpSize
Слайд 31
![Директива запуска ядра Kernel >>(data) blocks – число блоков в](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-30.jpg)
Директива запуска ядра
Kernel<<>>(data)
blocks – число блоков в сетке
threads – число
потоков в блоке
Слайд 32
![Общая структура программы CUDA __global__ void Kernel(float* data) { .](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-31.jpg)
Общая структура программы CUDA
__global__ void Kernel(float* data)
{
. . .
}
void main()
{
. . .
Kernel<<>>(data);
. . .
}
Слайд 33
![Предустановки Видеокарта NVIDIA с поддержкой CUDA Драйвера устройства с поддержкой](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-32.jpg)
Предустановки
Видеокарта 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 – Неграфические вычисления](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/289577/slide-33.jpg)
Литература
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-visual-studio-2010.html