Массивно-параллельное решение уравнения Пуассона с

advertisement
Массивно-параллельное решение
уравнения Пуассона с использованием
Почему была выбрана достаточно не
сложная задача( Poisson 1D )?
Численное решение уравнения
Пуассона оптимально подходит в
целях освоения параллелизации Cuda
для задач численного решения ДУЧП.
(Если эта задача ускоряется то значит
ускоряются и другие).
 Уравнение Пуассона может быть
расширено до 2D, 3D случаев
заменой матрицы и правой части
СЛАУ.

Уравнение Пуассона
Рассмотрим уравнение Пуассона
𝜕2 𝑢
=𝑓
2
𝜕𝑥
𝑢𝑖+1 −2𝑢𝑖 +𝑢𝑖−1
ℎ2
= 𝑓𝑖 , 𝑖 = 0, 𝑁 − 1
Метод решения СЛАУ
Выбран метод сопряженных градиентов
 Решение СЛАУ 𝐴𝑥 = 𝑏
 Эффективный метод решения
симметричных положительно
определенных систем
 Гарантированно сходится за 𝑁
итераций ( 𝑁 - число неизвестных )
Описание метода



1: Вычислить 𝑟 (0) = 𝑝(0) = 𝑏 − 𝐴𝑥 (0) для
начального приближения 𝑥 (0)
2: do
//в цикле подразумевается i++
3:
4:
 5:


6:
∝=
𝑟 𝑖−1 ,𝑟 𝑖−1
𝑝𝑖−1 ,𝐴𝑝𝑖−1
𝑥 𝑖 = 𝑥 𝑖−1 +∝ 𝑝𝑖−1
𝑡𝑒𝑚𝑝 = 𝑟 𝑖−1 − ∝ 𝐴𝑝𝑖−1
𝜖=
𝛽=
𝑟 𝑖−1 , 𝑟 𝑖−1
𝑡𝑒𝑚𝑝,𝑡𝑒𝑚𝑝
𝑟 𝑖−1 ,𝑟 𝑖−1

7:

8:
𝑝𝑖 = 𝑡𝑒𝑚𝑝 + 𝛽 ∙ 𝑡𝑒𝑚𝑝
9:
𝑟 𝑖 = 𝑡𝑒𝑚𝑝
10: while 𝜖 > 𝜀


Конфигурация
Сравнение происходило на машине:
 CPU: Intel Core i5
 GPU: nVidia GeForce 9800
Заметим, что карта на данный момент к сожалению
является морально устаревшей. На лучшей видеокарте
возможно добиться лучшего ускорения.
Подходы к ||-ю Cuda
Попытка ||-ить все операции, каждая
из которых __global__ с интерфейсом,
в котором происходит cudaMemcpy
 Попытка ||-ить все операции, каждая
из которых __global__ без интерфейса
и без cudaMemcpy
 Попытка ||-ить все операции, каждая
из которых __device__, всё
вызывается в одном __global__

Использованный подход
Ускорение было получено при ||-ии на
Cuda самой «тяжелой» операции, а
именно умножения матрицы на вектор.
Расчеты
Сетка N
CPU( в сек )
GPU( в сек )
1
100
0.093
0.102
xSpeedup
0,91176471
2
500
0.690
0.430
1,60465116
3
1000
6.150
0.971
6,33367662
4
1500
20
4
5
2000
46
12
3,83333333
6
2500
89
24
3,70833333
7
3000
160
43
3,72093023
8
4000
380
101
3,76237624
9
5000
717
194
3,69587629
10
8000
1420
5
Время выполнения
800
700
600
500
CPU
GPU
400
300
200
100
0
100 500 1000150020002500300040005000
Ускорение
7
xSpeedup
6
5
4
3
xSpeedup
2
1
0
100 500 1000150020002500300040005000
Download