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

Изложение этапов разработки программы, которая создаёт два независимых подпроцесса. Вычисление среднего арифметического значения ряда натуральных чисел первым подпроцессом и чисел Фибоначчи – вторым. Поведение программы при разных значениях приоритетов.

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

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

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

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

Министерство образования и науки Украины

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

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

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

по дисциплине

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

РАЗРАБОТКА ПРОГРАММЫ, СОЗДАЮЩЕЙ ДВА НЕЗАВИСИМЫХ ПАРАЛЛЕЛЬНЫХ ПОДПРОЦЕССА, ВЫПОЛНЯЮЩИХ ПРОСТЫЕ АРИФМЕТИЧЕСКИЕ ЗАДАЧИ

Выполнил:

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

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

Севастополь

2010

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

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

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

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

фибоначчи подпроцесс арифметический приоритет

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

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(); }

}

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

При каждом испытании будет получен пример исполнения программы для 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 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


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

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

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

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

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

  • Определение функции, ее прототип. Рекурсия - частичное определение объекта через себя. Рекурсивная функция произведения 2-х целых чисел. Задача о вычислении Факториала. Вычисление чисел Фибоначчи. Рекурсивное исполнение программы о Ханойских башнях.

    презентация [1,2 M], добавлен 20.05.2012

  • Поиск взаимно простых чисел. Алгоритм Евклида для целых чисел. Описание выбранного языка программирования. Алгоритм решения задачи. Обзор средств программирования. Текст и описание программы. Руководство оператора, программа и методика испытаний.

    курсовая работа [843,5 K], добавлен 15.06.2011

  • Основные способы создания в среде Lazarus на языке программирования Pascal программ "Калькулятор" и "Лабиринт". Создание программы "Простейший калькулятор". Вычисление значения выражения, сумм ряда чисел, системы функций "Логическая развилка".

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

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

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

  • Составление программы сортировки по возрастанию массив из 20 шестнадцатеричных чисел, просматривающей все исходные числа во внешней памяти и выбирающей самое большое число. Блок-схема алгоритма работы программы. Таблица команд и число их выполнения.

    курсовая работа [23,1 K], добавлен 24.05.2015

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

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

  • Анализ технического задания. Разработка программы по вычислению функции на языке ассемблер для микропроцессора Кр580ВМ80. Алгоритмы программного умножения, деления, сложения, вычитания и сдвига влево многобайтных чисел. Расчет времени работы программы.

    курсовая работа [88,2 K], добавлен 19.09.2012

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

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

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