Шаг 72.
5. Паралллельные алгоритмы... Организация параллельных вычислений для систем с распределенной памятью. Коллективные операции обмена информацией

    На этом шаге мы рассмотрим способ определения погрешности вычислений.

    Рассмотрим способы вычисления общей для всех процессоров погрешности вычислений. Возможный очевидный подход состоит в передаче всех локальных оценок погрешности, полученных на отдельных полосах сетки, на один какой-либо процессор, вычисления на нем максимального значения и последующей рассылки полученного значения всем процессорам системы. Однако такая схема является крайне неэффективной - количество необходимых операций передачи данных определяется числом процессоров и выполнение этих операций может происходить только в последовательном режиме. Между тем, как показывает анализ требуемых коммуникационных действий, выполнение операций сборки и рассылки данных может быть реализовано с использованием каскадной схемы обработки данных. На самом деле, получение максимального значения локальных погрешностей, вычисленных на каждом процессоре, может быть обеспечено, например, путем предварительного нахождения максимальных значений для отдельных пар процессоров (данные вычисления могут выполняться параллельно), затем может быть снова осуществлен попарный поиск максимума среди полученных результатов и т.д. Всего, как полагается по каскадной схеме, необходимо выполнить log2NP параллельных итераций для получения конечного значения (NP - количество процессоров).

    При использовании MPI-процедур Reduce (dm, dmax, op, proc) и Broadcast (dmax, proc) общая схема вычислений на каждом процессоре может быть представлена в следующем виде:

// действия, выполняемые на каждом процессоре 
do { 
  // обмен граничных строк полос с соседями 
  Sendrecv(u[M][*],N+2,NextProc,u[0][*],N+2,PrevProc); 
  Sendrecv(u[1][*],N+2,PrevProc,u[M+1][*],N+2,NextProc); 
  // <обработка полосы с оценкой погрешности dm> 
  // вычисление общей погрешности вычислений dmax 
  Reduce(dm,dmax,MAX,0); 
  Broadcast(dmax,0); 
} while ( dmax > eps ); // eps - точность решения 

(в приведенном алгоритме переменная dm представляет локальную погрешность вычислений на отдельном процессоре, параметр MAX задает операцию поиска максимального значения для операции сборки).

    На следующем шаге мы рассмотрим организацию волны вычислений.




Предыдущий шаг Содержание Следующий шаг