
- •Московский государственный университет имени м.В. Ломоносова
- •1.2 Филаментация фемтосекундных импульсов в атмосфере
- •1.3 Филаментация частотно-модулированных импульсов
- •2.2 Численные методы решения задачи
- •3.2 Алгоритм распараллеливания задачи
- •3.3 Проверка эффективности работы алгоритма
- •3.4 Влияние значения порога ионизации на многофиламентацию импульса в турбулентной атмосфере
- •4.2 Методика расчета распространения частотно-модулированного импульса в турбулентной атмосфере на километровых трассах. Режим префиламентации.
- •4.3 Статистические характеристики «горячих точек» на километровых трассах
- •4.4 Характеристики множества филаментов в стационарном приближении
3.2 Алгоритм распараллеливания задачи
Чтобы с наибольшей эффективностью реализовать возможности вычислительных кластеров, необходимо использовать алгоритмы параллельного решения задачи. При этом слабым местом всех кластеров является межузловой обмен. Таким образом, для эффективности использования вычислительных мощностей алгоритм распараллеливания должен обеспечивать оптимальную работу всех задействованных узлов при относительно небольшом (редком) межузловом обмене данными, т.е. алгоритм должен обладать свойством «крупнозернистости» [31].
На рис. 3.1 приведена расчетная сетка в координатах z, t. Каждая точка на рисунке в действительности представляет собой множество расчетных узлов в поперечном сечении x, y. В плоскости z = 0 задаются начальные условия для поля E. Плазма в среде до прохождения импульса отсутствует Ne(-∞) = 0. Используемая при численном решении явная схема и метод пошаговой линеаризации предполагают последовательное прохождение всех точек расчетной сетки слева направо по z и сверху вниз по t. При этом возможен обход точек, как по строчкам, так и по столбцам.
Один из возможных алгоритмов распараллеливания этой задачи показан на рис. 3.1а. Здесь каждый узел кластера схематично представлен стрелкой (всего K = 3 узла). В местах разрыва стрелок (в плоскостях обмена Zi, i = 1, K-1) происходит обмен данными с другими узлами кластера. Каждому узлу назначается «зона ответственности» ‑ набор всех плоскостей zi между двумя соседними плоскостями обмена Zi и Zi+1, в которых он осуществляет расчёт задачи. Первому узлу назначается зона от z0 до первой плоскости обмена Z1. Он стартует с нулевого слоя по времени t и выполняет расчет распространения этого слоя импульса вдоль координаты z, сохраняя в ОЗУ полученные значения концентрации плазмы. При достижении плоскости обмена Z1 первый узел передаёт значения комплексного поля E второму узлу, который использует эти данные в качестве начальных условий для продолжения расчета распространения этого же слоя импульса в своей пространственной «зоне ответственности» до следующей плоскости обмена Z2. При этом первый узел продолжает решение задачи на следующем слое по времени, используя накопленные данные о плазме с предыдущего временного слоя.
Аналогично при достижении вторым узлом кластера плоскости обмена Z2 происходит передача значений поля E третьему узлу, при этом первые два узла продолжают расчет задачи в следующих слоях по времени, и т.д. После первой передачи данных последнему узлу в плоскости обмена ZK-1 все узлы кластера оказываются задействованными в параллельном решении задачи, которое выполняется своеобразным клином (рис. 3.1). При этом требуемая задаче оперативная память равномерно распределяется по узлам кластера. Так как число узлов в кластере K, как правило, существенно меньше числа шагов Nz, то задача, с точки зрения распараллеливания, оказывается «крупнозернистой» и время обмена данными не должно оказывать существенного влияния на производительность вычислений.
Таким же образом происходит выполнение второго алгоритма распараллеливания, представленного на рис. 3.1б, за исключением того, что алгоритм предполагает обратный порядок в решении задачи по пространственной (z) и временной (t) координатам.
Заметим, что данный алгоритм распараллеливания может быть легко адаптирован для неоднородных кластеров, часть узлов которых обладает меньшей производительностью. Этим узлам следует назначать пропорционально уменьшенную «зону ответственности», сохраняя тем самым одинаковым процессорное время, затрачиваемое на решение задачи каждым узлом. Таким образом, более производительные узлы не будут простаивать, ожидая данных от менее производительных узлов кластера.