Технологии параллельного программирования

Содержание

Слайд 2

ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ OpenMP TBB MPI CUDA OpenCL OpenACC Chapel 13.03.2018

ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ

OpenMP
TBB
MPI
CUDA
OpenCL
OpenACC
Chapel

13.03.2018

Слайд 3

https://en.wikipedia.org/wiki/OpenMP OpenMP 13.03.2018

https://en.wikipedia.org/wiki/OpenMP

OpenMP

13.03.2018

Слайд 4

Разработку спецификации OpenMP ведут несколько крупных производителей ВТ и ПО AMD,

Разработку спецификации OpenMP ведут несколько крупных производителей ВТ и ПО
AMD, IBM,

Intel,
Cray, HP, Fujitsu,
Nvidia, NEC,
Red Hat, Texas Instruments,
Oracle Corporation
Их работа регулируется некоммерческой организацией OpenMP Architecture Review Board (ARB) 

13.03.2018

Слайд 5

OpenMP uses a portable, scalable model with a simple interface for

OpenMP uses a portable, scalable model with a simple interface for

developing parallel applications for platforms ranging from the standard desktop computer to the supercomputer.

13.03.2018

Слайд 6

13.03.2018 По умолчанию в компиляторах поддержка OpenMP выключена. Для её включения

13.03.2018

По умолчанию в компиляторах поддержка OpenMP выключена. Для её включения следует

использовать дополнительную опцию gcc, g++, gfortran: опция -fopenmp
icc, icpc, ifort: опция -openmp под linux, /Qopenmp под windows
xlc, xlc++, xlf: опция -qsmp=omp
MSVC: опция /openmp
Borland: поддержка OpenMP отсутствует
Слайд 7

13.03.2018 http://www.cyberforum.ru/blogs/18334/blog2965.html

13.03.2018

http://www.cyberforum.ru/blogs/18334/blog2965.html

Слайд 8

13.03.2018 http://www.cyberforum.ru/blogs/18334/blog2965.html

13.03.2018

http://www.cyberforum.ru/blogs/18334/blog2965.html

Слайд 9

13.03.2018 ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ OPEN MP НА С++ СМОТРИ ТУТ http://www.cyberforum.ru/blogs/18334/blog2965.html

13.03.2018

ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ OPEN MP НА С++ СМОТРИ ТУТ

http://www.cyberforum.ru/blogs/18334/blog2965.html

Слайд 10

Message Passing Interface (MPI, интерфейс передачи сообщений) — программный интерфейс (API)

Message Passing Interface (MPI, интерфейс передачи сообщений) — программный интерфейс (API) для передачи информации,

который позволяет обмениваться сообщениями между процессами, выполняющими одну задачу. Разработан Уильямом Гроуппом, Эвином Ласком и другими.
MPI является наиболее распространённым стандартом интерфейса обмена данными в параллельном программировании, существуют его реализации для большого числа компьютерных платформ. Используется при разработке программ для кластеров и суперкомпьютеров . Основным средством коммуникации между процессами в MPI является передача сообщений друг другу.
Существуют реализации MPI для языков  Фортран,  Java,  Си и Си++.

13.03.2018

Слайд 11

13.03.2018

13.03.2018

Слайд 12

В первую очередь MPI ориентирован на системы с распределенной памятью, то

В первую очередь MPI ориентирован на системы с распределенной памятью, то есть

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

13.03.2018

Слайд 13

Intel Threading Building Blocks (также известная как TBB) — кроссплатформенная библиотека

Intel Threading Building Blocks (также известная как TBB) — кроссплатформенная библиотека шаблонов С++, разработанная

компанией Intel для параллельного программирования. 
Версия 1.0 была выпущена фирмой Интел 29 августа 2006, через год после выпуска своего первого двуядерного процессора Pentium D.
Поддерживаемые операционные системы
Коммерческая версия TBB 4.0 поддерживает Microsoft Windows (XP или выше), 
Mac OS X(версия 10.5.8 или выше) и 
Linux, используя различные компиляторы (Visual C++ (версия 8.0 или выше, только на Windows),  Intel C++ compiler (версия 11.1 или выше) или GNU Compiler Collection (gcc, версия 3.4 и выше)). Кроме того, сообщество открытой версии TBB портировало её на Sun Solaris, PowerPC, Xbox 360, QNX Neutrino, и FreeBSD.

13.03.2018

Слайд 14

13.03.2018

13.03.2018

Слайд 15

The open standard for parallel programming of heterogeneous systems OpenCL ™

The open standard for parallel programming of heterogeneous systems
OpenCL ™ (Open

Computing Language) - это открытый, стандарт для кросс-платформенного параллельного программирования различных процессоров, имеющихся на персональных компьютерах, серверах, мобильных устройствах и встроенных платформах. OpenCL значительно улучшает скорость и отзывчивость широкого спектра приложений во многих рыночных категориях, включая игровые и развлекательные звания, научное и медицинское программное обеспечение, профессиональные креативные инструменты, обработку зрения и обучение и вывод нейронной сети.

13.03.2018

https://www.khronos.org/opencl/

OpenCL

Слайд 16

https://habrahabr.ru/post/261323/ OpenCL – как и с чего начать можно найти примеры тут (С++): 13.03.2018

https://habrahabr.ru/post/261323/

OpenCL – как и с чего начать можно найти примеры тут

(С++):

13.03.2018

Слайд 17

CUDA vs OpenCL 13.03.2018 CUDA это архитектура параллельных вычислений от NVIDIA,

CUDA vs OpenCL

13.03.2018

CUDA
это архитектура параллельных вычислений от NVIDIA, позволяющая существенно

увеличить вычислительную производительность благодаря использованию GPU (графических процессоров).
Поддержка архитектур
x86, x86-64, Itanium, SpursEngine (Cell), NVidia GPU, AMD GPU, VIA (S3 Graphics) GPU.
Для каждого из этих типов процессов существует свой SDK (ну кроме разве что VIA), свой язык программирования и программная модель.
Слайд 18

13.03.2018 То есть если Вы захотите чтобы ваш движок рендеринга или

13.03.2018

То есть если Вы захотите чтобы ваш движок рендеринга или программа

расчета нагрузок на крыло боинга 787 работала на простой рабочей станции, суперкомпьютере BlueGene, или компьютере оборудованном двумя ускорителями NVidia Tesla – Вам будет необходимо переписывать достаточно большую часть программы, так как каждая из платформ в силу своей архитектуры имеет набор жестких ограничений.

CUDA vs OpenCL

Слайд 19

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

13.03.2018

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

среде. Это означает, что программа, вообще говоря, должна быть способна исполняться на компьютере, в котором установлены одновременно GPU NVidia и AMD, Toshiba SpursEngine итд.

CUDA vs OpenCL

Слайд 20

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

13.03.2018

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

есть опыт в разработке подобного стандарта: Khronos Group, на чьей совести уже OpenGL и OpenML и еще много всего. OpenCL является торговой маркой Apple Inc.
В разработке (и финансировании, конечно же), кроме Apple, участвовали такие компании IT как AMD, IBM, Activision Blizzard, Intel, NVidia и тд. 

CUDA vs OpenCL

Слайд 21

13.03.2018

13.03.2018

Слайд 22

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

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

(OpenMP, TBB, MPI, CUDA, OpenCL, OpenACC, Chapel).

https://habrahabr.ru/post/147796/

13.03.2018

Слайд 23

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

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

 

13.03.2018

Слайд 24

Объявим количество шагов, на которые разобьем интеграл a – левый предел

Объявим количество шагов, на которые разобьем интеграл

a – левый предел интеграла
b

– правый предел интеграла
n – количество отрезков на которые разбиваем ось ОХ

 

13.03.2018

Слайд 25

13.03.2018

13.03.2018

Слайд 26

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

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

домножив на основание

//определение значения функции в середине шага
//Умножение значения функции в середине шага на основание
for (int i=0;i x=(i+0.5)*step;
y=(4/(1+x*x));//вычислили значение функции
pi=pi+y*step; //умножили значение функции на основание прямоугольника
}

13.03.2018

Слайд 27

Попробуем решить задачу сначала последовательным алгоритмом, а затем с использованием технологий

Попробуем решить задачу сначала последовательным алгоритмом, а затем с использованием технологий

параллельного программирования. И сравним время выполнения программ

13.03.2018

Слайд 28

Последовательное программирование package parallelprog; public class ParallelProg { static double x=0;

Последовательное программирование

package parallelprog;
public class ParallelProg {
static double x=0;
static double

a=0;//левый предел
static double b=1;//правый предел
static double y=0;//значение функции в точке Х
static double pi=0;//значение интеграла
static double n=1000000;//количество шагов
static double step=0; //ширина шага
static long start = 0; //время начала выполнения процесса
static long finish = 0; //время окончания
static double time = 0; //разница времени начала и конца

13.03.2018

Слайд 29

public static void main(String[] args) { start = System.nanoTime();//Отметим время начала

public static void main(String[] args) {
start = System.nanoTime();//Отметим время начала

step=Math.abs(a-b)/n;
System.out.println("Начинаем вычислять интеграл");
//определение значения функции в середине шага
for (int i=0;i x=(i+0.5)*step;
y=(4/(1+x*x));//вычислили значение функции
pi=pi+y*step; //умножили значение функции на основание прямоугольника
}
//Закончив вычислять интеграл, проверим прошедшее время
finish = System.nanoTime();
time=finish-start;
//Переводим в секунды
time= (double)time / 1000000000.0;
System.out.println("Закончили вычислять интеграл");
System.out.println("pi="+pi);
System.out.println("Время выполнения: "+time+ "сек");
}
}

13.03.2018

Слайд 30

Результат последовательного программирования Результат №1 Результат №2 13.03.2018

Результат последовательного программирования

Результат №1

Результат №2

13.03.2018

Слайд 31

ТЕПЕРЬ ПОПРОБУЕМ РЕШИТЬ ЗАДАЧУ С ПОМОЩЬЮ ПАРАЛЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ 13.03.2018

ТЕПЕРЬ ПОПРОБУЕМ РЕШИТЬ ЗАДАЧУ С ПОМОЩЬЮ ПАРАЛЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ

13.03.2018

Слайд 32

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

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

или несколько процессоров на одной материнской плате.

13.03.2018

Слайд 33

Одно ядро также способно исполнять параллельно несколько потоков — такой режим

Одно ядро также способно исполнять параллельно несколько потоков — такой режим

называется псевдо-параллельным или конкурентным. Ядро переключается между процессами, выделяя каждому квант времени. В принципе такой режим выполнения уже может привести к росту производительности за счет сокрытия латентности памяти.

13.03.2018

Слайд 34

Латентность (задержка) - это время, которое затрачивается на чтение из памяти

Латентность (задержка) - это время, которое затрачивается на чтение из памяти

одного слова данных (восьми байт) . Чем ниже латентность оперативной памяти, тем меньше центральный процессор будет находиться в состоянии простоя.

13.03.2018

Слайд 35

Самый «исторический» способ использовать сразу несколько ядер на процессоре — это

Самый «исторический» способ использовать сразу несколько ядер на процессоре — это

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

13.03.2018

Слайд 36

С точки зрения программиста важно то, что параллельные потоки, исполняемые на

С точки зрения программиста важно то, что параллельные потоки, исполняемые на

разных ядрах или процессорах видят одно и то же адресное пространство, т.е нет нужды явно передавать данные между потоками. Зато если вдруг разные потоки пишут\читают одну и ту же переменную — то придётся озаботиться синхронизацией. 

13.03.2018

Слайд 37

ВЕРНЕМСЯ К НАШЕЙ ЗАДАЧЕ: ВЫЧИСЛЕНИЕ ИНТЕГРАЛА 13.03.2018

ВЕРНЕМСЯ К НАШЕЙ ЗАДАЧЕ: ВЫЧИСЛЕНИЕ ИНТЕГРАЛА

13.03.2018

Слайд 38

РАЗОБЬЕМ ИНТЕГРАЛ НА ЛЕВУЮ И ПРАВУЮ ЧАСТИ. ПЕРВЫЙ ПОТОК БУДЕТ ВЫЧИСЛЯТЬ

РАЗОБЬЕМ ИНТЕГРАЛ НА ЛЕВУЮ И ПРАВУЮ ЧАСТИ. ПЕРВЫЙ ПОТОК БУДЕТ ВЫЧИСЛЯТЬ

ИНТЕГРАЛ СЛЕВА НАПРАВО, НАЧИНАЯ ОТ ТОЧКИ А, ДРУГОЙ ПОТОК БУДЕТ ВЫЧИСЛЯТЬ ИНТЕГРАЛ СПРАВА НАЛЕВО, НАЧИНАЯ ОТ ПРАВОЙ ГРАНИЦЫ.

13.03.2018

Слайд 39

ВОПРОС: Почему будет неэффективным решением разбить интервал АВ на равные доли

ВОПРОС: Почему будет неэффективным решением разбить интервал АВ на равные доли

и отдать параллельным потокам на исполнение, чтобы один поток вычислял интеграл от А до |A-B|/2, а второй от В до |A-B|/2 ????

13.03.2018

Слайд 40

ОТВЕТ: Если один из потоков посчитает свою часть раньше — то

ОТВЕТ: Если один из потоков посчитает свою часть раньше — то

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

13.03.2018

Слайд 41

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

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

встретятся лицом к лицу

13.03.2018

Слайд 42

Что касаемо программы Многопоточность в Java 13.03.2018

Что касаемо программы

Многопоточность в Java

13.03.2018

Слайд 43

Процесс — это совокупность кода и данных, разделяющих общее виртуальное адресное

Процесс — это совокупность кода и данных, разделяющих общее виртуальное адресное

пространство (VAS). Чаще всего одна программа состоит из одного процесса
Процессы изолированы друг от друга, поэтому прямой доступ к памяти чужого процесса невозможен.
Для каждого процесса ОС создает VAS, к которому процесс имеет прямой доступ. Это пространство принадлежит процессу, содержит только его данные и находится в полном его распоряжении. ОС же отвечает за то, как виртуальное пространство процесса проецируется на физическую память.

Процесс/Stream

13.03.2018

Слайд 44

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

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

некоторые преимущества, вроде независимости вкладок друг от друга

13.03.2018

Слайд 45

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

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

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

При запуске программы ОС создает процесс, загружая в его адресное пространство код и данные программы, а затем запускает главный поток созданного процесса.

13.03.2018

Слайд 46

Один поток – это одна единица исполнения кода. Каждый поток последовательно

Один поток – это одна единица исполнения кода. Каждый поток последовательно

выполняет инструкции процесса, которому он принадлежит, параллельно с другими потоками этого процесса.
Следует отдельно обговорить фразу «параллельно с другими потоками». Известно, что на одно ядро процессора, в каждый момент времени, приходится один поток. То есть одноядерный процессор может обрабатывать команды только последовательно, по одной за раз (в упрощенном случае). Однако запуск нескольких параллельных потоков возможен и в системах с одноядерными процессорами. В этом случае система будет периодически переключаться между потоками, поочередно давая выполняться то одному, то другому потоку. Такая схема называется псевдо-параллелизмом. 

Поток/Нить/ Thread

13.03.2018

Слайд 47

Псевдо-параллелизм. Система запоминает состояние (контекст) каждого потока, перед тем как переключиться

Псевдо-параллелизм.

Система запоминает состояние (контекст) каждого потока, перед тем как переключиться на

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

13.03.2018

Слайд 48

УКРЕПИМ ЗНАНИЯ: Процессы изолированы друг от друга, поэтому прямой доступ к

УКРЕПИМ ЗНАНИЯ:

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

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

13.03.2018

Слайд 49

JAVA Каждый процесс имеет хотя бы один выполняющийся поток. Тот поток,

JAVA

Каждый процесс имеет хотя бы один выполняющийся поток. Тот поток, с

которого начинается выполнение программы, называется главным. В языке Java, после создания процесса, выполнение главного потока начинается с метода main(). Затем, по мере необходимости, запускаются другие побочные потоки. В языке Java поток представляется в виде объекта-потомка класса Thread.

13.03.2018

Слайд 50

КАК СОЗДАТЬ ПОТОКИ В JAVA https://habrahabr.ru/post/164487/ 13.03.2018

КАК СОЗДАТЬ ПОТОКИ В JAVA

https://habrahabr.ru/post/164487/

13.03.2018

Слайд 51

СПОСОБ №1 СОЗДАТЬ ПОТОК В JAVA С ПОМОЩЬЮ ИНТЕРФЕЙСА RUNNABLE 13.03.2018

СПОСОБ №1 СОЗДАТЬ ПОТОК В JAVA С ПОМОЩЬЮ ИНТЕРФЕЙСА RUNNABLE

13.03.2018

Слайд 52

public class MyThread implements Runnable{ @Override public void run() { /*Код

public class MyThread implements Runnable{
@Override
public void run() {

/*Код который должен выполнить поток*/ }
}

public class GeneralProcess {
static MyThread t1, t2;
public static void main(String[] args) {
t1 = new MyThread();
t2 = new MyThread();
Thread mT1 = new Thread(t1);//создание потока
mT1.start();//Запуск потока
Thread mT2 = new Thread(t2);//создание потока
mT2.start();//Запуск потока
….
}

13.03.2018

Слайд 53

СПОСОБ №2: НАСЛЕДОВАНИЕ ОТ КЛАССА THREAD 13.03.2018

СПОСОБ №2: НАСЛЕДОВАНИЕ ОТ КЛАССА THREAD

13.03.2018

Слайд 54

public class MyThread extends Thread{ @Override public void run() { /*Код

public class MyThread extends Thread{
@Override
public void run() {

/*Код который должен выполнить поток*/ }
}

public class GeneralProcess {
static MyThread t1, t2;
public static void main(String[] args) {
t1 = new MyThread();
t2 = new MyThread();
Thread mT1 = new Thread(t1);//создание потока
mT1.start();//Запуск потока
Thread mT2 = new Thread(t2);//создание потока
mT2.start();//Запуск потока
….
}

13.03.2018

Слайд 55

В ЧЕМ РАЗНИЦА МЕЖДУ РЕАЛИЗАЦИЕЙ ИНТЕРФЕЙСА RUNNABLE И НАСЛЕДОВАНИЕМ ОТ КЛАССА THREAD? http://qaru.site/questions/57/implements-runnable-vs-extends-thread 13.03.2018

В ЧЕМ РАЗНИЦА МЕЖДУ РЕАЛИЗАЦИЕЙ ИНТЕРФЕЙСА RUNNABLE И НАСЛЕДОВАНИЕМ ОТ КЛАССА

THREAD? http://qaru.site/questions/57/implements-runnable-vs-extends-thread

13.03.2018

Слайд 56

ДАВАЙТЕ ИЗУЧИМ КОД: 13.03.2018

ДАВАЙТЕ ИЗУЧИМ КОД:

13.03.2018

Слайд 57

13.03.2018

13.03.2018

Слайд 58

13.03.2018

13.03.2018

Слайд 59

В интерфейсе Runnable создается только один экземпляр класса, и он разделяется

В интерфейсе Runnable создается только один экземпляр класса, и он разделяется

различными потоками. Таким образом, значение счетчика увеличивается для каждого доступа к потоку.
В то время как подход класса Thread, вы должны создать отдельный экземпляр для каждого потока. Следовательно, для каждого экземпляра класса выделяется различная память и каждый имеет отдельный счетчик, значение остается таким же, что означает, что приращение не произойдет, потому что ни одна из ссылок на объекты не является такой же.

13.03.2018

Слайд 60

Когда использовать Runnable? Используйте интерфейс Runnable, если вы хотите получить доступ

Когда использовать Runnable?  Используйте интерфейс Runnable, если вы хотите получить доступ к

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

13.03.2018

Слайд 61

Когда вы реализуете интерфейс Runnable, вы можете сохранить пространство для своего

Когда вы реализуете интерфейс Runnable, вы можете сохранить пространство для своего класса

для расширения любого другого класса.
Java не поддерживает множественное наследование, а это значит, что вы можете расширять только один класс на Java, поэтому, как только вы расширили класс Thread, вы потеряли свой шанс и не можете расширять или наследовать другой класс на Java.

13.03.2018

Слайд 62

В задачи нашего курса не входит освоение ЯВУ, давайте все же

В задачи нашего курса не входит освоение ЯВУ, давайте все же

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

13.03.2018

Слайд 63

Мы создали 2 потока, которые вычисляют интеграл. Программа ParallelProg 13.03.2018

Мы создали 2 потока, которые вычисляют интеграл.

Программа ParallelProg

13.03.2018

Слайд 64

Давайте посмотрим как эти два потока борются за один и тот

Давайте посмотрим как эти два потока борются за один и тот

же ресурс – ядро. Пример №1

Программа ParallelProg

13.03.2018

Слайд 65

Давайте посмотрим как эти два потока борются за один и тот

Давайте посмотрим как эти два потока борются за один и тот

же ресурс – ядро. Пример №2

Программа ParallelProg

13.03.2018

Слайд 66

Вот что происходит с процессором, когда оба потока запущены. 13.03.2018

Вот что происходит с процессором, когда оба потока запущены.

13.03.2018

Слайд 67

Вот что происходит с процессором, когда оба потока прекратили вычисления. 13.03.2018

Вот что происходит с процессором, когда оба потока прекратили вычисления.

13.03.2018

Слайд 68

РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ Мы видим, что при параллельном выполнении задачи мы улучшили

РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯ

Мы видим, что при параллельном выполнении задачи мы улучшили показатели

времени на 19,53% в первом тесте и на 15,13% во втором тестировании, при разбиении интервала АВ на 1 000 000 отрезков, и вычисляя площадь на каждом отрезке

13.03.2018

Слайд 69

ВОПРОС: ПОЧЕМУ ВРЕМЯ ВЫЧИСЛЕНИЯ ИНТЕГРАЛА НЕ УЛУЧШИЛОСЬ ПРИ ПАРАЛЛЕЛЬНОМ ПОДХОДЕ НА

ВОПРОС: ПОЧЕМУ ВРЕМЯ ВЫЧИСЛЕНИЯ ИНТЕГРАЛА НЕ УЛУЧШИЛОСЬ ПРИ ПАРАЛЛЕЛЬНОМ ПОДХОДЕ НА

50% , ВЕДЬ ПО ИДЕИ ЕСЛИ ДВЕ ПОДЗАДАЧИ ВЫПОЛНЯЮТСЯ ПАРАЛЛЕЛЬНО И НЕЗАВИСИМО ДРУГ ОТ ДРУГА, ТО ЗАДАЧА ДОЛЖНА РЕШИТЬСЯ В 2 РАЗА БЫСТРЕЕ?

13.03.2018

Слайд 70

ОТВЕТ: В данном примере обе задачи были однотипные, а значит им

ОТВЕТ:
В данном примере обе задачи были однотипные, а значит им требовались

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

13.03.2018

Слайд 71

ПРОВЕДЕМ НОВЫЕ ИССЛЕДОВАНИЯ! Создадим два параллельных потока: Первый поток будет вычислять

ПРОВЕДЕМ НОВЫЕ ИССЛЕДОВАНИЯ!

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

числа Pi (как в примере раньше)
Второй поток будет работать с графикой и ему понадобиться рисовать фигуру (треугольник) каждый раз на разном фоне (то на белом фоне, то на черном, в зависимости от переключения логической переменной)

13.03.2018

Слайд 72

КОГДА ОБА ПОТОКА РАБОТАЮТ Программа JOGLParallelProgram 13.03.2018

КОГДА ОБА ПОТОКА РАБОТАЮТ

Программа JOGLParallelProgram

13.03.2018

Слайд 73

ПОТОК 1 ЗАВЕРШИЛ ВЫЧИСЛЕНИЯ Программа JOGLParallelProgram 13.03.2018

ПОТОК 1 ЗАВЕРШИЛ ВЫЧИСЛЕНИЯ

Программа JOGLParallelProgram

13.03.2018

Слайд 74

ОБРАТИМСЯ К ФИЛОСОФИИ☺ Ответит ли нам программа на вечный вопрос: Что

ОБРАТИМСЯ К ФИЛОСОФИИ☺

Ответит ли нам программа на вечный вопрос: Что появилось

раньше: Яйцо или Курица?
Один поток выводит на экран сообщение, что раньше появилось Яйцо, другой выводит ответ, что первее Курица.
Программа будет работать в течении 5 секунд и каждый раз предугадать, какой ответ она выдаст трудно.
Но мы попытаемся предугадать что ответит программа. Проведем 100 исследований и найдем вероятность того или иного ответа.

13.03.2018

Слайд 75

РЕЗУЛЬТАТЫ СПОРА: 13.03.2018

РЕЗУЛЬТАТЫ СПОРА:

13.03.2018

Слайд 76

НАГРУЗКА НА ЦП МИНИМАЛЬНА (ВЫЧИСЛЕНИЙ НЕТ) Программа PrallelProgramming 13.03.2018

НАГРУЗКА НА ЦП МИНИМАЛЬНА (ВЫЧИСЛЕНИЙ НЕТ)

Программа PrallelProgramming

13.03.2018

Слайд 77

ПРОВЕДЕМ 100 АНАЛОГИЧНЫХ ТЕСТОВ, ЧТОБЫ УЗНАТЬ ВЕРОЯТНОСТЬ ВЫДАЧИ ОТВЕТА 13.03.2018

ПРОВЕДЕМ 100 АНАЛОГИЧНЫХ ТЕСТОВ, ЧТОБЫ УЗНАТЬ ВЕРОЯТНОСТЬ ВЫДАЧИ ОТВЕТА

13.03.2018

Слайд 78

РЕЗУЛЬТАТЫ ТЕСТИРОАНИЯ: ЯЙЦО vs КУРИЦА ПОБЕЖДАЕТ ЯЙЦО СО СЧЕТОМ 88:12 13.03.2018

РЕЗУЛЬТАТЫ ТЕСТИРОАНИЯ:

ЯЙЦО vs КУРИЦА

ПОБЕЖДАЕТ ЯЙЦО СО СЧЕТОМ

88:12

13.03.2018