И, наконец, сама функция-ядро:
Осуществляя эти действия для случая,
когда коэффициенты были получены быстрым преобразованием Фурье, нужно помнить,
что результат должен быть удвоен, так как при изложении метода в пункте ![]()
для простоты была опущена двойка.
По аналогии рассмотрим двумерную
ситуацию:
Так как для мембраны были получены
два набора коэффициентов по обоим измерениям, будем хранить их в двух массивах
типа ![]()
Предполагая, что мембрана
разбивается ![]()
точками по ![]()
-измерению и ![]()
- по ![]()
, сформируем функцию подготовки и
запуска ядра:
![]()
![]()
Здесь, как и в одномерном случае,
константа ![]()
была положена равной единице.
Примечательно, что для построения двумерного алгоритма удобнее пользоваться
двумерными блоками и сеткой.
Соответствующая функция-ядро будет
выглядеть так:
![]()
*
После выполнения любой из этих
программ результаты хранятся в одномерном массиве ![]()
. Таким образом был получен
программный код, с помощью которого отклонения всех точек струны или мембраны
рассчитываются параллельно, что позволяет значительно сократить время расчетов
и сделать возможной визуализацию колебательного процесса. В данной работе
визуализация колебаний осуществляется с помощью открытой графической библиотеки
OpenGL.
Параллельно рассчитанный трехмерный массив координат точек проецируется на
двумерную плоскость с учётом задаваемой в программе перспективы и отображается
на экран. Время, через которое расчет повторяется заново, чтобы получить новые
координаты точек по вертикальной оси, было положено равным одной сотой секунды.
6.3 Оценка выигрыша во
времени
Для того чтобы в полной мере оценить преимущества технологии CUDA перед вычислениями на центральном процессоре, было сделано несколько простых сравнений. Сначала эксперимент был проведен при участии программы для нахождения значения интеграла методом прямоугольников, описанной в первой главе. Была создана абсолютно аналогичная, но непараллельная программа, которая выполнялась исключительно на CPU. Оценка времени выполнения производилась с помощью функций-расширений CUDA для программы, написанной на CUDA C, и стандартными средствами языка С - для обыкновенной. Как показало сравнение для одного миллиона разбиений интервала интегрирования, время, затраченное на вычисления CPU, в десять раз превосходило время, затраченное при расчете видеокартой (точные значения времени для разного числа разбиений находятся в приложении A).
Далее тестированию подверглось быстрое преобразование Фурье. Для чистоты эксперимента при создании последовательного кода была использована библиотека FFTW, именно та, на основе которой была написана CUFFT, описанная в четвёртой главе. Для входного вектора длиной в восемь тысяч сто девяносто два элемента CUDA сработала в восемь раз быстрее.
При наблюдении за временем вычисления четырёх тысяч девяносто шести интегралов методом Лежандра-Гаусса параллельные расчеты оказались выгоднее в тридцать один раз.
И, наконец, расчёт отклонений от положения равновесия тысячи двадцати четырёх точек струны при использовании CUDA выполнился в двадцать пять раз быстрее.
ЗАКЛЮЧЕНИЕ
В данной работе на примере одной из задач математической физики - задаче о малых колебаниях - были рассмотрены возможности технологии CUDA.
В соответствии с разработанным алгоритмом, решение задачи о малых колебаниях производилось в два этапа: сначала параллельно рассчитывались входящие в решение коэффициенты, а затем уже для всех точек струны или мембраны одновременно находились амплитуды. В качестве методов вычисления коэффициентов были использованы быстрое преобразование Фурье и квадратурные формулы Лежандра-Гаусса.
Для осуществления быстрого преобразования Фурье было предложено использовать библиотеку CUFFT, которая может производить расчеты параллельно. Также были проделаны некоторые математические преобразования, которые позволили использовать результат применительно к решению задачи.
В качестве альтернативы быстрому преобразованию Фурье был составлен алгоритм вычисления коэффициентов с помощью квадратур Лежандра-Гаусса. Получены узлы и весовые коэффициенты квадратурной формулы, которые затем использовались при параллельном расчете интегралов.
Наконец, был написан код, позволяющий одновременное вычисление отклонений для множества точек, что и являлось главной задачей работы.
Для наглядности результат был визуализирован с помощью графической библиотеки, и колебательный процесс выводится на экран динамически.
По результатам сравнения времени вычисления на GPU
и на CPU можно
заключить, что с применением массивно-параллельных архитектур скорость
вычислений возрастает в десятки раз, из чего следует, что технологии, подобные CUDA,
позволят существенно облегчить процесс расчетов в физике, что, в свою очередь,
при массовом использовании скажется на организации процесса научных исследований
и наверняка снизит их стоимость.
Календарный график
подготовки к защите ВКР
студента-выпускника гр. Ф - 71. Кальницкой Татьяны Борисовны.
На тему: Применение технологии CUDA в решении задач математической физики
|
Этапы работы |
Выполнение |
||
|
|
планируемый период (дата контроля) |
по факту |
|
|
1. |
Закрепление за руководителем, выдача задания на практику |
09. 09. 2011 |
|
|
2. |
Сдача отчета по научно-производственной практике |
09. 01. 2012 |
|
|
3. |
Утверждение темы ВКР, подготовка приказа |
01. 03. 2012 |
|
|
4. |
Составление плана ВКР, совместно с руководителем |
09. 03. 2012 |
|
|
5. |
Готовность к 1-му этапу контроля ВКР = выполнение 30 % (минимум: 20-30 стр.) |
31. 03. 2012 1300 |
|
|
6. |
Готовность ко 2-му этапу контроля ВКР = выполнение 70 % (минимум: 40-50 стр.) |
30. 04. 2012 1300 |
|
|
7. |
Готовность к 3-му этапу контроля ВКР = выполнение 95 % (минимум: 55-75 стр.) |
19. 05. 2012 1300 |
|
|
8. |
Утверждение и подписание разделов ВКР у консультантов |
21 - 29. 05. 2012 |
|
|
9. |
Утверждение и подписание ВКР у руководителя (получение отзыва) = выполнение 100% (минимум: 60-80 стр.) |
24 - 31. 05. 2012 |
|
|
10. |
Прохождение нормоконтроля, получение подписи Пагубко А.Б. (выполнение ВКР - 100% ) |
24 - 31. 05. 2012 |
|
|
11. |
Получение рецензии на ВКР |
25 - 30. 05. 2012 |
|
|
12. |
Предварительное заслушивание докладов по ВКР на кафедре |
30 - 31. 05. 2012 |
|
|
13. |
Получение подписи зав. кафедрой |
30 - 31. 05. 2012 |
|
|
14. |
Сдача готового комплекта ВКР секретарю ГАК |
30.05 - 01. 06. 2012 |
|
|
15. |
Защита ВКР |
14 - 15. 06. 2012 |
|
Руководитель ВКР / / . Подпись Фамилия, инициалы Дата
cтудент-выпускник
ВКР / / . Подпись Фамилия, инициалы Дата
ПРИЛОЖЕНИЕ А
Время вычислений на CPU и на GPU
|
Вычисление определённого интеграла методом прямоугольников |
||
|
Количество разбиений |
Время CPU, мс |
Время GPU, мс |
|
10000 |
0.280701 |
0.048032 |
|
50000 |
0.543859 |
0.106976 |
|
100000 |
1.105263 |
0.194208 |
|
500000 |
5.736842 |
0.876561 |
|
1000000 |
10.684210 |
1.757601 |
|
Быстрое преобразование Фурье |
||
|
Длина входного вектора |
Время CPU, мс |
Время GPU, мс |
|
8 |
0.027480 |
0.023072 |
|
32 |
0.035407 |
0.026144 |
|
128 |
0.096631 |
0.034561 |
|
512 |
0.380318 |
0.036384 |
|
2048 |
0.463209 |
0.050624 |
|
4096 |
0.864361 |
0.110688 |
|
8192 |
1.839091 |
0.228481 |
|
Расчет коэффициентов с помощью квадратур Лежандра-Гаусса |
||
|
Кол-во коэффициентов |
Время CPU, мс |
Время GPU, мс |
|
8 |
0.280713 |
0.226272 |
|
32 |
1.912281 |
0.233504 |
|
128 |
7.385964 |
0.299296 |
|
512 |
29.543859 |
0.972000 |
|
2048 |
121.526315 |
3.811360 |
|
4096 |
236.192982 |
7.621276 |
|
8192 |
474.561403 |
16.063521 |
|
Параллельный расчет амплитуд |
||
|
Число точек |
Время CPU, мс |
Время GPU, мс |
|
256 |
0.625792 |
15.714285 |
|
512 |
1.235568 |
31.142857 |
|
1024 |
2.457760 |
62.434581 |
|
2048 |
4.898496 |
118.139178 |
|
4096 |
9.777280 |
236.284141 |
|
8192 |
19.567682 |
464.154172 |
ПРИЛОЖЕНИЕ Б
Визуализация результата
0


2


4


6


8


Время, мс
0


2


4

