Массивно-параллельное решение уравнения Пуассона с использованием Почему была выбрана достаточно не сложная задача( 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