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

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


1   ...   8   9   10   11   12   13   14   15   ...   21


На Рис. 5 .13 изображен результат работы программы через 200 шагов работы программы.

Рис. 5.14

На Рис. 5 .14 изображен результат работы программы через 800 шагов.

На рисунках Рис. 5 .14 Рис. 5 .13 явно видно распространение фронта точечного взрыва.

Идея распараллеливания 2-х мерной задачи состоит в следующем. Каждый поток обрабатывает свой узел. В начале, рассмотрим алгоритм, который конечно ускоряет работу программы, но еще не использует большую часть преимуществ технологии CUDA.

В новой задаче каждый узел становится “тяжелее”, т.е. в нем появляется новая информация, новые данные, которые надо хранить. Вследствие чего, и изложенных в главе 4.2 обстоятельств, максимально возможный размер сетки уменьшается.

Для сравнения с CPU использовалась готовая реализация алгоритма результаты работы параллельной программы мы будем сравнивать именно с ним. Потому что он был оттестирован и максимально ускорен.

Как уже говорилось ранее, в начале идея работы заключалась в том, что каждый поток обрабатывает 1 узел, вот какие результаты по ускорению были получены.



График 3.4

На График 3 .4 изображена зависимость ускорения, в зависимости от размера сетки. Можно сделать вывод, что ускорение либо увеличивается, при увеличении размера сетки, либо не меняется, безусловно, есть смысл сравнивать с наименьшим временем работы.

Как результат, зафиксируем, что ускорение более 10 раз, в зависимости от размера сетки. В [7] написано, что это стандартный результат для базового распараллеливания любого последовательного алгоритма, если мы не используем преимуществ GPU, а точнее, не опираемся на внутренне устройство GPU.

Но, сейчас мы считаем так, что каждый поток, обсчитывает 1 узел и не использует разделяемую память. Поэтому из логических соображений, довольное большое время уходит на получение данных из общей памяти. Т.к. количество узлов, для подсчета нового значение при схеме TVD составляет 5, т.е. надо знать 2 узла справа и 2 слева (если расчет ведется по оси x). Поэтому каждый процесс независимо будет доставать из общей памяти 5 значений.

Здесь хочется сделать ремарку, считывание из памяти устроено таким образом, что 1 значение никогда не считывается, а считывается сразу несколько подряд лежащих значений, это называется bulk. Поэтому всегда быстрее считывать данные именно по порядку, а не “против шерсти” или беспорядочно. Хотя для расчета вдоль оси X, это не играет большой роли, то при подсчете по оси Y получается такая ситуация, что каждое такое значение лежит на довольно большом расстоянии друг от друга, а значит, нет шанса считать эти значения подряд за один раз, а приходится 5 раз лазить за данными.



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

График 3.5 Сетка 128x128, 1000 шагов



График 3.6 Сетка 256x256, 1000 шагов.



График 3.7 Сетка 512x512, 1000 шагов.



График 3.8 1024x1024, 1000 шагов.

Из полученных измерений можем сделать вывод, что минимальное время достигается, если количество узлов есть 1/5 от характерного размера сетки. Настоящей причины этого факта установить не удалось. Есть предположение о том, что при таком значении обрабатываемых узлов каждым потоком достигается наилучшее соотношение между временем вычисления и временем копирования в память.

Теперь можно построить график зависимости ускорения от характерного размера сетки.



График 3.9

Хотя из График 3 .9 мы видим, что ускорение увеличилось, после подбора наилучшего числа вычисляемых в одном потоке узлов. Но все же нет уверенности в правильном подборе константы 1/5. И все же пока не использована разделяемая память, с помощью которой ожидается добиться еще большего ускорения.

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

Теперь, сделав первое приближение алгоритма, продолжим его улучшать и используем разделяемую память.

1   ...   8   9   10   11   12   13   14   15   ...   21

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

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


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