Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Технологии параллельного программирования

Содержание

ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯOpenMPTBBMPICUDAOpenCLOpenACCChapel13.03.2018
 Технологии параллельного программированияСоколова Анастасия ЭВМб-14-113.03.2018 ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯOpenMPTBBMPICUDAOpenCLOpenACCChapel13.03.2018 https://en.wikipedia.org/wiki/OpenMPOpenMP13.03.2018 Разработку спецификации OpenMP ведут несколько крупных производителей ВТ и ПОAMD, IBM, Intel, OpenMP uses a portable, scalable model with a simple interface for developing 13.03.2018По умолчанию в компиляторах поддержка OpenMP выключена. Для её включения следует использовать 13.03.2018http://www.cyberforum.ru/blogs/18334/blog2965.html 13.03.2018http://www.cyberforum.ru/blogs/18334/blog2965.html 13.03.2018ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ OPEN MP НА С++ СМОТРИ ТУТhttp://www.cyberforum.ru/blogs/18334/blog2965.html Message Passing Interface (MPI, интерфейс передачи сообщений) — программный интерфейс (API) для передачи информации, который 13.03.2018 В первую очередь MPI ориентирован на системы с распределенной памятью, то есть когда Intel Threading Building Blocks (также известная как TBB) — кроссплатформенная библиотека шаблонов С++, разработанная компанией Intel для 13.03.2018 The open standard for parallel programming of heterogeneous systemsOpenCL ™ (Open Computing https://habrahabr.ru/post/261323/OpenCL – как и с чего начать можно найти примеры тут (С++):13.03.2018 CUDA vs OpenCL13.03.2018CUDA это архитектура параллельных вычислений от NVIDIA, позволяющая существенно увеличить 13.03.2018То есть если Вы захотите чтобы ваш движок рендеринга или программа расчета 13.03.2018было решено создать некий единый стандарт для программ, исполняющихся в гетерогенной среде. 13.03.2018Решение проблемы Для разработки открытого стандарта решили привлечь людей, у которых уже 13.03.2018 Попробуем решить одну простую задачу с помощью актуальных технологий параллельного программирования (OpenMP,  Вычислим число Пи путем численного интегрирования, будем использовать метод прямоугольников 13.03.2018 Объявим количество шагов, на которые разобьем интегралa – левый предел интегралаb – 13.03.2018 Вычислим площадь криволинейной трапеции, посчитав значение функции в каждом прямоугольнике и домножив Попробуем решить задачу сначала последовательным алгоритмом, а затем с использованием технологий параллельного Последовательное программированиеpackage parallelprog;public class ParallelProg {  static double x=0;  static public static void main(String[] args) {start = System.nanoTime();//Отметим время начала Результат последовательного программирования Результат №1Результат №213.03.2018 ТЕПЕРЬ ПОПРОБУЕМ РЕШИТЬ ЗАДАЧУ С ПОМОЩЬЮ ПАРАЛЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ13.03.2018 Самая доступная простым пользователям параллельная архитектура — это обычный многоядерный процессор или Одно ядро также способно исполнять параллельно несколько потоков — такой режим называется Латентность (задержка) - это время, которое затрачивается на чтение из памяти одного Самый «исторический» способ использовать сразу несколько ядер на процессоре — это механизм С точки зрения программиста важно то, что параллельные потоки, исполняемые на разных ВЕРНЕМСЯ К НАШЕЙ ЗАДАЧЕ: ВЫЧИСЛЕНИЕ ИНТЕГРАЛА13.03.2018 РАЗОБЬЕМ ИНТЕГРАЛ НА ЛЕВУЮ И ПРАВУЮ ЧАСТИ. ПЕРВЫЙ ПОТОК БУДЕТ ВЫЧИСЛЯТЬ ИНТЕГРАЛ ВОПРОС: Почему будет неэффективным решением разбить интервал АВ на равные доли и ОТВЕТ: Если один из потоков посчитает свою часть раньше — то соответствующее Поэтому оба потока будут вычислять интеграл с разной скоростью, пока не встретятся лицом к лицу13.03.2018 Что касаемо программыМногопоточность в Java13.03.2018 Процесс — это совокупность кода и данных, разделяющих общее виртуальное адресное пространство Браузер Chrome создает отдельный процесс для каждой вкладки, что дает ему некоторые ОС оперирует так называемыми страницами памяти, которые представляют собой просто область определенного Один поток – это одна единица исполнения кода. Каждый поток последовательно выполняет Псевдо-параллелизм.Система запоминает состояние (контекст) каждого потока, перед тем как переключиться на другой УКРЕПИМ ЗНАНИЯ:Процессы изолированы друг от друга, поэтому прямой доступ к памяти чужого JAVAКаждый процесс имеет хотя бы один выполняющийся поток. Тот поток, с которого КАК СОЗДАТЬ ПОТОКИ В JAVAhttps://habrahabr.ru/post/164487/13.03.2018 СПОСОБ №1 СОЗДАТЬ ПОТОК В JAVA С ПОМОЩЬЮ ИНТЕРФЕЙСА RUNNABLE13.03.2018 public class MyThread implements Runnable{     @Override  public СПОСОБ №2: НАСЛЕДОВАНИЕ ОТ КЛАССА THREAD13.03.2018 public class MyThread extends Thread{     @Override  public В ЧЕМ РАЗНИЦА МЕЖДУ РЕАЛИЗАЦИЕЙ ИНТЕРФЕЙСА RUNNABLE И НАСЛЕДОВАНИЕМ ОТ КЛАССА THREAD?  http://qaru.site/questions/57/implements-runnable-vs-extends-thread13.03.2018 ДАВАЙТЕ ИЗУЧИМ КОД:13.03.2018 13.03.2018 13.03.2018 В интерфейсе Runnable создается только один экземпляр класса, и он разделяется различными Когда использовать Runnable?  Используйте интерфейс Runnable, если вы хотите получить доступ к Когда вы реализуете интерфейс Runnable, вы можете сохранить пространство для своего класса для В задачи нашего курса не входит освоение ЯВУ, давайте все же вернемся Мы создали 2 потока, которые вычисляют интеграл. Программа ParallelProg13.03.2018 Давайте посмотрим как эти два потока борются за один и тот же Давайте посмотрим как эти два потока борются за один и тот же Вот что происходит с процессором, когда оба потока запущены.13.03.2018 Вот что происходит с процессором, когда оба потока прекратили вычисления.13.03.2018 РЕЗУЛЬТАТЫ ТЕСТИРОВАНИЯМы видим, что при параллельном выполнении задачи мы улучшили показатели времени ВОПРОС: ПОЧЕМУ ВРЕМЯ ВЫЧИСЛЕНИЯ ИНТЕГРАЛА НЕ УЛУЧШИЛОСЬ ПРИ ПАРАЛЛЕЛЬНОМ ПОДХОДЕ НА 50% ОТВЕТ:В данном примере обе задачи были однотипные, а значит им требовались одни ПРОВЕДЕМ НОВЫЕ ИССЛЕДОВАНИЯ!Создадим два параллельных потока:Первый поток будет вычислять интеграл для числа КОГДА ОБА ПОТОКА РАБОТАЮТПрограмма JOGLParallelProgram13.03.2018 ПОТОК 1 ЗАВЕРШИЛ ВЫЧИСЛЕНИЯПрограмма JOGLParallelProgram13.03.2018 ОБРАТИМСЯ К ФИЛОСОФИИ☺Ответит ли нам программа на вечный вопрос: Что появилось раньше: РЕЗУЛЬТАТЫ СПОРА:13.03.2018 НАГРУЗКА НА ЦП МИНИМАЛЬНА (ВЫЧИСЛЕНИЙ НЕТ)Программа PrallelProgramming13.03.2018 ПРОВЕДЕМ 100 АНАЛОГИЧНЫХ ТЕСТОВ, ЧТОБЫ УЗНАТЬ ВЕРОЯТНОСТЬ ВЫДАЧИ ОТВЕТА13.03.2018 РЕЗУЛЬТАТЫ ТЕСТИРОАНИЯ:ЯЙЦО vs КУРИЦАПОБЕЖДАЕТ ЯЙЦО СО СЧЕТОМ 88:1213.03.2018 13.03.2018The end!
Слайды презентации

Слайд 2 ТЕХНОЛОГИИ ПАРАЛЛЕЛЬНОГО ПРОГРАММИРОВАНИЯ
OpenMP
TBB
MPI
CUDA
OpenCL
OpenACC
Chapel
13.03.2018

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

Слайд 3 https://en.wikipedia.org/wiki/OpenMP
OpenMP
13.03.2018

https://en.wikipedia.org/wiki/OpenMPOpenMP13.03.2018

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

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

и ПО
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

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

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.2018http://www.cyberforum.ru/blogs/18334/blog2965.html

Слайд 8 13.03.2018
http://www.cyberforum.ru/blogs/18334/blog2965.html

13.03.2018http://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, интерфейс передачи сообщений) — программный интерфейс

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

(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

The open standard for parallel programming of heterogeneous systemsOpenCL ™ (Open

systems
OpenCL ™ (Open Computing Language) - это открытый, стандарт

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

13.03.2018

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

OpenCL


Слайд 16 https://habrahabr.ru/post/261323/
OpenCL – как и с чего начать можно

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

найти примеры тут (С++):
13.03.2018


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

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

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

левый предел интеграла
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

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

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 =

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

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Результат №213.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

Что касаемо программыМногопоточность в Java13.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

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

Слайд 51 СПОСОБ №1 СОЗДАТЬ ПОТОК В JAVA С ПОМОЩЬЮ

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

ИНТЕРФЕЙСА RUNNABLE
13.03.2018


Слайд 52 public class MyThread implements Runnable{

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

@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: НАСЛЕДОВАНИЕ ОТ КЛАССА THREAD13.03.2018

Слайд 54 public class MyThread extends Thread{

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

@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 И

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

НАСЛЕДОВАНИЕМ ОТ КЛАССА 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 потока, которые вычисляют интеграл.
Программа

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

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

КОГДА ОБА ПОТОКА РАБОТАЮТПрограмма JOGLParallelProgram13.03.2018

Слайд 73 ПОТОК 1 ЗАВЕРШИЛ ВЫЧИСЛЕНИЯ

Программа JOGLParallelProgram
13.03.2018

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

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

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

вопрос: Что появилось раньше: Яйцо или Курица?
Один поток выводит

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

13.03.2018


Слайд 75 РЕЗУЛЬТАТЫ СПОРА:
13.03.2018

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

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

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

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

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

ОТВЕТА
13.03.2018


Слайд 78 РЕЗУЛЬТАТЫ ТЕСТИРОАНИЯ:
ЯЙЦО vs КУРИЦА
ПОБЕЖДАЕТ ЯЙЦО СО СЧЕТОМ

88:12
13.03.2018

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

  • Имя файла: tehnologii-parallelnogo-programmirovaniya.pptx
  • Количество просмотров: 111
  • Количество скачиваний: 0