******** * CUDA

Download Report

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