Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

malyshkin_ve_korneev_vd_-_parallelnoe_programmirovanie_multikompyuterov

.pdf
Скачиваний:
66
Добавлен:
28.03.2016
Размер:
3.12 Mб
Скачать

/* Пример программы на языке С (с OpenMP) решения СЛАУ методом Сопряженных градиентов. */ /* Здесь в примере исходная матрица генерируется в программе */

#include<stdio.h>

#include<omp.h>

#include<sys/time.h>

#define M 1000

#define E 0.00001

/* Задание итерационного шага */

#define T 0.001

/* Исходные данные задаются статически */

static double A[M][M], F[M], Xk[M], Zk[M]; static double Rk[M], Sz[M], alf, bet, mf; static double Spr, Spr1, Spz;

int main()

{int i, j, v, size, Np, it; struct timeval tv1, tv2; long int dt1;

mf=0; it = 0;

/* Генерация исходной матрицы коэффициентов и правых частей уравнений */

for(i = 0; i < M; i++)

{for(j = 0; j < M; j++)

{if(i == j)

A[i][j] = 2.0; else

418

A[i][j] = 1.0;

}

F[i] = M + 1; mf += F[i]*F[i];

}

/* Вычисление нормы ||f|| */

mf = sqrt(mf);

/* Задание начального приближения решений */

for(i = 0; i < M; i++) { Xk[i] = 0.2;

Sz[i]=0;

}

/* Задание начальных значений векторов невязки и сопряженного направления */

for(i = 0; i < M; i++)

{ for(j = 0; j < M; j++) Sz[i] += A[i][j] * Xk[j];

Rk[i] = F[i] - Sz[i]; Zk[i] = Rk[i];

}

/* Засечение времени */

gettimeofday(&tv1,NULL);

/* Для решения задачи запрашивается 4-е процесса */

omp_set_num_threads(4);

/* Основной цикл */

do

{

Spz = 0; Spr = 0;

Spr1 = 0;

419

/* Начало параллельного блока праграммы */

#pragma omp parallel private(size,i)

{size = omp_get_num_threads(); Np = M/size;

/* Распараллеливание цикла, вычисляющего числитель и знаменатель коэф. αk */

#pragma omp for schedule(static,Np) private(j) reduction(+:Spz,Spr)

for(i = 0; i < M; i++)

{ for(Sz[i]=0, j = 0; j < M; j++) Sz[i] += A[i][j] * Zk[j];

Spz += Sz[i] * Zk[i]; Spr += Rk[i] * Rk[i];

}

/* Вычисление коэффициента αk */

#pragma omp critical alf = Spr/Spz;

/*

Распараллеливание

цикла,

вычисляющего

вектора решений и невязки */

 

#pragma omp for schedule(static,Np) reduction(+:Spr1)

for(i = 0; i < M; i++)

{Xk[i] += alf*Zk[i]; Rk[i] -= alf*Sz[i];

Spr1 += Rk[i]*Rk[i];

}

/* Вычисление коэффициента βk */

#pragma omp critical bet = Spr1/Spr;

/* Распараллеливание цикла, вычисляющего вектор сопр. направления */

420

#pragma omp for schedule(static,Np) for(i = 0; i < M; i++)

Zk[i] = Rk[i] + bet*Zk[i];

} /* Конец параллельного блока программы

*/

it++;

}

while(sqrt(Spr1)/mf > E);

/* Проверка на

точность */

 

/* Засечение времени и вывод его значения */

gettimeofday(&tv2,NULL);

dt1 = (tv2.tv_sec - tv1.tv_sec) * 1000000 + tv2.tv_usec - tv1.tv_usec;

printf(" Time = %ld it=%d\n", dt1,it);

/* Вывод значений первых восьми корней для контроля */

printf(" %f %f %f %f %f %f %f %f\n",Xk[0],

Xk[1],Xk[2],Xk[3],Xk[4],Xk[5],Xk[6],Xk[7]);

return(0);

}

421

ОСНОВНАЯ РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА

1.А.П.Ершов. Вычислимость в произвольных областях и базисах. Семиотика и информатика, вып.19, стр.3-58, 1982.

2.А.И.Мальцев. Алгоритмы и рекурсивные функции, Наука, 1986.

3.Х.Роджерс. Теория рекурсивных функций и эффективная вычислимость. Мир, Москва, 1972. (Hartley Rogers. Jr, Theory of Recursive Functions and Effective Computability, Mc Graw - Hill, 1967).

4.В.А.Успенский, А.Л.Семенов. Теория алгоритмов: основные открытия и приложения, Наука, 1987, 288 стр.

5.В.А.Вальковский, В.Э.Малышкин. Синтез параллельных программ и систем на вычислительных моделях. - Наука,

Сибирское отделение, 1988, 128 стр.

6.В.Котов. Сети Петри. Наука, 1990.

7.С.М.Ачасова, О.Л.Бандман. Корректность параллельных вычислительных процессов. Наука, 1990.

8.Дж. Питерсон. Теория сетей Петри и моделирование систем.

Мир, 1984 (J.Peterson. Petri Net Theory and the Modeling of Systems. Prentice-Hall, inc. 1981).

9.Ч.Хоар. Взаимодействующие последовательные процессы,

Мир, 1989, 264 стр.

10.В.Анисимов.

Программирование

распределенных

 

вычислительных систем. Под редакцией В.Е.Котова.

 

Системная информатика, выпуск 3, Наука, 1993, стр. 210-247.

 

11.

В.Н.Сачков.

Комбинаторные

методы

дискретной

 

математики,

Наука, 1977, 317 стр.

 

 

 

12.

Х.Пападимитриу, К.Стайглиц. Комбинаторная оптимизация.

 

Алгоритмы и сложность. Москва, Мир, 1985

 

 

13.

М.Гэри,

Д.Джонсон.

Вычислительные

машины

и

 

труднорешаемые задачи. –

М., Мир, 1982, - 416 с.

 

14.

Ю.А.Березин, В.А.Вшивков. Метод частиц в разреженной

 

плазме. Наука, Новосибирск. 1980.

 

 

 

15.Корнеев В.В, Киселев А. Современные микропроцессоры, 3-е

издание. Санк-Петербург, БХВ-Петербург. 2003.- 440 c.

422

16.Таненбаум Э. Архитектура компьютеров. СПб.:Питер, 2002. -704с.

17.Корнеев В.В. Параллельные вычислительные системы. М.:

Москва, 1999.- 312 c.

18.Цилькер Б. Я., Орлов С.А. Организация ЭВМ и сетей. СПб.:

Питер, 2004. 668 с.

19.Пятьсот самых мощных компьютеров мира

[http://www.top500.org].

20.В.Д.Корнеев. Параллельное программирование в MPI. – Новосибирск, ИВМ и МГ СО РАН, 2002г., 215 стр..

21.www.openmp.org

22.В.В.Воеводин, Вл.В. Воеводин. Параллельные вычисления. БХВ – Петербург2002. – 609 с.

23.Г.Р.Эндрюс. Основы многопоточного параллельного и распределенного программирования. – М.: Изд. Дом Вильямс, 2003. – 330 с.

423

СЛОВАРЬ ТЕРМИНОВ

алфавит - конечное множество символов

A=(a,b,...,c).

алгоритмически вычислимые функции -

функции, вычисляемые некоторым алгоритмом.

асинхронная программа (А-программа) - это конечное множество А-блоков {Ak |k {1,2,...,т}}

определенных над информационной и управляющей памятями.

ассоциативность кэш-памяти – количество блоков оперативной памяти, записанные в одной строке кэш-памяти

буксование кэш-памяти – это явление, вызванное последовательными обращениями к нескольким элементам, отстоящим в памяти на величину,

кратную размеру кэш-памяти.

буфер адресов перехода представляет собой кэш-

память, которая хранит исполнительные адреса

424

нескольких последних команд перехода, для которых переход имел место.

буфер быстрого преобразования адресов

представляет собой кэш-память, которая хранит физические адреса команд и данных, к которым обращались в последнее время.

взаимное исключение - допуск к ресурсу только одного процесса из множества процессов,

претендующих на него.

виртуальный компьютер – программно реализуемый компьютер.

виртуальные топологии –

программно

реализуемая топология связей между

компьютерами.

время доступа к памяти это время между двумя последовательными операциями чтения/записи,

которые выполняются по случайным адресам.

детерминированность алгоритма - система величин, полученная в какой-то (не начальный)

425

момент времени, однозначно определённая системой величин, полученных в предшествующие моменты времени.

Правильная программа, исполняясь несколько раз с одними и теми же входными данными,

должна всегда выработать один и тот же результат.

динамические сети – это сети, в которых любой вход может быть соединен с любым другим входом или входами.

дискретность алгоритма - процесс последовательного построения величин, идущий в дискретном времени таким образом, что в начальный момент задается исходная конечная система величин, а в каждый следующий момент новая конечная система величин

получается по определенному закону

(программе) из системы величин, имеющихся в

предыдущий момент времени.

426

длина слова - количество символов в слове.

дозахват ресурса - запрос дополнительной

порции того же или другого ресурса без

освобождения уже захваченных ресурсов.

значение - элемент из области интерпретации,

сопоставленный символу.

иерархическая

память – это

память,

представленная

в виде

нескольких

уровней

памяти, которые характеризуются разным временем доступа, объемом и стоимостью.

интерпретация - отображение, сопоставляющее значения (элементы из области интерпретации)

предметным и функциональным символам формальной системы.

интерливинг (чередование) адресов - разделение адресного пространства памяти на банки таким образом, чтобы последовательные адреса находились в разных банках.

427

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]