Скачать презентацию Стандартные библиотеки и алгоритмы для разработки на GPU Скачать презентацию Стандартные библиотеки и алгоритмы для разработки на GPU

2b5c92c90626b0d6fd655356fb5cce77.ppt

  • Количество слайдов: 34

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

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

Библиотеки • http: //developer. nvidia. com/cuda-tools-ecosystem • CUDA Toolkit – – – – Thrust Библиотеки • 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 Библиотеки 4

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

Особенности CUFFT • Интерфейс подобен FFTW • Одно-, двух- и трехмерные вещественные и комплексные Особенности CUFFT • Интерфейс подобен FFTW • Одно-, двух- и трехмерные вещественные и комплексные преобразования • Одинарная и двойная точность • Одномерное преобразования до 128 миллионов элементов • Потоковое асинхронное вычисление • Ненормализованный вывод: IFFT(A))=len(A)*A 6

Использование CUFFT • Шаг 1: выделить память на GPU • Шаг 2: создать и Использование CUFFT • Шаг 1: выделить память на GPU • Шаг 2: создать и настроить преобразование (размер, тип…) • Шаг 3: выполнить преобразование столько раз, сколько необходимо, используя указатель из шага 1 • Шаг 4: уничтожить преобразование и освободить память на GPU 7

Вызов CUFFT 8 Вызов CUFFT 8

CUBLAS • Реализация BLAS – Basic Linear Algebra Subprograms • Поддержка всех функций BLAS 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 – Префиксы: Особенности 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) • Обработка Использование CUBLAS • Интерфейс в cublas. h • Имена функций (cublas. SGEMM) • Обработка ошибок – Функции ядра не возвращают ошибок • Есть функция для получения последней ошибки – Вспомогательные функции возвращают ошибки • Вспомогательные функции: – Выделение памяти, передача данных 11

Вызов CUBLAS 12 Вызов CUBLAS 12

CUBLAS в CUDA 4. 0 • Новый заголовочный файл cublas_v 2. h – Новый CUBLAS в CUDA 4. 0 • Новый заголовочный файл cublas_v 2. h – Новый API • Добавлена возможность работы с несколькими GPU • Все функции возвращают код ошибки • cublas. Set. Kernel. Stream() переименован в cublas. Set. Stream() 13

CURAND • Генерация псевдослучайных чисел • Возможность API вызов на хосте для генерации случайных CURAND • Генерация псевдослучайных чисел • Возможность API вызов на хосте для генерации случайных чисел • Возможность использовать внутри GPU функций/ядер • Равномерные, нормальные и логнормальные распределения одинарной и двойной точности 14

Использование CURAND • Создание генератора curand. Create. Generator() • Инициализация генератора curand. Set. Pseudo. Использование 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 Вызов CURAND 16

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

Thrust • Библиотека шаблонов для CUDA – Похожа на C++ STL • Контейнеры – Thrust • Библиотека шаблонов для CUDA – Похожа на C++ STL • Контейнеры – Управление памятью на хосте и устройстве: thrust: : host_vector, thrust: : device_vector – Помогает избежать распространенные ошибки • Итераторы – Знают, где находятся данные • Алгоритмы – Сортировка, редукция, префиксная сумма, и т. д. 18

Алгоритмы 19 Алгоритмы 19

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

Где найти? • Основы работы с технологией CUDA Боресков А. В. , Харламов А. Где найти? • Основы работы с технологией CUDA Боресков А. В. , Харламов А. А. • Курс МГУ по CUDA https: //sites. google. com/site/cudacsmsusu/ • CUDA SDK http: //developer. nvidia. com/cuda-cc-sdk-code-samples + Ссылки на статьи • Программа сертификации 21

RANSAC • RANdom SAmple Consensus • Метод оценки параметров модели на основе случайных выборок RANSAC • RANdom SAmple Consensus • Метод оценки параметров модели на основе случайных выборок • Два типа точек: – Инлаеры (или невыбросы) – Аутлаеры (или выбросы) 22

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

Пример 24 Scipy. org Пример 24 Scipy. org

Данные • data – исходные данные • model – некоторая модель, которая может быть Данные • data – исходные данные • model – некоторая модель, которая может быть фитирована данными • n – минимальное число значений, которое необходимо для фитирования модели • k – максимальное количество итераций • t – пороговое значение для принадлежности точки к модели • d – необходимое количество близких точек, которое необходимо для фитирования модели • Алгоритм возвращает параметры модели 25

Псевдокод while iterations < k { maybeinliers = n randomly selected values from data Псевдокод 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 Примеры моделей • • • Прямая Параллельные прямые Перпендикулярные прямые Окружность Квадрат … 27

МНК для прямой http: //mathworld. wolfram. com/Least. Squares. Fitting. html 28 МНК для прямой http: //mathworld. wolfram. com/Least. Squares. Fitting. html 28

МНК для окружности Центр координат в арифметическом среднем: Если - центр окружности с радиусом МНК для окружности Центр координат в арифметическом среднем: Если - центр окружности с радиусом R, то задача минимизировать где Система уравнений: 29

МНК для квадрата Квадрат в полярных координатах: Квадрат в декартовых координатах: Функционал для минимизации: МНК для квадрата Квадрат в полярных координатах: Квадрат в декартовых координатах: Функционал для минимизации: 30

Реализация № 1 • Каждая нить считает точку всей модели • CULA – GPU-accelerated Реализация № 1 • Каждая нить считает точку всей модели • CULA – GPU-accelerated linear algebra library – Применение CULA на малых выборках замедляет вычисления на 2 порядка – При наборах ~400000 точек – в 1. 5 раза медленнее процессора • Затраты на пересылку данных, и случайный доступ к общей памяти 31

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

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

 • Брошюра «Вычисления на NVIDIA Tesla» – На последней странице контакты Антона Джораева • Брошюра «Вычисления на NVIDIA Tesla» – На последней странице контакты Антона Джораева • alexander. [email protected] com Вопросы 34