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