Параллельные и распределенные вычисления

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

Рубрика Программирование, компьютеры и кибернетика
Вид лабораторная работа
Язык русский
Дата добавления 24.08.2014
Размер файла 16,0 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Министерство образования и науки Украины Севастопольский Национальный технический Университет

Кафедра кибернетики и вычислительной техники

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

по дисциплине “Параллельные и распределенные вычисления”

Выполнил:

ст. группы М-34д

Ярославцев Д.А.

Севастополь - 2010

1. Постановка задачи

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

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

Проанализировать полученные результаты.

2. Текст программы с комментариями

class ThreadTest10 implements Runnable {

final static int iterations=90;

final static int sleepTime=1;

boolean yield=false;

static long n1;

static long fibsubLast1=0;

static long fibLast1=1;

ThreadTest10() {

fibsubLast1=0; fibLast1=1; n1=0; //обнуление вспомогательных переменных

Thread t1 = new Thread(this, "Thread 1");

t1.setPriority(priority1);

System.out.println("Thread created: " + t1);

t1.start();

Thread t2 = new Thread(this, "Thread 2");

t2.setPriority(priority2);

System.out.println("Thread created: " + t2);

System.out.println("Thread 2 1"); // первое число Фиббоначчи t2.start();

try {t1.join(); t2.join(); } // ожидание окончания работы потоков catch (InterruptedException e) {System.out.println("interrupted");}

System.out.println("exiting main thread"); } public void run() {

Thread t = Thread.currentThread();

if(t.getName().equals("Thread 1")){

for (int i=1; i<=iterations; i++) { n1+=i;

System.out.println(t.getName()+" " + ((double)n1/(double)i)); // среднее арифметическое

try{ t.sleep(sleepTime); } catch(Exception e){}if(yield)t.yield();

}

} else {

for(int i=0;i<iterations;i++){

System.out.println(t.getName()+" " + fib(fibLast1,fibsubLast1)); // Фиббоначчи

try{ t.sleep(sleepTime); } catch(Exception e){}

if(yield)t.yield();

}

System.out.println("exiting "+t.getName());

}

}

public static int fibonacci(int n) { return (n<=2?1:fibonacci(n-1)+fibonacci(n-2)); }

public static long fib(long fibsubLast,long fibLast) {

long sum=fibsubLast+fibLast;

fibsubLast1=fibLast1;

fibLast=sum;

fibsubLast1=fibsubLast;

fibLast1=fibLast;

return sum;

}

public static void main() { new ThreadTest10(); }

}

3. Протоколы испытаний

При каждом испытании будет получен пример исполнения программы для 90 циклов работы каждого из двух потоков. Для наглядности в отчете представлены наиболее характерные участки выводимого результата. Испытания будем проводить по трем основным направлениям:

1. Исследуем поведение программы при различных значениях приоритетов подпроцессов.

2. Исследуем влияние временных задержек.

3. Исследуем влияние средств явной передачи управления.

Каждое испытание будем проводить независимо, т.е. не будет проводиться испытаний с изменением как задержек, так и приоритетов исполнения.

Опыты проводим на 2-хядерном процессоре Intel E6550 2.13 Ghz, под управлением ОС Windows.

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

Результат (приведен в полном виде):

Thread created: Thread[Thread 1,5,main]

Thread created: Thread[Thread 2,5,main]

Thread 1 1.0

Thread 1 1.5

Thread 1 2.0

Thread 1 2.5

Thread 1 3.0

Thread 1 3.5

Thread 1 4.0

Thread 1 4.5

Thread 1 5.0

Thread 1 5.5

Thread 1 6.0

Thread 1 6.5

Thread 1 7.0

Thread 1 7.5

Thread 1 8.0

Thread 1 8.5

Thread 1 9.0

Thread 1 9.5

Thread 1 10.0

Thread 1 10.5

Thread 1 11.0

Thread 1 11.5

Thread 1 12.0

Thread 1 12.5

Thread 1 13.0

Thread 1 13.5

Thread 1 14.0

Thread 1 14.5

Thread 1 15.0

Thread 1 15.5

Thread 1 16.0

Thread 1 16.5

Thread 1 17.0

Thread 1 17.5

Thread 1 18.0

Thread 1 18.5

Thread 1 19.0

Thread 1 19.5

Thread 1 20.0

Thread 1 20.5

Thread 1 21.0

Thread 1 21.5

Thread 1 22.0

Thread 1 22.5

Thread 1 23.0

Thread 1 23.5

Thread 1 24.0

Thread 1 24.5

Thread 1 25.0

Thread 1 25.5

Thread 1 26.0

Thread 1 26.5

Thread 1 27.0

Thread 1 27.5

Thread 1 28.0

Thread 1 28.5

Thread 1 29.0

Thread 1 29.5

Thread 1 30.0

Thread 1 30.5

Thread 1 31.0

Thread 1 31.5

Thread 1 32.0

Thread 1 32.5

Thread 2 1

Thread 2 1

Thread 1 33.0

Thread 2 2

Thread 1 33.5

Thread 2 3

Thread 1 34.0

Thread 2 5

Thread 1 34.5

Thread 2 8

Thread 1 35.0

Thread 2 13

Thread 1 35.5

Thread 2 21

Thread 1 36.0

Thread 2 34

Thread 1 36.5

Thread 2 55

Thread 1 37.0

Thread 2 89

Thread 1 37.5

Thread 2 144

Thread 1 38.0

Thread 2 233

Thread 1 38.5

Thread 2 377

Thread 1 39.0

Thread 2 610

Thread 1 39.5

Thread 2 987

Thread 1 40.0

Thread 2 1597

Thread 1 40.5

Thread 2 2584

Thread 1 41.0

Thread 2 4181

Thread 1 41.5

Thread 2 6765

Thread 1 42.0

Thread 2 10946

Thread 1 42.5

Thread 2 17711

Thread 1 43.0

Thread 2 28657

Thread 1 43.5

Thread 2 46368

Thread 1 44.0

Thread 2 75025

Thread 1 44.5

Thread 2 121393

Thread 1 45.0

Thread 2 196418

Thread 1 45.5

Thread 2 317811

Thread 2 514229

Thread 2 832040

Thread 2 1346269

Thread 2 2178309

Thread 2 3524578

Thread 2 5702887

Thread 2 9227465

Thread 2 14930352

Thread 2 24157817

Thread 2 39088169

Thread 2 63245986

Thread 2 102334155

Thread 2 165580141

Thread 2 267914296

Thread 2 433494437

Thread 2 701408733

Thread 2 1134903170

Thread 2 1836311903

Thread 2 2971215073

Thread 2 4807526976

Thread 2 7778742049

Thread 2 12586269025

Thread 2 20365011074

Thread 2 32951280099

Thread 2 53316291173

Thread 2 86267571272

Thread 2 139583862445

Thread 2 225851433717

Thread 2 365435296162

Thread 2 591286729879

Thread 2 956722026041

Thread 2 1548008755920

Thread 2 2504730781961

Thread 2 4052739537881

Thread 2 6557470319842

Thread 2 10610209857723

Thread 2 17167680177565

Thread 2 27777890035288

Thread 2 44945570212853

Thread 2 72723460248141

Thread 2 117669030460994

Thread 2 190392490709135

Thread 2 308061521170129

Thread 2 498454011879264

Thread 2 806515533049393

Thread 2 1304969544928657

Thread 2 2111485077978050

Thread 2 3416454622906707

Thread 2 5527939700884757

Thread 2 8944394323791464

Thread 2 14472334024676221

Thread 2 23416728348467685

Thread 2 37889062373143906

Thread 2 61305790721611591

Thread 2 99194853094755497

Thread 2 160500643816367088

Thread 2 259695496911122585

Thread 2 420196140727489673

Thread 2 679891637638612258

Thread 2 1100087778366101931

Thread 2 1779979416004714189

Thread 2 2880067194370816120

Thread 2 4660046610375530309

exiting Thread 2

exiting main thread

1. Исследуем поведение программы при различных значениях приоритетов подпроцессов, повысив приоритет потока 2 на 3 единицы.

Thread created: Thread[Thread 1,5,main]

Thread created: Thread[Thread 2,7,main]

Thread 2 1

Thread 2 1

Thread 2 2

Thread 2 3

Thread 2 5

Thread 2 8

Thread 2 13

Thread 2 21

Thread 2 34

Thread 2 55

Thread 2 89

Thread 2 144

Thread 2 233

Thread 2 377

Thread 2 610

Thread 2 987

Thread 2 1597

Thread 2 2584

Thread 2 4181

Thread 2 6765

Thread 2 10946

Thread 2 17711

Thread 2 28657

Thread 2 46368

Thread 2 75025

Thread 2 121393

Thread 2 196418

Thread 2 317811

Thread 2 514229

Thread 2 832040

Thread 2 1346269

Thread 2 2178309

Thread 2 3524578

Thread 1 1.0

Thread 1 1.5

Thread 1 2.0

Thread 1 2.5

Thread 1 3.0

Thread 1 3.5

Thread 1 4.0

Thread 1 4.5

Thread 1 5.0

Thread 1 5.5

Thread 1 6.0

Thread 1 6.5

Thread 1 7.0

Thread 1 7.5

Thread 1 8.0

Thread 1 8.5

Thread 1 9.0

Thread 1 9.5

Thread 1 10.0

Thread 1 10.5

Thread 1 11.0

Thread 1 11.5

Thread 1 12.0

Thread 1 12.5

Thread 1 13.0

Thread 1 13.5

Thread 1 14.0

Thread 1 14.5

Thread 1 15.0

Thread 1 15.5

Thread 1 16.0

Thread 1 16.5

Thread 1 17.0

Thread 1 17.5

Thread 1 18.0

Thread 1 18.5

Thread 2 5702887

Thread 1 19.0

Thread 2 9227465

Thread 1 19.5

Thread 2 14930352

Thread 1 20.0

Thread 2 24157817

Thread 1 20.5

Thread 2 39088169

Thread 1 21.0

Thread 2 63245986

Thread 1 21.5

Thread 2 102334155

Thread 1 22.0

Thread 2 165580141

Thread 1 22.5

Thread 2 267914296

Thread 1 23.0

Thread 2 433494437

Thread 1 23.5

Thread 2 701408733

Thread 1 24.0

Thread 2 1134903170

Thread 1 24.5

Thread 2 1836311903

Thread 1 25.0

Thread 2 2971215073

Thread 1 25.5

Thread 2 4807526976

Thread 1 26.0

Thread 2 7778742049

Thread 1 26.5

Thread 2 12586269025

Thread 1 27.0

Thread 2 20365011074

Thread 1 27.5

Thread 2 32951280099

Thread 1 28.0

Thread 2 53316291173

Thread 1 28.5

Thread 2 86267571272

Thread 1 29.0

Thread 2 139583862445

Thread 1 29.5

Thread 2 225851433717

Thread 1 30.0

Thread 2 365435296162

Thread 1 30.5

Thread 2 591286729879

Thread 1 31.0

Thread 2 956722026041

Thread 1 31.5

Thread 2 1548008755920

Thread 1 32.0

Thread 2 2504730781961

Thread 1 32.5

Thread 2 4052739537881

Thread 2 6557470319842

Thread 2 10610209857723

Thread 2 17167680177565

Thread 2 27777890035288

Thread 2 44945570212853

Thread 2 72723460248141

Thread 2 117669030460994

Thread 2 190392490709135

Thread 2 308061521170129

Thread 2 498454011879264

Thread 2 806515533049393

Thread 2 1304969544928657

Thread 2 2111485077978050

Thread 2 3416454622906707

Thread 2 5527939700884757

Thread 2 8944394323791464

Thread 2 14472334024676221

Thread 2 23416728348467685

Thread 2 37889062373143906

Thread 2 61305790721611591

Thread 2 99194853094755497

Thread 2 160500643816367088

Thread 2 259695496911122585

Thread 2 420196140727489673

Thread 2 679891637638612258

Thread 2 1100087778366101931

Thread 2 1779979416004714189

Thread 2 2880067194370816120

Thread 2 4660046610375530309

exiting Thread 2

Thread 1 33.0

Thread 1 33.5

Thread 1 34.0

Thread 1 34.5

Thread 1 35.0

Thread 1 35.5

Thread 1 36.0

Thread 1 36.5

Thread 1 37.0

Thread 1 37.5

Thread 1 38.0

Thread 1 38.5

Thread 1 39.0

Thread 1 39.5

Thread 1 40.0

Thread 1 40.5

Thread 1 41.0

Thread 1 41.5

Thread 1 42.0

Thread 1 42.5

Thread 1 43.0

Thread 1 43.5

Thread 1 44.0

Thread 1 44.5

Thread 1 45.0

Thread 1 45.5

exiting main thread

2. Исследуем влияние временных задержек, для чего заставим кажды поток ожидать 5 мс перед следующей итерацией (метод «sleep()»).

Результат:

Thread 2 267914296

Thread 1 20.5

Thread 2 433494437

Thread 1 21.0

Thread 2 701408733

Thread 1 21.5

Thread 2 1134903170

Thread 1 22.0

Thread 2 1836311903

Thread 1 22.5

Thread 2 2971215073

Thread 1 23.0

Thread 2 4807526976

Thread 1 23.5

Thread 2 7778742049

Thread 1 24.0

Thread 2 12586269025

Thread 1 24.5

Thread 2 20365011074

Thread 1 25.0

Thread 2 32951280099

Thread 1 25.5

Thread 2 53316291173

Thread 1 26.0

Thread 2 86267571272

Thread 1 26.5

Thread 2 139583862445

Thread 1 27.0

Thread 2 225851433717

Thread 1 27.5

Thread 2 365435296162

Thread 1 28.0

Очевидно, что даже при столь небольшой временной задержке ОС позволяет процессору переключиться, таким образом, потоки выполняют задачу с большей степенью параллельности.

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

Результат:

Thread 1 32.0

Thread 1 32.5

Thread 1 33.0

Thread 1 33.5

Thread 1 34.0

Thread 1 34.5

Thread 2 1

Thread 1 35.0

Thread 2 2

Thread 1 35.5

Thread 2 3

Thread 1 36.0

Thread 2 5

Thread 1 36.5

Thread 2 8

Thread 1 37.0

Thread 2 13

Thread 1 37.5

Thread 2 21

Thread 1 38.0

Thread 2 34

Thread 1 38.5

Thread 2 55

Thread 1 39.0

Thread 2 89

Thread 1 39.5

Thread 2 144

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

Выводы

В ходе выполнения лабораторной работы была разработана программа, создающая два независимых параллельных подпроцесса. выполняющих простые арифметические задачи. Поведение программы при различных значениях приоритетов подпроцессов и временных задержках было исследовано на простых тестовых примерах, результаты тестирования следующие: при появлении задержек исполнения либо при явной передаче управления возрастает степень параллельности исполнения процессов. При изменении приоритета исполнения, на крупных примерах заметно «доминирование» исполняемого потока с большим приоритетом.

Размещено на Allbest.ru

...

Подобные документы

  • Разработка различных программ для вычисления X и Y по формуле, для вычисления интеграла, для вычисления таблицы значений функции и для вычисления элементов вектора. Составление блок-схемы программы. Ввод значений, описание переменных и условия расчета.

    контрольная работа [148,1 K], добавлен 08.11.2013

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

    курсовая работа [568,3 K], добавлен 07.03.2015

  • Разработка программы для нахождения минимального и максимального элемента массива, вычисления среднего арифметического строк и столбцов транспортирования матриц. Характеристика основных программных средств. Описание программы, руководство пользователя.

    курсовая работа [2,4 M], добавлен 26.04.2015

  • Формирование устойчивой последовательности псевдослучайных чисел с использованием метода "середины квадрата". Разработка программы для определения среднего значения чисел, среднего значения квадратов чисел и дисперсии для последовательности из 20 чисел.

    лабораторная работа [1,4 M], добавлен 21.01.2015

  • Характеристика основных способов вычисления определителя матрицы с помощью языка программирования СИ. Выбор инструментальных и аппаратных средств, его обоснование. Общая структура и принцип действия программного модуля, описание блок-схем алгоритмов.

    курсовая работа [262,4 K], добавлен 08.06.2010

  • Разработка и анализ алгоритмов с использованием электронных таблиц и прикладных программ Smath Studio, Microsoft Excel. Проверка алгоритма ветвления или выбора. Реализация циклов на примере вычисления определённого интеграла с заданной точностью.

    контрольная работа [1,0 M], добавлен 19.03.2016

  • Исходный текст программы и ее экранная форма. Программа вычисления и выдачи на печать суммы/произведения элементов бесконечного числового ряда, вычисления числового ряда для известного числа членов ряда. Значение максимального элемента в матрице.

    контрольная работа [29,0 K], добавлен 07.12.2010

  • Проектирование микро-ЭВМ. Программа вычисления матрицы. Кодирование программ и регистров, формат команды. Микропрограммное устройство управления. Граф-схемы выполнения операций. Прошивка ПЗУ микрокоманд, точек входа. Разработка принципиальной схемы.

    курсовая работа [1,1 M], добавлен 01.03.2013

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

    курсовая работа [537,9 K], добавлен 25.01.2010

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

    курсовая работа [1,6 M], добавлен 20.06.2012

  • Методы арифметического кодирования. Основные функции программ, реализующие алгоритмы кодирования по методам Хаффмана, Голомба, Фибоначчи и Элиаса. Разработка программно-аппаратных средств оптимального арифметического кодирования и их экономический расчет.

    дипломная работа [1,1 M], добавлен 26.05.2012

  • Факторизация натурального числа. Метод квадратичного решета. Факторизация с помощью эллиптических кривых. Реализация алгоритмов натуральных чисел и оценка их эффективности. Применение алгоритмов факторизации натуральных чисел в программной среде Maple.

    курсовая работа [851,6 K], добавлен 25.06.2013

  • Методы и алгоритмы вычисления определенных интегралов: метод трапеций и метод Симпсона (метод парабол). Оформление функции вычисления заданного определённого интеграла на Visual Basic 6.0. Программный код функции. Создание приложения для вычисления.

    курсовая работа [483,6 K], добавлен 25.06.2014

  • Сигнал как некоторое средство для передачи информации. Знакомство с параллельными алгоритмами двумерного быстрого преобразования Фурье, анализ способов вычисления. Общая характеристика процессора Power5 64-bit RISC. Рассмотрение функций библиотеки MPI.

    дипломная работа [1,6 M], добавлен 09.10.2013

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

    контрольная работа [831,0 K], добавлен 24.11.2013

  • Математический процессор для вычисления элементарных функций. Расчет разрядности представления данных и числа итераций. Разработка алгоритмов вычисления функции в математическом пакете. Обоснование достаточности аппаратных средств, программных ресурсов.

    курсовая работа [615,9 K], добавлен 19.12.2010

  • Создание и представление символьных переменных в программе Matlab, операции над полиномами и упрощение выражений. Пример подстановки значения в функцию, решения уравнений и систем, дифференцирования, интегрирования и вычисления пределов функций.

    презентация [359,2 K], добавлен 24.01.2014

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

    курсовая работа [1,6 M], добавлен 27.08.2012

  • Расчет специализированного вычислителя тригонометрических функций, основанное на разложении ряда Тейлора с использованием чисел Бернулли. Код программы вычисления на языке С++. Граф-схема алгоритма. Схематическое представление входов и выходов проекта.

    курсовая работа [1,8 M], добавлен 29.12.2012

  • Использование нестандартных функций и подпрограмм (процедур) для составления алгоритмов вычислений. Программы для вычисления значение корней нелинейного уравнения по методу половинного деления. Составление алгоритма операций над матрицами и интегралами.

    курсовая работа [580,0 K], добавлен 23.08.2015

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.