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

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

  • Upload
    rimona

  • View
    83

  • Download
    0

Embed Size (px)

DESCRIPTION

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

Citation preview

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

1

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

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

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

2

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

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

3

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

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

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

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

4

Библиотеки

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

5

CUFFT

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

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

6

Особенности CUFFT

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

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

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

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

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

7

Использование CUFFT

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

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

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

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

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

8

Вызов CUFFT

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

9

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

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

10

Особенности 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 (матрица)

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

11

Использование CUBLAS

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

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

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

12

Вызов CUBLAS

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

13

CUBLAS в CUDA 4.0

• Новый заголовочный файл cublas_v2.h– Новый API

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

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

cublasSetStream()

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

14

CURAND

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

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

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

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

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

15

Использование CURAND

• Создание генератораcurandCreateGenerator()

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

• Генерация данных из распределенийcurandGenerateUniform()/curandGenerateUniformDouble(): РавномерноеcurandGenerateNormal()/cuRandGenerateNormalDouble(): ГауссовоcurandGenerateLogNormal/curandGenerateLogNormalDouble(): Лог-нормальное

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

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

16

Вызов CURAND

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

17

NPP

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

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

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

18

Thrust

• Библиотека шаблонов для CUDA– Похожа на C++ STL

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

thrust::host_vector<T>, thrust::device_vector<T>– Помогает избежать распространенные ошибки

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

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

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

19

Алгоритмы

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

20

Алгоритмы

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

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

21

Где найти?

• Основы работы с технологией CUDAБоресков А. В., Харламов А. А.

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

• CUDA SDKhttp://developer.nvidia.com/cuda-cc-sdk-code-samples

+ Ссылки на статьи

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

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

22

RANSAC

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

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

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

23

Применение

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

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

24

Пример

Scipy.org

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

25

Данные

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

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

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

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

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

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

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

26

Псевдокод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

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

27

Примеры моделей

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

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

28

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

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

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

29

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

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

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

где

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

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

30

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

Rsq a a

cos 0 4

if

a

cos2

4

2

4

if

a

cos 4

4

if

a

cos32

4

32

4

if

a

cos 2 4

2 0if

X a Rsq a cos Y a Rsq a sin

Func a 0

NN 1

i

X fiia Xe

i 2 Y fi

ia Ye

i 2

1

NN

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

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

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

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

31

Реализация №1

• Каждая нить считает точку всей модели• CULA – GPU-accelerated linear algebra library– Применение CULA на малых выборках

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

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

доступ к общей памяти

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

32

Реализация №2

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

отработать

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

33

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

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

34

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

Антона Джораева• [email protected]

Вопросы