🗊Презентация Фокусы. Оптимизация компилятором

Нажмите для полного просмотра!
Фокусы. Оптимизация компилятором, слайд №1Фокусы. Оптимизация компилятором, слайд №2Фокусы. Оптимизация компилятором, слайд №3Фокусы. Оптимизация компилятором, слайд №4Фокусы. Оптимизация компилятором, слайд №5Фокусы. Оптимизация компилятором, слайд №6Фокусы. Оптимизация компилятором, слайд №7Фокусы. Оптимизация компилятором, слайд №8Фокусы. Оптимизация компилятором, слайд №9Фокусы. Оптимизация компилятором, слайд №10Фокусы. Оптимизация компилятором, слайд №11Фокусы. Оптимизация компилятором, слайд №12Фокусы. Оптимизация компилятором, слайд №13Фокусы. Оптимизация компилятором, слайд №14Фокусы. Оптимизация компилятором, слайд №15Фокусы. Оптимизация компилятором, слайд №16Фокусы. Оптимизация компилятором, слайд №17Фокусы. Оптимизация компилятором, слайд №18Фокусы. Оптимизация компилятором, слайд №19Фокусы. Оптимизация компилятором, слайд №20Фокусы. Оптимизация компилятором, слайд №21Фокусы. Оптимизация компилятором, слайд №22

Содержание

Вы можете ознакомиться и скачать презентацию на тему Фокусы. Оптимизация компилятором. Доклад-сообщение содержит 22 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Есть ли у вас вопросы?
Описание слайда:
Есть ли у вас вопросы?

Слайд 2





Краткое содержание этой серии
Фокусы
Оптимизация компилятором
Описание слайда:
Краткое содержание этой серии Фокусы Оптимизация компилятором

Слайд 3





Фокус №1
Создаю глобальный двухмерный массив
Заполняю его случайными числами
Вычисляю сумму всех элементов:
sum += array[i][j]
sum += array[j][i]
На ПК вариант а быстрее почти в 5 раз!
На МК никакой разницы нет.
ПОЧЕМУ?
Описание слайда:
Фокус №1 Создаю глобальный двухмерный массив Заполняю его случайными числами Вычисляю сумму всех элементов: sum += array[i][j] sum += array[j][i] На ПК вариант а быстрее почти в 5 раз! На МК никакой разницы нет. ПОЧЕМУ?

Слайд 4





Фокус №1
А как лежит в памяти двумерный массив?
Описание слайда:
Фокус №1 А как лежит в памяти двумерный массив?

Слайд 5


Фокусы. Оптимизация компилятором, слайд №5
Описание слайда:

Слайд 6





Все дело в кэш-памяти
Зачем нужен кэш?
Чтобы ускорить доступ к часто используемым данным, т.к. оперативная память слишком медленная.
На МК кэш-памяти нет – поэтому нет никакой разницы между вариантами а и б.
Описание слайда:
Все дело в кэш-памяти Зачем нужен кэш? Чтобы ускорить доступ к часто используемым данным, т.к. оперативная память слишком медленная. На МК кэш-памяти нет – поэтому нет никакой разницы между вариантами а и б.

Слайд 7





А как работает кэш?
Кэш состоит из «линий» (cache lines) - 
при каждом обращении в память кэшируется несколько последовательных байт (64-128).
Если при обращении в память нужный элемент уже есть в кэше, то все хорошо (кэш-попадание).
Если нужного элемента в кэше нет – нужно пойти в память и считать линию (кэш-промах).
Кэш не бесконечен! Поэтому чтобы записать в него новую линию, нужно стереть старую.
Описание слайда:
А как работает кэш? Кэш состоит из «линий» (cache lines) - при каждом обращении в память кэшируется несколько последовательных байт (64-128). Если при обращении в память нужный элемент уже есть в кэше, то все хорошо (кэш-попадание). Если нужного элемента в кэше нет – нужно пойти в память и считать линию (кэш-промах). Кэш не бесконечен! Поэтому чтобы записать в него новую линию, нужно стереть старую.

Слайд 8





Кэш
Вывод?
Последовательный доступ к памяти гораздо быстрее, чем случайный.
С точки зрения железа самая быстрая структура данных – обычный массив (на не слишком большом количестве данных).
Описание слайда:
Кэш Вывод? Последовательный доступ к памяти гораздо быстрее, чем случайный. С точки зрения железа самая быстрая структура данных – обычный массив (на не слишком большом количестве данных).

Слайд 9





Кэш
В современных процессорах есть:
кэш данных (D-cache)
кэш инструкций (I-cache)
буфер ассоциативной трансляции (TLB)
Как правило, существует несколько уровней кэша.
Описание слайда:
Кэш В современных процессорах есть: кэш данных (D-cache) кэш инструкций (I-cache) буфер ассоциативной трансляции (TLB) Как правило, существует несколько уровней кэша.

Слайд 10





Кэш в современном процессоре
Описание слайда:
Кэш в современном процессоре

Слайд 11





Кэш в современном процессоре
Время чтения из памяти для Core i7-9xx:
L1 - 4 такта.
L2 - 11 тактов.
L3 - 39 тактов.
Основная ОЗУ – 107 тактов.
Описание слайда:
Кэш в современном процессоре Время чтения из памяти для Core i7-9xx: L1 - 4 такта. L2 - 11 тактов. L3 - 39 тактов. Основная ОЗУ – 107 тактов.

Слайд 12





Кэш
Допустим, что два ядра процессора обращаются к одной и той же переменной.
Тогда соответствующий кусок памяти будет закэширован дважды в двух кэшах L1.
А что будет, если одно ядро что-нибудь в эту переменную запишет?
Что тогда прочитает другое ядро?
Если доступ к переменной организован правильно, то все будет в порядке. Для программиста кэш в этом смысле «прозрачен».
Но за это придется платить скоростью работы..
Описание слайда:
Кэш Допустим, что два ядра процессора обращаются к одной и той же переменной. Тогда соответствующий кусок памяти будет закэширован дважды в двух кэшах L1. А что будет, если одно ядро что-нибудь в эту переменную запишет? Что тогда прочитает другое ядро? Если доступ к переменной организован правильно, то все будет в порядке. Для программиста кэш в этом смысле «прозрачен». Но за это придется платить скоростью работы..

Слайд 13





Кэш
Допустим, что два ядра процессора обращаются к двум разным переменным, которые расположены в памяти рядом.
Одна и та же кэш-линия опять-таки будет находится в двух кэшах.
Прозрачность кэша гарантирует, что значения переменных будут корректными.
Но для этого при каждой записи эта линия будет записываться в основную память и читаться опять! И скорость работы программы упадет.
Это называется «false sharing» (ложное разделение памяти).
Описание слайда:
Кэш Допустим, что два ядра процессора обращаются к двум разным переменным, которые расположены в памяти рядом. Одна и та же кэш-линия опять-таки будет находится в двух кэшах. Прозрачность кэша гарантирует, что значения переменных будут корректными. Но для этого при каждой записи эта линия будет записываться в основную память и читаться опять! И скорость работы программы упадет. Это называется «false sharing» (ложное разделение памяти).

Слайд 14





Фокус №1.5
Возьмем неудачный способ сложения элементов массива (по столбцам).
Логично предположить, что чем больше массив – тем больше времени занимает его обход.
Массив 4100х4100 обходится быстрее чем 4096х4096.
Степени двойки – это плохо?
Описание слайда:
Фокус №1.5 Возьмем неудачный способ сложения элементов массива (по столбцам). Логично предположить, что чем больше массив – тем больше времени занимает его обход. Массив 4100х4100 обходится быстрее чем 4096х4096. Степени двойки – это плохо?

Слайд 15





Ассоциативность кэша
А как узнать, закэширована переменная или нет?
Кэш прямого отображения - каждый адрес памяти может быть закэширован в одно, заранее определенное место в кэше.
Легко подвергается конфликтам.
Полностью ассоциативный кэш – любая переменная может быть закэширована в любой участок кэша.
Очень сложная реализация.
Частично ассоциативный кэш – каждая переменная может находится в нескольких, заранее определенных участках кэша.
Компромисс, используется на практике.
Описание слайда:
Ассоциативность кэша А как узнать, закэширована переменная или нет? Кэш прямого отображения - каждый адрес памяти может быть закэширован в одно, заранее определенное место в кэше. Легко подвергается конфликтам. Полностью ассоциативный кэш – любая переменная может быть закэширована в любой участок кэша. Очень сложная реализация. Частично ассоциативный кэш – каждая переменная может находится в нескольких, заранее определенных участках кэша. Компромисс, используется на практике.

Слайд 16





Частично ассоциативный кэш
Например, 16-входовой частично ассоциативный кэш – линии кэша делятся на 16 групп.
Каждая переменная входит в одну группу и может входить только в линии кэша из этой группы.
Номер группы, как правило, определяется адресом переменной.

Переменные с адресами, кратными определенному числу, будут входить в одну группу и соревноваться за одни и те же линии кэша!
Описание слайда:
Частично ассоциативный кэш Например, 16-входовой частично ассоциативный кэш – линии кэша делятся на 16 групп. Каждая переменная входит в одну группу и может входить только в линии кэша из этой группы. Номер группы, как правило, определяется адресом переменной. Переменные с адресами, кратными определенному числу, будут входить в одну группу и соревноваться за одни и те же линии кэша!

Слайд 17





Кэш для инструкций
Линейный код (без переходов) выполняется быстрее
Маленькие программы (которые целиком помещаются в кэш) выполняются быстрее
Описание слайда:
Кэш для инструкций Линейный код (без переходов) выполняется быстрее Маленькие программы (которые целиком помещаются в кэш) выполняются быстрее

Слайд 18





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

Слайд 19





Фокус №2
Вариант А:
Заполним одномерный массив случайными элементами.
Много раз найдем сумму всех элементов больше 128.
Вариант Б:
Заполним одномерный массив случайными элементами.
Отсортируем массив
Много раз найдем сумму всех элементов больше 128.
На МК вариант Б занимает больше времени.
На ПК вариант Б занимает существенно меньше времени.
Но почему?
Описание слайда:
Фокус №2 Вариант А: Заполним одномерный массив случайными элементами. Много раз найдем сумму всех элементов больше 128. Вариант Б: Заполним одномерный массив случайными элементами. Отсортируем массив Много раз найдем сумму всех элементов больше 128. На МК вариант Б занимает больше времени. На ПК вариант Б занимает существенно меньше времени. Но почему?

Слайд 20





Предсказание переходов
Ключевой момент:
 if (data[c] >= 128)
                sum += data[c];
Если массив отсортирован – то переходы очень предсказуемы, предсказатель редко ошибается.
Если массив не отсортирован – предсказатель ошибается постоянно!
Описание слайда:
Предсказание переходов Ключевой момент: if (data[c] >= 128) sum += data[c]; Если массив отсортирован – то переходы очень предсказуемы, предсказатель редко ошибается. Если массив не отсортирован – предсказатель ошибается постоянно!

Слайд 21





Оптимизация
Критерии оптимизации:
по объему кода (бинарного файла)
по скорости исполнения
Иногда можно (и хочется) оптимизировать сразу по двум критериям, но не всегда.
Описание слайда:
Оптимизация Критерии оптимизации: по объему кода (бинарного файла) по скорости исполнения Иногда можно (и хочется) оптимизировать сразу по двум критериям, но не всегда.

Слайд 22





Оптимизация «на пальцах»
У компилятора есть некая «область просмотра» (scope), в пределах которой он оптимизирует код:
одна строка
несколько строк, цикл
функция
файл
весь проект
Грубо говоря, чем больше эта область, тем лучше оптимизация.
Описание слайда:
Оптимизация «на пальцах» У компилятора есть некая «область просмотра» (scope), в пределах которой он оптимизирует код: одна строка несколько строк, цикл функция файл весь проект Грубо говоря, чем больше эта область, тем лучше оптимизация.



Похожие презентации
Mypresentation.ru
Загрузить презентацию