На этом шаге мы рассмотрим подведем некоторые итоги. Из приведенных на предыдущих шагах примеров видно явное преимущество использования видеокарт для вычислений. Так, например, в 1 примере (26 шаг) явное преимущество не наблюдается, но в 4 примере (29 шаг) при размере матрицы 4096 на 4096 наблюдается почти 9 кратное превосходство по времени выполнения по […]
Архив категории ‘Технология CUDA’
Пример 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, которые можно всячески […]