Разработка программы, создающей два независимых параллельных подпроцесса, выполняющих простые арифметические задачи
Изложение этапов разработки программы, которая создаёт два независимых подпроцесса. Вычисление среднего арифметического значения ряда натуральных чисел первым подпроцессом и чисел Фибоначчи – вторым. Поведение программы при разных значениях приоритетов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 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