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

Вавренюк Основы программирования МРР-АРХИТЕКТУР 2010

.pdf
Скачиваний:
29
Добавлен:
16.08.2013
Размер:
1.59 Mб
Скачать

 

 

Зависимость ускорения от числа процессоров

 

 

4

 

 

 

 

3,5

 

 

 

 

3

 

 

 

Ускорение

2,5

 

 

5000

 

 

 

2

 

 

10000

1,5

 

 

15000

 

1

 

 

 

 

0,5

 

 

 

 

0

 

 

 

 

1

2

3

4

 

 

Число процессоров

 

 

 

Рис. 3.7. Пример графика зависимости ускорения от числа процессоров

 

 

 

 

 

 

 

 

 

 

 

 

 

 

вектора

 

 

 

 

 

 

 

 

 

 

 

 

 

от длины

Зависимость времени макрооперации

 

 

 

 

 

 

 

 

 

 

4

 

Пример графика зависимости времени выполнения векторной макрооперации

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

 

 

 

 

0

длина вектора, тысячи

 

 

 

 

 

 

 

 

 

 

1

от длины вектора

 

 

 

 

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

 

 

-

80

70

60

50

40

30

20

10

0

4

-

длтиельнсот,ьткии

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 3.8.

4.Следует учитывать тот факт, что при таймировании время выполнения таймируемого участка программы измеряется в тиках, причем один тик равен 1 мс. Если значение таймирования получается равным нескольким десяткам или даже сотням тиков, то погрешности такого измерения значительны. Как уменьшить погрешность таких измерений? Самый простой способ – «зациклить» измеряемый участок, т.е. повторить вычисления несколько десятков или даже сотен раз, а затем поделить полученный результат на число циклов. Однако делать такое «зацикливание» надо корректно, при этом следует помнить, что любое задание снимается сервером по таймауту, равному 30 с.

На рис. 3.6 и 3.7 приведены примеры оформления результатов таймирования, проведенного в соответствии с некоторой методикой таймирования параллельной программы. Набор и количество графиков, которые необходимо построить в каждой конкретной работе определяются конкретной задачей, методикой таймирования, разработанной студентом, а также преподавателем.

5.В прил. 1 приведен пример программы, демонстрирующей технологиинаписанияпрограммысобращениемкбиблиотекеVeclib.

3.2.5.Задание по лабораторной работе 2

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

2.Сделать оценку коэффициента ускорения на основе закона Амдала.

3.Отладить написанную программу на Root-процессоре. Произвести таймирование однопроцессорной программы.

4.Проанализировать выданную задачу и выбрать рациональную конфигурацию (одну из четырех) соединений процессоров.

5.Разработать алгоритм параллельного выполнения для полученной задачи. Алгоритм должен обеспечивать рациональную (равномерную) загрузку процессоров.

6.Написать отдельные программные модули для каждого процессора.

7.Отладить параллельную программу в соответствии с инструкцией. Программа должна быть универсальной по отношению к входным данным.

63

8.Разработать и обосновать методику таймирования, положив в основу способ 1 или 2 (см. разд. 3.2.1) по согласованию с преподавателем.

9.Провести таймирование разработанной параллельной программы в соответствии с методикой п. 7. Построить соответствующий график. Для построения графиков использовать электронную таблицу типа Gnumeric в ОС Linux или Exel в ОС Windows.

10.Продемонстрировать и сдать преподавателю разработанные программы, методику таймирования и полученные в соответствии

сней результаты.

3.2.6. Варианты заданий к лабораторной работе 2

Вариант 1

Написать параллельную программу для вычисления вектора как взвешенного среднего двух векторов:

Xi = (Yi + αXi)/(α + 1),

где Xi – входной и выходной одномерный массив (вектор) вещественных чисел, i = 0, 1, 2, …, n – 1; Yi – входной одномерный массив (вектор) вещественных чисел, i = 0, 1, 2, …, n – 1. Рекомендуемое значение n = 100000. Значение α является вещественной переменной и подбирается самостоятельно. α [0, +1]. Значение n может быть изменено по согласованию с преподавателем.

Вариант 2

Разработать параллельную программу для вычисления вектора как взвешенного среднего двух векторов с использованием библио-

течной функции vlinaveragesf:

Xi = (Yi + αXi)/(α + 1),

где Xi – входной и выходной одномерный массив (вектор) вещественных чисел, i = 0, 1, 2, …, n – 1; Yi – входной одномерный массив (вектор) вещественных чисел, i = 0, 1, 2, …, n – 1. Рекомендуемое значение n = 100000. Значение α является вещественной переменной и подбирается самостоятельно. α [0, +1]. Значение n может быть изменено по согласованию с преподавателем.

64

Вариант 3

Разработать параллельную программу для вычисления геометрического среднего одномерного массива данных в соответствии с выражением:

N

M=Xi ,

i=1

Xi – входной одномерный массив (вектор) вещественных чисел, i = 1, 2, …, N.

В качестве элементов массива Xi можно взять:

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

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

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

Рекомендуемое значение N = 100000. Значение N может быть изменено по согласованию с преподавателем.

Дополнительное задание: использовать библиотечную функцию для вычисления геометрического среднего vprodsf.

Вариант 4

Разработать параллельную программу для вычисления математического ожидания и дисперсии одномерного массива данных в соответствии с выражениями:

N

N

M = Xi / N ,

D = Xi / (N 1) ,

i=1

i=1

Xi – входной одномерный массив (вектор) вещественных чисел, i = 1, 2, …, N.

В качестве элементов массива Xi можно взять:

последовательность отсчетов периодической функции, например синуса, с равномерным шагом и целым числом периодов;

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

65

Рекомендуемое значение N = 100000. Значение N может быть изменено по согласованию с преподавателем.

Вариант 5

Разработать параллельную программу для вычисления определенного интеграла методом трапеций без использования библиотечных функций.

Подынтегральная функция: F(x) = x. Интервал интегрирования: [0, 3].

Вариант 6

Разработать параллельную программу для вычисления определенного интеграла методом трапеций с использованием библиотечной функции vtrapzf (см. прил. 2).

Подынтегральная функция: F(x) = x. Интервал интегрирования: [0, 3].

Вариант 7

Разработать параллельную программу для вычисления определенного интеграла методом Симпсона без использования библиотечных функций.

Подынтегральная функция: F(x) = x. Интервал интегрирования: [0, 3].

Вариант 8

Разработать параллельную программу для вычисления определенного интеграла методом Симпсона с использованием библиотечной функции vsimpsonf (см. прил. 2).

Подынтегральная функция: F(x) = x. Интервал интегрирования: [0, 3].

66

Вариант 9

Разработать параллельную программу для вычисления определенного интеграла методом трапеций без использования библиотечных функций.

Подынтегральная функция: F(x) = sin(x). Интервал интегрирования: [0, π].

Вариант 10

Разработать параллельную программу для вычисления определенного интеграла методом трапеций с использованием библиотечной функции vtrapzf (см. прил. 2).

Подынтегральная функция: F(x) = sin(x). Интервал интегрирования: [0, π].

Вариант 11

Разработать параллельную программу для вычисления определенного интеграла методом Симпсона без использования библиотечных функций.

Подынтегральная функция: F(x) = sin(x). Интервал интегрирования: [0, π].

Вариант 12

Разработать параллельную программу для вычисления определенного интеграла методом Симпсона с использованием библиотечной функции vsimpsonf (см. прил. 2).

Подынтегральная функция: F(x) = sin(x). Интервал интегрирования: [0, π].

Вариант 13

Разработать параллельную программу для вычисления определенного интеграла методом трапеций без использования библиотечных функций.

Подынтегральная функция: F(x) = tan(x). Интервал интегрирования: [0, 3π/8].

67

Вариант 14

Разработать параллельную программу для вычисления определенного интеграла методом трапеций с использованием библиотечной функции vtrapzf (см. прил. 2).

Подынтегральная функция: F(x) = tan(x). Интервал интегрирования: [0, 3π/8].

Вариант 15

Разработать параллельную программу для вычисления определенного интеграла методом Симпсона без использования библиотечных функций.

Подынтегральная функция: F(x) = tan(x). Интервал интегрирования: [0, 3π/8].

Вариант 16

Разработать параллельную программу для вычисления определенного интеграла методом Симпсона с использованием библиотечной функции vsimpsonf (см. прил. 2).

Подынтегральная функция: F(x) = tan(x). Интервал интегрирования: [0, 3π/8].

Методические рекомендации. Операция линейной дискретной фильтрации (свертки) одномерного сигнала в общем случае описывается следующим образом:

y(k) =b0 x(k) +b1x(k 1) +... +bm x(k m)

a1 y(k 1) a2 y(k 2) ... an y(k n) .

Здесь x(k) – отсчеты входного сигнала; y(k) – отсчеты выходного сигнала; ai и bj – постоянные коэффициенты. Максимальное значение из чисел m и n называется порядком фильтра.

Предыдущие выходные отсчеты могут не использоваться при расчетах, тогда все ai = 0 и фильтр называется нерекурсивным, или трансверсальным. Если предыдущие выходные отсчеты используются, фильтр называется рекурсивным.

68

Вариант 17

Разработать параллельную программу для вычисления свертки одномерного сигнала в соответствии с выражением:

Yi = (Σ(Xi-k/2+j) aj)/(n + 1),

где сумма вычисляется по индексу j; Xi – входной одномерный массив отсчетов, i = 0, 1, 2, …, n; Yi – выходной одномерный массив отсчетов, i [k/2, (n k/2)]; aj – коэффициенты свертки, j = 0, 1, 2, …, k.

Массив Xi – это массив отсчетов функции sin(x) на интервале

[0, 2π], n = 100000, k = 10.

Примечание. Значения n и k, а также способ формирования массива отсчетов могут быть изменены по согласованию с преподавателем.

Вариант 18

Разработать параллельную программу для вычисления преобразования Блэкмена – Харриса для одномерного сигнала в соответствии с выражением:

Xi = [0,35875 – 0,48829 cos(i2π/n) + 0,14128 cos(i4π/n) –

– 0,01168 cos(i6π/n)]Yi,

где i [0, n – 1], размерность массива данных; Yi – входной одномерный массив отсчетов, i = 0, 1, 2, …, n – 1; Xi – выходной одномерный массив отсчетов, i = 0, 1, 2, …, n – 1. Рекомендуемое значение n = 100000. Значение n может быть изменено по согласованию с преподавателем.

Вариант 19

Разработать параллельную программу для вычисления свертки одномерного сигнала для цифрового фильтра с бесконечной импульсной характеристикой (БИХ-фильтра) в соответствии с выражением:

y(T ) = M1a j y(T jT ) + N1bi x(T iT ) ,

j=1 i=0

69

хi – входной одномерный массив отсчетов, i = 0, 1, 2, …, n; yi – выходной одномерный массив отсчетов, i [k/2, (n k/2)]; aj – коэффициенты свертки, j = 0, 1, 2, …, k.

Причем количество задаваемых коэффициентов фильтра a j и bi одинаково и равно n = max[M , N ] (неиспользуемые коэффици-

енты полагаются равными нулю), где M и N {2, 3, 4, 5}.

В качестве массива входных отсчетов xi можно, например, взять отсчеты функции sin(x) на интервале [0, 2π]. К значению каждого отсчета следует добавить случайное значение, лежащее в интервале [–0,1; 0,1], полученное с помощью датчика случайных чисел (см. прил. 2). Таким образом, будет получена модель реального «зашумленного» входного сигнала,

n = 100000.

Примечание. Значения n и k, а также способ формирования массива отсчетов могут быть изменены по согласованию с преподавателем.

Вариант 20

Разработать параллельную программу для выполнения двумерной свертки, реализующей фильтрацию монохромного BMPизображения. В качестве входной информации берется произвольное изображение, представленное 256-градационным BMP-файлом размером 800х600 пикселов (или большим). Алгоритм свертки определяется выражением:

 

1

a b

fi, j =

∑∑hk,l fi2+k, j2+l , i =

 

 

 

 

0, m 1 , j =0, n 1 ,

 

 

ab k =1 l=1

где f – входное/выходное изображение; m x n – размер входного изображения; h – ядро свертки; a, b – размер ядра, в данном случае a = b = 3. В простейшем фильтре все коэффициенты ядра равны единице. Следует учесть, что граничные пикселы входного изображения не могут быть обработаны операцией свертки и остаются неизменными в выходном файле.

Для получения «зашумленного» изображения к значению каждого пиксела следует добавить случайное значение, лежащее в интервале [–10; +10], полученное с помощью датчика случайных чисел (см. прил. 2). При этом надо контролировать получаемые зна-

70