1 / 18

ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ

ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ. Тема 2 Современные компьютеры и подсистема памяти Д.ф.-м.н., профессор А.Г. Тормасов Базовая кафедра «Теоретическая и Прикладная Информатика», МФТИ. Тема.

odette
Télécharger la présentation

ТЕОРИЯ И ПРАКТИКА МНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ТЕОРИЯ И ПРАКТИКАМНОГОПОТОЧНОГО ПРОГРАММИРОВАНИЯ Тема 2 Современные компьютеры и подсистема памяти Д.ф.-м.н., профессор А.Г. Тормасов Базовая кафедра «Теоретическая и Прикладная Информатика», МФТИ

  2. Тема • Краткий обзор необходимых для понимания дальнейшего изложения основ архитектуры компьютерных систем на базе Intel x86 • Рассматриваются с точки зрения прикладного программиста только те компоненты, которые: • явно влияют на производительность программы • и на поведение которых программист может прямо или косвенно влиять при выборе способа реализации программ и алгоритмов Теоретическая и Прикладная Информатика, МФТИ

  3. Архитектура фон Неймана • Основные характеристики • Программы хранятся в памяти • Память разделяется между данными и программами • Последовательная модель исполнения • Удобно для создания алгоритмов • Но: сейчас компьютеры работают НЕ ТАК • С одной точки зрения, это похоже на реальные компьютеры • С другой, это некая абстракция со своими ограничениями Теоретическая и Прикладная Информатика, МФТИ

  4. Типовой PC CPU, один или несколько RAM – системная память Набор системной логики (chipset) Северный мост (Northbridge) Южный мост (Southbridge) Теоретическая и Прикладная Информатика, МФТИ

  5. Работа основных компонент • CPU • Обычно содержит несколько независимых потоков исполнения • Планирование исполнения и контекстные переключения • Имитация многозадачности и контекстные переключения, прерывания • Тяжесть переключений (зависит от ОС и типа переключения, обычно велика) • Кэш • Быстрая память, многоуровневая, улучшает производительность • Interconnect (соединитель) • Соединяет процессоры и память разных уровней (включая кэши) • набор аппаратных соединений, имеющих определенную пропускную способность • Если не хватает, процессор просто будет ждать! • SMP (symmetric multi processing) • NUMA (non uniform memory access). Теоретическая и Прикладная Информатика, МФТИ

  6. Кэширование Шина памяти Современные системы используют множество кэшей (данные, инструкции, TLB и тд) Многие кэши иерархические Некоторые расположены непосредственно около процессора Обычно гипертреды разделяют L1 Ядра обычно разделяют L2 (парами) L3 обычно общий для всех L3 L2 L1i L1d Шина памяти Теоретическая и Прикладная Информатика, МФТИ

  7. Кэширование Шина памяти • При обращении процессора к памяти сначала проверяется нет ли искомого адреса в кэше • Cache miss (неприсутствие) • обращение к кэшу • обращение к памяти • освобождение места в кэше • загрузка в кэш (!) • передача в процессор • Cache hit (присутствие) • обращение к кэшу • передача в процессор Шина памяти Теоретическая и Прикладная Информатика, МФТИ

  8. Когерентностькэшей • Синхронизация разных кэшей • MESI • Modifed (модифицировано) – линия присутствует только в текущем кэше, и является “грязной” • Exclusive (уникально) – линия присутствует только в текущем кэше, и соответствует содержанию памяти (“чистая"). • Shared (разделяемо) – линия может присутствовать в других кэшах, и соответствует содержанию памяти (“чистая"). • Invalid (недействительно) – линия недействительна. Теоретическая и Прикладная Информатика, МФТИ

  9. Гранулярность кэша • Локальность: • Используем адрес  скоро будем его использовать еще раз  берем из кэша • Используем адрес  скоро будем использовать соседний адрес  берем из той же линии кэша • Коэффициент попаданий в кэш • Мера эффективности • Зависит от локальности • Нет смысла хранить каждое слово в кэше (как адресовать? Не эффективно...) • Память разбивается на фиксированные куски – «линии кэша» (32 или 64 байта) • Всегда одинаково выровнены • При считывании 1 слова читается целиком вся линия • Растет количество обращений к основной памяти • Как лучше обращаться к a[i,j]? • При записи используется Write Combination Buffer • Если недостаточно данных в линии – считывается из памяти перед записью • Запись 64 байт подряд – 1 транзакция • Запись 63 байт подряд – 8 (!) транзакций Теоретическая и Прикладная Информатика, МФТИ

  10. Фальшивое разделение • Одна линия кэша содержит данные, относящиеся к разным потокам • Каждая модификация данных одним потоком вызывает сброс кэша для второго потока (и его постоянное перезачитывание из памяти) • Данные реально не разделяются, но накладные расходы как при разделении • Следствие гранулярности кэшей и протокола синхронизации intsumLocal[N_THREADS]; … void ThrFnc(thread_data *p) { … int id = p->threadId; sumLocal[id] = 0; … for (i=0; i<N; i++) sumLocal[id] += p[i]; … } Теоретическая и Прикладная Информатика, МФТИ

  11. Фальшивое разделение • Первый поток пишет в свой элемент своей копии линии кэша • Эта же линия кэша второго потока инвалидируется (копия сбрасывается) • Второй поток пытается писать в свой элемент линии кэша – перед этим кэш зачитывается из памяти • То же самое происходит и с первым потоком... MESI Шина памяти Теоретическая и Прикладная Информатика, МФТИ

  12. Разные соединители SMP NUMA Interconnect Interconnect Теоретическая и Прикладная Информатика, МФТИ

  13. Что тут неэффективно? Поток 1 Поток 2 { … // получить ссылку // на данные соседа int *pFlag = GetFromRemote(); … while ( !(*pFlag) ) ; … } { int flag = FALSE; … // передать ссылку на // локальную переменную GiveToRemote(&flag); … flag = TRUE; … } Теоретическая и Прикладная Информатика, МФТИ

  14. Проблема кэширования • Х86: черезвычайно разветвленная система паралелизма на уровне инструкций • Море оптимизаций • Многоисполнительных блоков, глубокая конвейеризация, суперскалярность, параллельное планирование, умозрительное исполнение инструкций, гигантские буферы для переупорядочения, многоуровневое кэширование • Ограничение производительности изза кэширования • Черезвычайно низкий уровень промахов по данным и командам • Высокая цена промаха, от 10 до 1000 тактов, и увеличивается исторически • Работа инструкции в тактах: с регистром ≤1, кэшом L1 ~3, кэшом L2 ~15, памятью ~200! • Закон Мура: удвоение производительности ЦПУ за ~2 года • Но: удвоение производительности памяти за ~6 лет, экспоненциальная яма • надо все больше уровней кэширования • В результате, даже ~5% промахов может доминировать в производительности! Теоретическая и Прикладная Информатика, МФТИ

  15. Доминирующие потери • 1985 год: ошибки страниц • Локальность данных не так уж важна • 1995 год: исполняемые инструкции • Локальность данных не так уж важна • Важно количество параллельно запускаемых инструкций, доступ к памяти не очень дорог • 2005 год: промахи кэшей • Локальность данных снова важна! • Не важно количество параллельно запускаемых инструкций, зато доступ к памяти очень дорог Теоретическая и Прикладная Информатика, МФТИ

  16. Думай о данных, а не о коде! • В старые времена мы считали инструкции как синоним времени исполнения (предсказуемо) • Сейчас производительность определяется схемой доступа к памяти • Много разименований “a->b->с…” много промахов кэша: лишний уровень доступа – ЗЛО • Много уровней абстракции (типа SOAP->XML->DOM…)много конверсий, и каждая прогон через кэш – ЗЛО(не говорите этого любителям ООП, это их хлеб!) Теоретическая и Прикладная Информатика, МФТИ

  17. Выводы • Современные компьютеры достаточно далеко отошли от классической схемы фон Неймана, все выглядит просто, но на самом деле... • Существуют скрытые (без явных команд контроля) устройства, скорость работы которых определяет скорость работы компьютера (система кэширования и поддержки когерентности) • Сейчас доминируют потери, вызванные «дороговизной» промахов кэша – за ними надо следить и их надо избегать; шаблон доступа к памяти часто определяет производительность в целом • При написании программ: • Конверсии из формата в формат, многоуровневые структуры – избегать! • Разделяемые данные – терпимо (на чтение, через кэширование) • Изменяемые данные – терпимо (как можно локальнее) • Изменяемые + разделяемые данные – избегать! Теоретическая и Прикладная Информатика, МФТИ

  18. (с) А. Тормасов, 2010-11 г. Базовая кафедра «Теоретическая и Прикладная Информатика» ФУПМ МФТИtor@crec.mipt.ru_ Для коммерческого использования курса просьба связаться с автором. Теоретическая и Прикладная Информатика, МФТИ

More Related