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

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


1   ...   4   5   6   7   8   9   10   11   ...   21

Двумерное уравнение переноса (схема без осцилляций). Реализация на CUDA.


Постановка задачи такая же, как в главе 3.3, просто теперь уже работающая с помощью технологии CUDA. Здесь, и далее, надо сказать что программа для GPU вычислялась на nVidia Tesla s2050. Результаты сравнивались с временем работы программы на CPU, которое находится на локальной машине, а именно 2.3 GHz Intel core i5 и на CPU на сервере: Intel(R) Xeon(R) CPU X5670 2.93GHz.

Рис. 4.12

Как видно из Рис. 4 .12 результат получился таким же, как и в случае последовательного алгоритма. Тут размер сетки взят чуть больше, а именно 1000x1000. Здесь показана картина через 20 шагов.

Попробуем выяснить, насколько оптимален алгоритм, для этого, как и в случае последовательного алгоритма построим зависимость времени, приходящегося на расчет одного узла сетки, от размера сетки.



График 2.2

Как видно из График 2 .2 зависимость можно считать линейной. Это придает уверенности в том, что алгоритм написан адекватно с точки зрения скорости работы и масштабируемости.

Теперь рассмотрим, какого ускорения удалось добиться.



График 2.3

На График 2 .3 можно увидеть как зависит ускорение в зависимости от характерного размера сетки, в данном случае это просто квадратная сетка, со стороной, равной характерному размеру. Здесь измерялось время работы программы без инициализации. Под инициализацией понимается процесс подготовки графического устройства к вычислениям (например: копирование данных с host на deice). Алгоритм тестировался на различных CPU, которые также приведены на графике.

Из График 2 .3 можно сделать вывод, что ускорение увеличивается, тем больше, чем больше размер сетки. Это можно объяснить тем, что все же некоторое время уходит на запуск вычислений на графическом устройстве, которые нельзя предотвратить.

Важно отметить тот факт, как измерялось ускорение, а точнее время работы на GPU. Если с CPU есть много стандартных, точных методов измерения времени, то для GPU важно не пропустить тот факт, что вызовы функций, которые должны выполняться на GPU, происходят асинхронно с работой CPU. Т.е. при вызове функции управление сразу возвращается к CPU. Соответственно, время работы, если не синхронизировать CPU и GPU будет считаться не верно. Поэтому во всех временных тестах перед остановкой таймера вызывается функция синхронизации.

Сразу коснемся еще одной проблемы, возникающей как раз из-за того, что крайней невыгодно часто копировать информация с/на GPU. Поэтому получается, что все вычисления надо проводить с достаточно небольшим объемом данных. По крайней мере, для практических задач нужны сетки, в которых содержится до узлов. В нашем распоряжении имеется только 2GB памяти на GPU. Задача переноса достаточно легкая, в том смысле, что каждый узел содержит мало информации. Максимальный размер сетки при решении уравнения переноса получился 10000x10000 узлов. Что, конечно нельзя сказать о решении системы гиперболических уравнений, которую мы рассмотрим далее.


1   ...   4   5   6   7   8   9   10   11   ...   21

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

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


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