34
Стандартные библиотеки и алгоритмы для разработки на GPU Александр Мыльцев (Parallel Compute) 1

Стандартные библиотеки и алгоритмы для разработки на GPU

  • Upload
    fawzia

  • View
    90

  • Download
    2

Embed Size (px)

DESCRIPTION

Стандартные библиотеки и алгоритмы для разработки на GPU. Александр Мыльцев (Parallel Compute). 1. Библиотеки для разработки. 2. Библиотеки. http://developer.nvidia.com/cuda-tools-ecosystem CUDA Toolkit Thrust : библиотека шаблонов NPP: обработка изображений и сигналов - PowerPoint PPT Presentation

Citation preview

Page 1: Стандартные библиотеки и алгоритмы для разработки на  GPU

Стандартные библиотеки и алгоритмы для разработки

на GPU

Александр Мыльцев(Parallel Compute)

1

Page 2: Стандартные библиотеки и алгоритмы для разработки на  GPU

Библиотеки для разработки

2

Page 3: Стандартные библиотеки и алгоритмы для разработки на  GPU

Библиотеки• http://developer.nvidia.com/cuda-tools-ecosystem• CUDA Toolkit

– Thrust : библиотека шаблонов– NPP: обработка изображений и сигналов– CURAND: псевдо- и квазислучайные числа– LIBM: стандартная библиотека математических

примитивов– CUSPARSE : линейная алгебра для разреженных матриц– CUBLAS: линейная алгебра для плотных матриц– CUFFT: преобразование Фурье

• Библиотеки сторонних разработчиков– MAGMA: линейная алгебра– OpenVidia: компьютерное зрение– CULA Tools: линейная алгебра– OpenCurrent: динамика жидких сред– CUSP: решатели разреженных матриц– NAG: вычислительная финансовая система– … 3

Page 4: Стандартные библиотеки и алгоритмы для разработки на  GPU

Библиотеки

4

Page 5: Стандартные библиотеки и алгоритмы для разработки на  GPU

CUFFT• Быстрое преобразование Фурье

5

Page 6: Стандартные библиотеки и алгоритмы для разработки на  GPU

Особенности CUFFT• Интерфейс подобен FFTW• Одно-, двух- и трехмерные

вещественные и комплексные преобразования

• Одинарная и двойная точность• Одномерное преобразования до 128

миллионов элементов• Потоковое асинхронное вычисление• Ненормализованный вывод:

IFFT(FFT(A))=len(A)*A6

Page 7: Стандартные библиотеки и алгоритмы для разработки на  GPU

Использование CUFFT• Шаг 1: выделить память на GPU• Шаг 2: создать и настроить

преобразование (размер, тип…)• Шаг 3: выполнить преобразование

столько раз, сколько необходимо, используя указатель из шага 1

• Шаг 4: уничтожить преобразование и освободить память на GPU

7

Page 8: Стандартные библиотеки и алгоритмы для разработки на  GPU

Вызов CUFFT

8

Page 9: Стандартные библиотеки и алгоритмы для разработки на  GPU

CUBLAS• Реализация BLAS – Basic Linear Algebra Subprograms

• Поддержка всех функций BLAS– Level1 (вектор-вектор): O(N)

• AXPY: y = alpha.x + y• DOT: dot = x.y

– Level2 (матрица-вектор): O(N^2)• Vector multiplication by a General Matrix : GEMV• Triangular solver : TRSV

– Level3 (матрица-матрица): O(N^3)• General Matrix Multiplication : GEMM• Triangular Solver : TRSM

9

Page 10: Стандартные библиотеки и алгоритмы для разработки на  GPU

Особенности CUBLAS• Поддержка 4 типов:– Float, Double, Complex, Double Complex– Префиксы: S, D, C, Z

• 152 функции: S(37), D(37), C(41), Z(41)

• Название функций: cublas + BLAS_name

• Пример: cublasSGEMM– S: одинарной точности– GE: general (общего вида)– M: multiplication (умножение)– M: matrix (матрица)

10

Page 11: Стандартные библиотеки и алгоритмы для разработки на  GPU

Использование CUBLAS• Интерфейс в cublas.h• Имена функций (cublasSGEMM)• Обработка ошибок–Функции ядра не возвращают ошибок• Есть функция для получения последней

ошибки– Вспомогательные функции

возвращают ошибки• Вспомогательные функции:– Выделение памяти, передача данных11

Page 12: Стандартные библиотеки и алгоритмы для разработки на  GPU

Вызов CUBLAS

12

Page 13: Стандартные библиотеки и алгоритмы для разработки на  GPU

CUBLAS в CUDA 4.0• Новый заголовочный файл

cublas_v2.h– Новый API

• Добавлена возможность работы с несколькими GPU

• Все функции возвращают код ошибки

• cublasSetKernelStream() переименован в cublasSetStream()

13

Page 14: Стандартные библиотеки и алгоритмы для разработки на  GPU

CURAND• Генерация псевдослучайных чисел• Возможность API вызов на хосте

для генерации случайных чисел• Возможность использовать внутри

GPU функций/ядер• Равномерные, нормальные и

логнормальные распределения одинарной и двойной точности

14

Page 15: Стандартные библиотеки и алгоритмы для разработки на  GPU

Использование CURAND• Создание генератора

curandCreateGenerator()

• Инициализация генератораcurandSetPseudoRandomGeneratorSeed()

• Генерация данных из распределенийcurandGenerateUniform()/curandGenerateUniformDouble():

РавномерноеcurandGenerateNormal()/cuRandGenerateNormalDouble(): ГауссовоcurandGenerateLogNormal/curandGenerateLogNormalDouble(): Лог-

нормальное

• Уничтожение генератораcurandDestroyGenerator()

15

Page 16: Стандартные библиотеки и алгоритмы для разработки на  GPU

Вызов CURAND

16

Page 17: Стандартные библиотеки и алгоритмы для разработки на  GPU

NPP• NVIDIA Performance Primitives• Библиотека функций– Оптимизирована– Низкоуровневая– Исполняется на GPU

• ~350 функций для обработки изображений

• ~100 функций для обработки сигналов

17

Page 18: Стандартные библиотеки и алгоритмы для разработки на  GPU

Thrust• Библиотека шаблонов для

CUDA– Похожа на C++ STL

• Контейнеры– Управление памятью на хосте и

устройстве: thrust::host_vector<T>, thrust::device_vector<T>

– Помогает избежать распространенные ошибки

• Итераторы– Знают, где находятся данные

• Алгоритмы– Сортировка, редукция, префиксная

сумма, и т. д.18

Page 19: Стандартные библиотеки и алгоритмы для разработки на  GPU

Алгоритмы

19

Page 20: Стандартные библиотеки и алгоритмы для разработки на  GPU

Алгоритмы• Редукция• Префиксная сумма (scan)• Битоническая сортировка• Свертка• Построение гистограмм• Поразрядная сортировка• …

20

Page 21: Стандартные библиотеки и алгоритмы для разработки на  GPU

Где найти?• Основы работы с технологией

CUDAБоресков А. В., Харламов А. А.

• Курс МГУ по CUDAhttps://sites.google.com/site/cudacsmsusu/

• CUDA SDKhttp://developer.nvidia.com/cuda-cc-sdk-code-samples+ Ссылки на статьи

• Программа сертификации 21

Page 22: Стандартные библиотеки и алгоритмы для разработки на  GPU

RANSAC• RANdom SAmple Consensus• Метод оценки параметров модели

на основе случайных выборок• Два типа точек: – Инлаеры (или невыбросы)– Аутлаеры (или выбросы)

22

Page 23: Стандартные библиотеки и алгоритмы для разработки на  GPU

Применение• Компьютерное зрение– Сопоставление изображений– Поиск фундаментальной матрицы– Распознавание образов– Определение положения камеры

23

Page 24: Стандартные библиотеки и алгоритмы для разработки на  GPU

Пример

Scipy.org24

Page 25: Стандартные библиотеки и алгоритмы для разработки на  GPU

Данные• data – исходные данные• model – некоторая модель, которая

может быть фитирована данными• n – минимальное число значений,

которое необходимо для фитирования модели

• k – максимальное количество итераций• t – пороговое значение для

принадлежности точки к модели• d – необходимое количество близких

точек, которое необходимо для фитирования модели

• Алгоритм возвращает параметры модели25

Page 26: Стандартные библиотеки и алгоритмы для разработки на  GPU

Псевдокодwhile iterations < k {

maybeinliers = n randomly selected values from data maybemodel = model parameters fitted to maybeinliers alsoinliers = empty set for every point in data not in maybeinliers {

if point fits maybemodel with an error smaller than t add point to alsoinliers

} if the number of elements in alsoinliers is > d { % Означает, что мы, возможно, нашли одну из хороших моделей% и проверим насколько она хороша

bettermodel=model parameters fitted to all points in maybe- and alsoinliers

thiserr = a measure of how well model fits these points if thiserr < besterr { bestfit = bettermodel besterr = thiserr }

} increment iterations

} return bestfit

26

Page 27: Стандартные библиотеки и алгоритмы для разработки на  GPU

Примеры моделей• Прямая• Параллельные прямые• Перпендикулярные прямые• Окружность• Квадрат• …

27

Page 28: Стандартные библиотеки и алгоритмы для разработки на  GPU

МНК для прямой

http://mathworld.wolfram.com/LeastSquaresFitting.html

28

Page 29: Стандартные библиотеки и алгоритмы для разработки на  GPU

МНК для окружностиЦентр координат в арифметическом среднем:

Если - центр окружности с радиусом R, то

задача минимизировать

где

Система уравнений:

29

Page 30: Стандартные библиотеки и алгоритмы для разработки на  GPU

МНК для квадратаRsq a a

cos 0 4

if

a

cos2

4

2

4

if

a

cos 4

4

if

a

cos32

4

32

4

if

acos 2

4

2 0if

X a Rsq a cos Y a Rsq a sin

Func a 0

NN 1

i

X fii a Xei 2 Y fii a Yei 2

1NN

Квадрат в полярных координатах:

Квадрат в декартовых координатах:

Функционал для минимизации:

30

Page 31: Стандартные библиотеки и алгоритмы для разработки на  GPU

Реализация №1• Каждая нить считает точку всей

модели• CULA – GPU-accelerated linear

algebra library– Применение CULA на малых выборках

замедляет вычисления на 2 порядка– При наборах ~400000 точек – в 1.5

раза медленнее процессора• Затраты на пересылку данных, и

случайный доступ к общей памяти31

Page 32: Стандартные библиотеки и алгоритмы для разработки на  GPU

Реализация №2• Каждая нить считает отдельную

модель• Быстро работает для небольших N– При больших N GPU может не успеть

отработать

32

Page 33: Стандартные библиотеки и алгоритмы для разработки на  GPU

ПримерRANSAC для окружности

33

Page 34: Стандартные библиотеки и алгоритмы для разработки на  GPU

• Брошюра «Вычисления на NVIDIA Tesla»– На последней странице контакты

Антона Джораева• alexander.myltsev@parallel-

compute.com

Вопросы34