
- •3.3 Расширение языка c……………………………………………………….46
- •1.1 Задача Дирихле
- •1.2 Метод простых итераций
- •1.3 Методы Якоби
- •1.4 Методы Зейделя и его модификации
- •2 Параллельные методы решения задачи Дирихле для систем с общей памятью
- •2.1 Использование OpenMp для организации параллелизма
- •2.2 Проблема синхронизации параллельных вычислений
- •2.3 Возможность неоднозначности вычислений в параллельных программах
- •2.4 Исключение неоднозначности вычислений
- •2.5 Волновые схемы параллельных вычислений
- •3 Параллельные вычисления с использованием видеокарты
- •3.1 Общие сведения о gpu и nvidia cuda
- •3.1.1 Разница между cpu и gpu в параллельных расчётах
- •3.1.2 Первые попытки применения расчётов на gpu
- •3.1.3 Возможности nvidia cuda
- •3.1.4 Области применения параллельных расчётов на gpu
- •3.2 Аппаратная и программная реализация cuda
- •3.2.1 Состав nvidia cuda
- •3.2.2 Архитектура gpu
- •3.2.3 Модель программирования cuda: потоковая модель
- •3.2.4 Модель программирования cuda: модель памяти
- •3.3 Расширение языка c
- •3.3.1 Директива вызова ядра
- •3.3.2 Основы cuda host api
- •3.3.3 Работа с памятью в cuda
- •3.3.4 Использование событий для синхронизации на cpu
- •3.3.5 Получение информации об имеющихся gpu и их возможностях
- •3.3.6 Компиляция
- •Http://habrahabr.Ru/blogs/cuda/54707/
2.3 Возможность неоднозначности вычислений в параллельных программах
Необходимо отметить, что разработанная вычислительная схема расчетов имеет важную принципиальную особенность: порождаемая при вычислениях последовательность обработки данных может различаться при разных запусках программы даже при одних и тех же исходных параметрах решаемой задачи. Данный эффект может проявляться в силу изменения каких-либо условий выполнения программы (вычислительной нагрузки, алгоритмов синхронизации потоков и т.п.), что может повлиять на временные соотношения между потоками (рис. 4). Взаиморасположение потоков по области расчетов может быть различным: одни потоки могут опережать другие и, наоборот, часть потоков могут отставать (при этом характер взаиморасположения может меняться в ходе вычислений). Подобное поведение параллельных участков программы обычно именуется состязанием потоков (race condition) и отражает важный принцип параллельного программирования – временная динамика выполнения параллельных потоков не должна учитываться при разработке параллельных алгоритмов и программ.
Рис. 4 Возможные различные варианты взаиморасположения параллельных потоков (состязание потоков)
В рассматриваемом примере при вычислении нового значения uij в зависимости от условий выполнения могут использоваться разные (от предыдущей или текущей итераций) оценки соседних значений по вертикали. Тем самым, количество итераций метода до выполнения условия остановки и, самое главное, конечное решение задачи могут различаться при повторных запусках программы. Получаемые оценки величин uij. будут соответствовать точному решению задачи в пределах задаваемой точности, но, тем не менее, могут быть различными. Применение вычислений такого типа для сеточных алгоритмов получило наименование метода хаотической релаксации (chaotic relaxation).
2.4 Исключение неоднозначности вычислений
Для достижения однозначности необходимо использование дополнительных вычислительных схем.
Способ, широко применяемый в практике расчетов, состоит в разделении места хранения результатов вычислений на предыдущей и текущей итерациях метода сеток.
В этом случае результаты предыдущей итерации запоминаются в массиве u, новые вычисления значения запоминаются в дополнительном массиве un. Как результат, независимо от порядка выполнения вычислений для проведения расчетов всегда используются значения величин uij от предыдущей итерации метода. Такая схема реализации сеточных алгоритмов обычно именуется методом Гаусса – Якоби. Этот метод гарантирует однозначность результатов независимо от способа распараллеливания, но требует использования большого дополнительного объема памяти и обладает меньшей (по сравнению с алгоритмом Гаусса – Зейделя) скоростью сходимости.
Иной возможный подход для устранения взаимозависимости параллельных потоков состоит в применении схемы чередования обработки четных и нечетных строк (red/black row alternation scheme), когда выполнение итерации метода сеток подразделяется на два последовательных этапа, на первом из которых обрабатываются строки только с четными номерами, а затем на втором этапе — строки с нечетными номерами (рис. 5). Данная схема может быть обобщена на применение одновременно и к строкам, и к столбцам (шахматное разбиение) области расчетов.
Рис. 5 Схема чередования обработки четных и нечетных строк
Рассмотренная схема чередования строк не требует, по сравнению с методом Якоби, какой-либо дополнительной памяти и обеспечивает однозначность решения при многократных запусках программы. Но следует заметить, что оба рассмотренных подхода могут получать результаты, которые не совпадут с решением задачи Дирихле, найденным при помощи последовательного алгоритма. Кроме того, эти вычислительные схемы имеют меньшую область и худшую скорость сходимости, чем исходный вариант метода Гаусса – Зейделя.