Содержание
- 2. Часть 5: Разделение переменных Разделение переменных для оператора Лапласа Вычислительный алгоритм OMP и MPI реализация
- 3. Сеточная аппроксимация оператора Лапласа Кусочно-линейная аппроксимация, квадратная сетка
- 4. Сеточная аппроксимация оператора Лапласа Как найти собственные вектора и собственные значения матрицы А?
- 5. Базисные функции оператора Лапласа Пусть - собственный вектор матрицы A. Тогда оказывается: Следовательно для нашей матрицы
- 6. Базисные функции оператора Лапласа Разложим теперь решение задачи и правую часть по базисным функциям матрицы A
- 7. Вычислительный алгоритм (двойной ряд) - Тригонометрическое разложение, трудоемкость С*N*log(N)
- 8. Вычислительный алгоритм (двойной ряд) - Тригонометрическое разложение, трудоемкость С*N*log(N)
- 9. Вычислительный алгоритм (однократный ряд) - Серия из трехдиагональных матриц, трудоемкость решения 6*N
- 10. Вычислительный алгоритм (однократный ряд)
- 11. Вычислительный алгоритм (однократный ряд) Разложение по синусам горизонтальных компонент. Присутствует в библиотеках Intel MKL, Netlib
- 12. Вычислительный алгоритм (однократный ряд) Решение трехдиагональных систем (каждая система разная!!! к диагонали добавляютя различные собственные числа)
- 13. Вычислительный алгоритм (однократный ряд) Обратное разложение по синусам горизонтальных компонент. Присутствует в тех же библиотеках
- 14. Вычислительный алгоритм (однократный ряд) subroutine laplas_solution(f(*,*),N) …… Do i=1,N Call forward_trig_transform(f(i,*),….) enddo Do j=1,N Call three_diagonal_lu(f(*,j),lambda(j),…)
- 15. Вычислительный алгоритм (однократный ряд) (OMP) subroutine laplas_solution(f(*,*),N) …… C$OMP PARALLEL DO Do i=1,N Call forward_trig_transform(f(i,*),….) enddo
- 16. Вычислительный алгоритм (однократный ряд) ( MPI) Для MPI идеалогии такое неподходит, так как данные распределены по
- 17. Вариант 1 (транспонирование, MPI) Пусть данные распределены по строкам Proc 0 Proc 1 Proc 2
- 18. Вариант 1 (транспонирование, MPI) Так как каждая строка целиком лежит на одном процессе, то каждый процесс
- 19. Вариант 1 (транспонирование, MPI) Обычный алгоритм прогонки не может быть реализован, так как компоненты правых частей
- 20. Вариант 1 (транспонирование, MPI) Данные можно транспонировать между процессами. ВАЖНО! Не забыть про порядок нумерации на
- 21. Вариант 1 (транспонирование, MPI) После транспонирования данных правые части для прогонок лежат на одном процессе, следовательно
- 22. Вариант 1 (транспонирование, MPI) Данные необходимо вернуть в изначальное расположения для релизации обратного разложения по синусам
- 23. Вариант 1 (транспонирование, MPI) Теперь каждая строка опять целиком лежит на одном процессе, и каждый процесс
- 24. Вариант 1 (транспонирование, MPI) subroutine laplas_solution(f(*,*),N) …… Call MPI_Init(); Do i=ny_first,ny_last Call forward_trig_transform(f(i-ny_first+1,*),….) enddo call transpose
- 25. Вариант 2 (параллельная прогонка, MPI) Так как обмены данных может быть достаточно затратной операций, предлагается аглоритм
- 26. Вариант 2 (параллельная прогонка, MPI) Разобьем компоненты вектора решения (X)i и правой части (F)I между процессами
- 27. Вариант 2 (параллельная прогонка, MPI) Теорема: Если вектор решения записать в следующем виде: ,где max_proc –
- 28. Вариант 2 (параллельная прогонка, MPI) Теорема: Если вектор решения записать в следующем виде: ,где max_proc –
- 29. Вариант 2 (параллельная прогонка, MPI) Алгоритм: Решаем на каждом процессора 3 системы уравнений методом прогонки с
- 30. Вариант 1 (транспонирование, MPI) subroutine laplas_solution(f(*,*),N) …… Call MPI_Init(); Do i=ny_first,ny_last Call forward_trig_transform(f(i-ny_first+1,*),….) enddo Do j=1,nx
- 32. Скачать презентацию