страница7/21
Дата11.07.2018
Размер1.74 Mb.

Разработка алгоритмов решения систем гиперболических уравнений на графических процессорах


1   2   3   4   5   6   7   8   9   10   ...   21

Распараллеливание последовательного алгоритма решения уравнения переноса с помощью технологии CUDA.

  1. Краткое описание технологии CUDA.


Для того чтобы было легко понимать дальнейшее изложение, введем некоторые понятия.

Введем такое понятие, как графическое устройство или карточка (device). Это понятие важно тем, что внутри этого устройство мы не можем влиять на выделение ресурсов для расчетов. Мы можем только лишь сказать, что делать каждому потоку. Но мы не можем управлять созданием этих потоков, за нас это делает GPU. Потоки в GPU гораздо более легкие, чем в CPU. Поэтому в таких системах количество потоков может быть очень большим.

В технологии CUDA есть такое понятие как хост (host). Этим понятием мы будем обозначать устройство, на котором выполняется последовательный код (например, обычный компьютер). Т.е. обмен данных между хостом и карточкой (between host and device), это будет обозначать перенос данных из общей памяти GPU на память, связанную с CPU (это может быть как оперативная, так и память на жестком диске, если оперативной не хватает).

Существует 6 типов памяти:



  1. Регистровая память (register) самая быстрая из всех возможных. Делится поровну между всеми нитями. Здесь содержатся все локальные переменные ядра и промежуточные значения вычислений.

  2. Разделяемая память (shared memory) – очень быстрая. Ее размер 40-64Кб на блок. Такая память доступна для всех потоков в данном блоке. Чтение и запись явно управляются программистом.

  3. Локальная память (local memory) если регистровая память заканчивается, начинает использоваться более медленная. Эта память ограничена только общей памятью GPU.

  4. Константная память (constant memory) достаточно быстрая, но небольшая по объему. Из ядра данные могут только считываться из константной памяти.

  5. Глобальная память (global memory) – самая медленная память. С нее копируются данные с хоста и из нее копируются назад.

  6. Текстуарная память (texture memory) – является не отдельным видом память и механизмом обращения к глобальной. Используется в основном для обработки графики.

Кроме того, надо понимать, что все потоки или threads, объединены в блоки или blocks. Сколько конкретно потоков будет в одном блоке, и сколько блоков надо использовать, настраивать можно. Потому что нет смысла выделять слишком большое количество ресурсов, просто для того, чтобы они простаивали.

Рис. 4.11 Схематическое описание внутренней структуры графического устройства.

Для более подробного понимания системы, можно обратиться к источникам [5],[6].

Хочется еще вкратце описать процесс работы программы на GPU. Для этого нам нужно обсудить какая память бывает здесь, и какая скорость считывания этой памяти, что напрямую влияет на скорость работы программы.



На самом деле, для начала нам понадобиться 2 вида памяти:

  1. Память, которая находится на устройстве, и общая для всех блоков (до 4GB, на современных GPU). Здесь надо сказать, что скорость обмена с этой памятью внутри GPU ~80Gb/s. Скорость копирования из/на эту память, например из оперативной памяти, не превышает 4Gb/s. Последнее ограничение связано с шиной PCI-Express.

  2. И память, которая относится к каждому блоку потоков, и доступна, только для потоков текущего блока, зато она еще быстрее. Она носит название разделяемой или shared memory.

Итак, алгоритм работы, это скопировать на общую память данные с помощью CPU, далее провести расчеты на GPU, и скопировать результат обратно. Важно, что обычно узкое место, это как раз копирование данных из CPU в GPU и обратно. Это мы будем стараться избегать, что, как мы увидим позже, создаст другие проблемы.
1   2   3   4   5   6   7   8   9   10   ...   21

Коьрта
Контакты

    Главная страница


Разработка алгоритмов решения систем гиперболических уравнений на графических процессорах