2b5c92c90626b0d6fd655356fb5cce77.ppt
- Количество слайдов: 34
Стандартные библиотеки и алгоритмы для разработки на GPU Александр Мыльцев (Parallel Compute) 1
Библиотеки для разработки 2
Библиотеки • http: //developer. nvidia. com/cuda-tools-ecosystem • CUDA Toolkit – – – – Thrust : библиотека шаблонов NPP: обработка изображений и сигналов CURAND: псевдо- и квазислучайные числа LIBM: стандартная библиотека математических примитивов CUSPARSE : линейная алгебра для разреженных матриц CUBLAS: линейная алгебра для плотных матриц CUFFT: преобразование Фурье • Библиотеки сторонних разработчиков – – – – MAGMA: линейная алгебра Open. Vidia: компьютерное зрение CULA Tools: линейная алгебра Open. Current: динамика жидких сред CUSP: решатели разреженных матриц NAG: вычислительная финансовая система … 3
Библиотеки 4
CUFFT • Быстрое преобразование Фурье 5
Особенности CUFFT • Интерфейс подобен FFTW • Одно-, двух- и трехмерные вещественные и комплексные преобразования • Одинарная и двойная точность • Одномерное преобразования до 128 миллионов элементов • Потоковое асинхронное вычисление • Ненормализованный вывод: IFFT(A))=len(A)*A 6
Использование CUFFT • Шаг 1: выделить память на GPU • Шаг 2: создать и настроить преобразование (размер, тип…) • Шаг 3: выполнить преобразование столько раз, сколько необходимо, используя указатель из шага 1 • Шаг 4: уничтожить преобразование и освободить память на GPU 7
Вызов CUFFT 8
CUBLAS • Реализация BLAS – Basic Linear Algebra Subprograms • Поддержка всех функций BLAS – Level 1 (вектор-вектор): O(N) • AXPY: y = alpha. x + y • DOT: dot = x. y – Level 2 (матрица-вектор): O(N^2) • Vector multiplication by a General Matrix : GEMV • Triangular solver : TRSV – Level 3 (матрица-матрица): 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 • Пример: cublas. SGEMM – S: одинарной точности – GE: general (общего вида) – M: multiplication (умножение) – M: matrix (матрица) 10
Использование CUBLAS • Интерфейс в cublas. h • Имена функций (cublas. SGEMM) • Обработка ошибок – Функции ядра не возвращают ошибок • Есть функция для получения последней ошибки – Вспомогательные функции возвращают ошибки • Вспомогательные функции: – Выделение памяти, передача данных 11
Вызов CUBLAS 12
CUBLAS в CUDA 4. 0 • Новый заголовочный файл cublas_v 2. h – Новый API • Добавлена возможность работы с несколькими GPU • Все функции возвращают код ошибки • cublas. Set. Kernel. Stream() переименован в cublas. Set. Stream() 13
CURAND • Генерация псевдослучайных чисел • Возможность API вызов на хосте для генерации случайных чисел • Возможность использовать внутри GPU функций/ядер • Равномерные, нормальные и логнормальные распределения одинарной и двойной точности 14
Использование CURAND • Создание генератора curand. Create. Generator() • Инициализация генератора curand. Set. Pseudo. Random. Generator. Seed() • Генерация данных из распределений curand. Generate. Uniform()/curand. Generate. Uniform. Double(): Равномерное curand. Generate. Normal()/cu. Rand. Generate. Normal. Double(): Гауссово curand. Generate. Log. Normal/curand. Generate. Log. Normal. Double(): Лог-нормальное • Уничтожение генератора curand. Destroy. Generator() 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
МНК для прямой http: //mathworld. wolfram. com/Least. Squares. Fitting. html 28
МНК для окружности Центр координат в арифметическом среднем: Если - центр окружности с радиусом R, то задача минимизировать где Система уравнений: 29
МНК для квадрата Квадрат в полярных координатах: Квадрат в декартовых координатах: Функционал для минимизации: 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
2b5c92c90626b0d6fd655356fb5cce77.ppt