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
1
Стандартные библиотеки и алгоритмы для разработки на GPU
Александр Мыльцев (Parallel Compute)
2
Библиотеки для разработки
3
Библиотеки• http://developer.nvidia.com/cuda-tools-ecosystem• CUDA Toolkit
– Thrust : библиотека шаблонов– NPP: обработка изображений и сигналов– CURAND: псевдо- и квазислучайные числа– LIBM: стандартная библиотека математических примитивов– CUSPARSE : линейная алгебра для разреженных матриц– CUBLAS: линейная алгебра для плотных матриц– CUFFT: преобразование Фурье
• Библиотеки сторонних разработчиков– MAGMA: линейная алгебра– OpenVidia: компьютерное зрение– CULA Tools: линейная алгебра– OpenCurrent: динамика жидких сред– CUSP: решатели разреженных матриц– NAG: вычислительная финансовая система– …
4
Библиотеки
5
CUFFT
• Быстрое преобразование Фурье
6
Особенности CUFFT
• Интерфейс подобен FFTW• Одно-, двух- и трехмерные вещественные и
комплексные преобразования• Одинарная и двойная точность• Одномерное преобразования до 128
миллионов элементов• Потоковое асинхронное вычисление• Ненормализованный вывод:
IFFT(FFT(A))=len(A)*A
7
Использование CUFFT
• Шаг 1: выделить память на GPU• Шаг 2: создать и настроить преобразование
(размер, тип…)• Шаг 3: выполнить преобразование столько
раз, сколько необходимо, используя указатель из шага 1
• Шаг 4: уничтожить преобразование и освободить память на GPU
8
Вызов CUFFT
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
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 (матрица)
11
Использование CUBLAS
• Интерфейс в cublas.h• Имена функций (cublasSGEMM)• Обработка ошибок– Функции ядра не возвращают ошибок• Есть функция для получения последней ошибки
– Вспомогательные функции возвращают ошибки• Вспомогательные функции:– Выделение памяти, передача данных
12
Вызов CUBLAS
13
CUBLAS в CUDA 4.0
• Новый заголовочный файл cublas_v2.h– Новый API
• Добавлена возможность работы с несколькими GPU
• Все функции возвращают код ошибки• cublasSetKernelStream() переименован в
cublasSetStream()
14
CURAND
• Генерация псевдослучайных чисел• Возможность API вызов на хосте для
генерации случайных чисел• Возможность использовать внутри GPU
функций/ядер• Равномерные, нормальные и
логнормальные распределения одинарной и двойной точности
15
Использование CURAND
• Создание генератораcurandCreateGenerator()
• Инициализация генератораcurandSetPseudoRandomGeneratorSeed()
• Генерация данных из распределенийcurandGenerateUniform()/curandGenerateUniformDouble(): РавномерноеcurandGenerateNormal()/cuRandGenerateNormalDouble(): ГауссовоcurandGenerateLogNormal/curandGenerateLogNormalDouble(): Лог-нормальное
• Уничтожение генератораcurandDestroyGenerator()
16
Вызов CURAND
17
NPP
• NVIDIA Performance Primitives• Библиотека функций– Оптимизирована– Низкоуровневая– Исполняется на GPU
• ~350 функций для обработки изображений• ~100 функций для обработки сигналов
18
Thrust
• Библиотека шаблонов для CUDA– Похожа на C++ STL
• Контейнеры– Управление памятью на хосте и устройстве:
thrust::host_vector<T>, thrust::device_vector<T>– Помогает избежать распространенные ошибки
• Итераторы– Знают, где находятся данные
• Алгоритмы– Сортировка, редукция, префиксная сумма, и т. д.
19
Алгоритмы
20
Алгоритмы
• Редукция• Префиксная сумма (scan)• Битоническая сортировка• Свертка• Построение гистограмм• Поразрядная сортировка• …
21
Где найти?
• Основы работы с технологией CUDAБоресков А. В., Харламов А. А.
• Курс МГУ по CUDAhttps://sites.google.com/site/cudacsmsusu/
• CUDA SDKhttp://developer.nvidia.com/cuda-cc-sdk-code-samples
+ Ссылки на статьи
• Программа сертификации
22
RANSAC
• RANdom SAmple Consensus• Метод оценки параметров модели на
основе случайных выборок• Два типа точек: – Инлаеры (или невыбросы)– Аутлаеры (или выбросы)
23
Применение
• Компьютерное зрение– Сопоставление изображений– Поиск фундаментальной матрицы– Распознавание образов– Определение положения камеры
24
Пример
Scipy.org
25
Данные
• data – исходные данные• model – некоторая модель, которая может быть
фитирована данными• n – минимальное число значений, которое необходимо
для фитирования модели• k – максимальное количество итераций• t – пороговое значение для принадлежности точки к
модели• d – необходимое количество близких точек, которое
необходимо для фитирования модели
• Алгоритм возвращает параметры модели
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
27
Примеры моделей
• Прямая• Параллельные прямые• Перпендикулярные прямые• Окружность• Квадрат• …
28
МНК для прямой
http://mathworld.wolfram.com/LeastSquaresFitting.html
29
МНК для окружностиЦентр координат в арифметическом среднем:
Если - центр окружности с радиусом R, то
задача минимизировать
где
Система уравнений:
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
Квадрат в полярных координатах:
Квадрат в декартовых координатах:
Функционал для минимизации:
31
Реализация №1
• Каждая нить считает точку всей модели• CULA – GPU-accelerated linear algebra library– Применение CULA на малых выборках
замедляет вычисления на 2 порядка– При наборах ~400000 точек – в 1.5 раза
медленнее процессора• Затраты на пересылку данных, и случайный
доступ к общей памяти
32
Реализация №2
• Каждая нить считает отдельную модель• Быстро работает для небольших N– При больших N GPU может не успеть
отработать
33
ПримерRANSAC для окружности
34
• Брошюра «Вычисления на NVIDIA Tesla»– На последней странице контакты
Антона Джораева• [email protected]
Вопросы