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

advertisement
Стандартные библиотеки и
алгоритмы для разработки на GPU
Александр Мыльцев (Parallel Compute)
1
Библиотеки для разработки
2
Библиотеки
• http://developer.nvidia.com/cuda-tools-ecosystem
• CUDA Toolkit
–
–
–
–
–
–
–
Thrust : библиотека шаблонов
NPP: обработка изображений и сигналов
CURAND: псевдо- и квазислучайные числа
LIBM: стандартная библиотека математических примитивов
CUSPARSE : линейная алгебра для разреженных матриц
CUBLAS: линейная алгебра для плотных матриц
CUFFT: преобразование Фурье
• Библиотеки сторонних разработчиков
–
–
–
–
–
–
–
MAGMA: линейная алгебра
OpenVidia: компьютерное зрение
CULA Tools: линейная алгебра
OpenCurrent: динамика жидких сред
CUSP: решатели разреженных матриц
NAG: вычислительная финансовая система
…
3
Библиотеки
4
CUFFT
• Быстрое преобразование Фурье
5
Особенности CUFFT
• Интерфейс подобен FFTW
• Одно-, двух- и трехмерные вещественные и
комплексные преобразования
• Одинарная и двойная точность
• Одномерное преобразования до 128
миллионов элементов
• Потоковое асинхронное вычисление
• Ненормализованный вывод:
IFFT(FFT(A))=len(A)*A
6
Использование CUFFT
• Шаг 1: выделить память на GPU
• Шаг 2: создать и настроить преобразование
(размер, тип…)
• Шаг 3: выполнить преобразование столько
раз, сколько необходимо, используя
указатель из шага 1
• Шаг 4: уничтожить преобразование и
освободить память на GPU
7
Вызов CUFFT
8
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
Особенности 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
Использование CUBLAS
• Интерфейс в cublas.h
• Имена функций (cublasSGEMM)
• Обработка ошибок
– Функции ядра не возвращают ошибок
• Есть функция для получения последней ошибки
– Вспомогательные функции возвращают ошибки
• Вспомогательные функции:
– Выделение памяти, передача данных
11
Вызов CUBLAS
12
CUBLAS в CUDA 4.0
• Новый заголовочный файл cublas_v2.h
– Новый API
• Добавлена возможность работы с
несколькими GPU
• Все функции возвращают код ошибки
• cublasSetKernelStream() переименован в
cublasSetStream()
13
CURAND
• Генерация псевдослучайных чисел
• Возможность API вызов на хосте для
генерации случайных чисел
• Возможность использовать внутри GPU
функций/ядер
• Равномерные, нормальные и
логнормальные распределения одинарной
и двойной точности
14
Использование CURAND
• Создание генератора
curandCreateGenerator()
• Инициализация генератора
curandSetPseudoRandomGeneratorSeed()
• Генерация данных из распределений
curandGenerateUniform()/curandGenerateUniformDouble(): Равномерное
curandGenerateNormal()/cuRandGenerateNormalDouble(): Гауссово
curandGenerateLogNormal/curandGenerateLogNormalDouble(): Лог-нормальное
• Уничтожение генератора
curandDestroyGenerator()
15
Вызов CURAND
16
NPP
• NVIDIA Performance Primitives
• Библиотека функций
– Оптимизирована
– Низкоуровневая
– Исполняется на GPU
• ~350 функций для обработки изображений
• ~100 функций для обработки сигналов
17
Thrust
• Библиотека шаблонов для CUDA
– Похожа на C++ STL
• Контейнеры
– Управление памятью на хосте и устройстве:
thrust::host_vector<T>, thrust::device_vector<T>
– Помогает избежать распространенные ошибки
• Итераторы
– Знают, где находятся данные
• Алгоритмы
– Сортировка, редукция, префиксная сумма, и т. д.
18
Алгоритмы
19
Алгоритмы
•
•
•
•
•
•
•
Редукция
Префиксная сумма (scan)
Битоническая сортировка
Свертка
Построение гистограмм
Поразрядная сортировка
…
20
Где найти?
• Основы работы с технологией CUDA
Боресков А. В., Харламов А. А.
• Курс МГУ по CUDA
https://sites.google.com/site/cudacsmsusu/
• CUDA SDK
http://developer.nvidia.com/cuda-cc-sdk-code-samples
+ Ссылки на статьи
• Программа сертификации
21
RANSAC
• RANdom SAmple Consensus
• Метод оценки параметров модели на
основе случайных выборок
• Два типа точек:
– Инлаеры (или невыбросы)
– Аутлаеры (или выбросы)
22
Применение
• Компьютерное зрение
– Сопоставление изображений
– Поиск фундаментальной матрицы
– Распознавание образов
– Определение положения камеры
23
Пример
24
Scipy.org
Данные
• data – исходные данные
• model – некоторая модель, которая может быть
фитирована данными
• n – минимальное число значений, которое
необходимо для фитирования модели
• k – максимальное количество итераций
• t – пороговое значение для принадлежности точки
к модели
• d – необходимое количество близких точек, которое
необходимо для фитирования модели
• Алгоритм возвращает параметры модели
25
Псевдокод
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
}
26
return bestfit
Примеры моделей
•
•
•
•
•
•
Прямая
Параллельные прямые
Перпендикулярные прямые
Окружность
Квадрат
…
27
МНК для прямой
28
http://mathworld.wolfram.com/LeastSquaresFitting.html
МНК для окружности
Центр координат в арифметическом среднем:
Если
- центр окружности с радиусом R, то
задача минимизировать
где
Система уравнений:
29
МНК для квадрата
Квадрат в полярных координатах:
Rsq   a 
a
cos  
a
   

2

a
if
cos    
a
cos 
 2
a


4

if
4
cos 
 3

if 0   


4
 
cos  2   
if

2

4
if


4



4

4
3
2


4
   2   0
Квадрат в декартовых координатах:
X  a     Rsq  a  cos     
Y  a     Rsq  a  sin    
Функционал для минимизации:
Func a    
NN1
  Xfii a     Xei  Yfii a     Yei   NN
2
2
1
i 0
30
Реализация №1
• Каждая нить считает точку всей модели
• CULA – GPU-accelerated linear algebra library
– Применение CULA на малых выборках
замедляет вычисления на 2 порядка
– При наборах ~400000 точек – в 1.5 раза
медленнее процессора
• Затраты на пересылку данных, и случайный
доступ к общей памяти
31
Реализация №2
• Каждая нить считает отдельную модель
• Быстро работает для небольших N
– При больших N GPU может не успеть
отработать
32
Пример
RANSAC для окружности
33
• Брошюра «Вычисления на NVIDIA Tesla»
– На последней странице контакты
Антона Джораева
• alexander.myltsev@parallel-compute.com
Вопросы
34
Download