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