Архив категории ‘Технология CUDA’

Итоги

    На этом шаге мы рассмотрим подведем некоторые итоги.     Из приведенных на предыдущих шагах примеров видно явное преимущество использования видеокарт для вычислений. Так, например, в 1 примере (26 шаг) явное преимущество не наблюдается, но в 4 примере (29 шаг) при размере матрицы 4096 на 4096 наблюдается почти 9 кратное превосходство по времени выполнения по […]

Пример 4. Нахождение всех кратчайших расстояних в графе

    На этом шаге мы рассмотрим последний пример с использованием технологии CUDA.     Напомним последовательный алгоритм (алгоритм Флойда) для поиска всех кратчайших путей графа.     Ключевая идея алгоритма - разбиение процесса поиска кратчайших путей на фазы.     Перед k-ой фазой величина d[i][j] равна длине кратчайшего пути из вершины i в вершину j, если этому пути […]

Пример 3. Решение систем линейных алгебраических уравнений

    На этом шаге мы рассмотрим третий пример с использованием технологии CUDA.     Напомним алгоритм Гаусса.     Алгоритм Гаусса состоит из двух шагов: Прямой ход - приведение матрицы коэффициентов к треугольному виду, т.е. к матрице в которой все элементы, стоящие ниже главной диагонали равны 0, а элементы главной диагонали равны 1. Обратный ход - приведение […]

Пример 2. Произведение матрицы на матрицу

    На этом шаге мы рассмотрим второй пример с использованием технологии CUDA.     Так же, как в предыдущем примере, опишем каждый из пунктов. Так как данная программа по своей структуре практически ничем не отличается от программы из предыдущего примера, то приведем только основные различия в каждом пункте. Выделение памяти. unsigned int matrixSize = size * […]

Пример 1. Произведение матрицы на вектор

    На этом шаге мы рассмотрим первый пример с использованием технологии CUDA.     Для эффективности вычисления используется разделяемая память, так как разделяемая память расположена в мультипроцессорах. Так же для удобства и быстроты вычислений используется двумерная матрица сетки блоков и двумерная матрица нитей блоков, так как одним из множителей является матрица.     Всю работу с технологией […]

Характеристики систем

    На этом шаге мы рассмотрим характеристики систем.     Для иллюстрации использования технологии CUDA были написаны несколько программ, в которых данная технология сравнивалась с подобной технологией MPI. Исходный код программ, использующих технологию MPI, взят из раздела Параллельные алгоритмы. Программы были написаны с помощью библиотеки QT.     Характеристики систем, на которых выполнялись вычислительные эксперименты: Персональный компьютер: […]

Библиотека Thrust. Итераторы

    На этом шаге мы рассмотрим итераторы.     В библиотеке Thrust есть итераторы для разных целей. Их использование со стандартными алгоритмами позволяет охватить многие классы задач.     В библиотеке Thrust можно выделить 5 видов итераторов: constant_iterator - данный итератор представляет собой указатель в диапозоне постоянных значений. Он удобен для создания промежутка, заполненного одним и тем […]

Библиотека Thrust. Алгоритмы

    На этом шаге мы рассмотрим алгоритмы.     В библиотеке Thrust реализованы следующие алгоритмы: Трансформация (Transformations); Редукция (Reductions); Нахождение префикс-сумм массива (Prefix-Sums); Алгоритмы изменения порядка (Reordering); Алгоритмы сортировки (Sorting).     Приведем примеры, демонстрирующие возможности алгоритмов библиотеки Thrust. Пример 1. Трансформация #include <thrust/device_vector.h> #include <thrust/transform.h> #include <thrust/sequence.h> #include <thrust/copy.h> #include <thrust/fill.h> #include <thrust/replace.h> #include <thrust/functional.h> #include […]

Библиотека Thrust. Векторы

    На этом шаге мы рассмотрим векторы.     В библиотеке Thrust содержатся два вектора контейнера host_vector и device_vector. Как можно понять из названия, host_vector хранится в памяти компьютера, в то время как device_vector хранится в памяти GPU устройства. Векторы host_vector и device_vector могут хранить данные любого типа. Так же, векторы host_vector и device_vector могут быть […]

Библиотека Thrust (общие сведения)

    На этом шаге мы дадим краткую характеристику библиотеки Thrust.     Библиотека Thrust - готовая библиотека шаблонов для CUDA, реализованная на основе стандартной библиотеки шаблонов (STL). Библиотека Thrust позволяет реализовывать высоко производительные параллельные приложения с минимальными усилиями программирования.     Библиотека Thrust предоставляет богатую коллекцию параллельных примитивов, таких как scan, sort и reduce, которые можно всячески […]