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

[ООП] / Лекции / Zao_2009_Paral_4

.doc
Скачиваний:
17
Добавлен:
07.02.2016
Размер:
39.94 Кб
Скачать

2

Лабораторная работа №4

Цель: продолжить изучение способов распараллеливания вычислений, в частности распределения данных и вычислений между процессами.

1. Теоретические и справочные сведения

Для тестирования параллельных систем часто применяют задачу приближенного вычисления числа  (пи) с помощью известной формулы:

. (1)

Этот интеграл можно вычислить, например, с помощью метода трапеций:

, (2)

где ;

;

‑ количество подынтервалов.

Подынтегральное выражение в приведенных формулах может вычисляться в каждой i-й точке дискретизации независимо, поэтому задача хорошо распараллеливается.

2. Разработка последовательных алгоритмов и программ

2.1 Разработайте последовательные алгоритм и программу вычисления числа . Программа должна определять ошибку вычисления для заданного количества подынтервалов n. В качестве эталонного значения числа  примите 3.141592653589793238462643.

Исследуйте точность и быстродействие программы вычисления  для значений числа интервалов 103, 104, 105. Результаты занесите в таблицу 1.

Таблица 1. Выполнение последовательной программы вычисления числа 

Число подынтервалов n

Ошибка (до трех значащих цифр)

2.2 Пользуясь освоенной техникой интегрирования, разработайте последовательные алгоритм и программу вычисления интеграла в соответствие с приведенными ниже вариантами. В программе реализуйте ввод числа интервалов с клавиатуры. Исследуйте точность и быстродействие программы для значений числа интервалов 103, 104, 105. Результаты занесите в таблицу, аналогичную табл.1.

Первый вариант. Разработать программу вычисления интеграла

. (3)

Второй вариант. Разработать программу вычисления интеграла

. (4)

3. Разработка параллельных программ

Разработайте параллельную программу вычисления числа , имитируя параллельные процессы с помощью потоков в среде Borland C++ Builder. Программу реализуйте в виде консольного приложения как в предыдущих заданиях. Программу можно организовать таким образом.

Определить в заголовочном файле с помощью препроцессорной директивы #define число потоков p, объявить внешними две переменные: для значения интервала h, количества интервалов n, поместить прототип функции, вычисляющей функцию f(x) (элемент ряда). Включить этот файл с помощью директивы #include во все модули проекта.

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

for(i=np+1;i<n;i+=p)

{

x=h*i;

mysum+=f(x);

}

где np – номер данного потока, mysum – частичная сумма ряда. Переменные np и mysum целесообразно сделать приватными членами класса потока.

Таким образом, в каждом потоке вычислится сумма элементов ряда, номера которых отстоят друг от друга на целое число, кратное номеру потока.

Значения интервала и числа интервалов лучше определить и вычислить в родительском потоке. Значения np можно передать в каждый поток через параметр конструктора, для чего его заголовок следует модифицировать.

После окончания работы дочерних потоков в родительском потоке следует сложить частичные суммы и полусумму функции в нулевой f(0) и в конечной точке интервала f(1). Полученную сумму умножить на значение интервала согласно формуле (2).

4. Варианты заданий

Первый вариант. Разработать параллельную программу вычисления интеграла (3).

Второй вариант. Разработать параллельную программу вычисления интеграла (4).

В отчете привести тексты функций main() и Execute() и заголовочного файла с определением класса потока программ вычисления числа для  и вычисления мнтеграла согласно варианту.

Контрольные вопросы

  1. Какой класс параллельной системы по классификации Флинна моделируется в данной работе: SIMD или MIMD?

  2. Как организовать вычисление числа  на векторной машине?

  3. Чему может быть равна предельная эффективность параллельных программ?

  4. Что такое VLIW-процессор?

  5. Чем отличаются параллельные системы типа SMP и MPP?

  6. Чем отличаются алгоритмы логарифмического сдваивания и рекурсивного удвоения?

Соседние файлы в папке Лекции