Время доступа к кэш памяти: Кэш-память | Computerworld Россия | Издательство «Открытые системы»

Содержание

КЭШ-ПАМЯТЬ • Большая российская энциклопедия

  • В книжной версии

    Том 16. Москва, 2010, стр. 523

  • Скопировать библиографическую ссылку:


Авторы: В. В. Шилов

КЭШ-ПА́МЯТЬ, кеш-па­мять (англ. cache – тай­ный склад, за­пас), уст­рой­ст­во бы­ст­рой (сверх­опе­ра­тив­ной) про­ме­жу­точ­ной па­мя­ти ком­пь­ю­те­ра. В К.-п. вре­мен­но по­ме­ща­ют­ся наи­бо­лее час­то ис­поль­зуе­мые дан­ные, бла­го­да­ря че­му су­ще­ст­вен­но со­кра­ща­ет­ся вре­мя дос­ту­па про­цес­сора к ко­ман­дам и дан­ным, по­сто­ян­но хра­ня­щим­ся в ос­нов­ной (опе­ра­тив­ной) па­мя­ти. В совр. про­цес­со­рах К.-п. де­лит­ся на неск. уров­ней (до трёх). К.-п. 1-го уров­ня (L1) ра­бо­та­ет с так­то­вой час­то­той про­цес­со­ра, вре­мя дос­ту­па к хра­ня­щим­ся в ней дан­ным со­став­ля­ет 2–4 так­та, объ­ём, как пра­ви­ло, неск. де­сят­ков Кбайт. К.-п. 2-го уров­ня (L2) име­ет вре­мя дос­ту­па 7–20 так­тов и объ­ём от не­сколь­ких со­тен Кбайт до не­сколь­ких Мбайт. К.-п. L1 и L2 ап­па­рат­но реа­ли­зу­ют­ся в мик­ро­про­цес­со­ре. К.-п. 3-го уров­ня (L3) обыч­но ис­поль­зу­ет­ся в сер­вер­ных сис­те­мах, име­ет наи­мень­шее бы­ст­ро­дей­ст­вие и наи­боль­ший объ­ём, мон­ти­ру­ет­ся от­дель­но от мик­ро­про­цес­со­ра.

Ис­поль­зуя К.-п., про­цес­сор пе­ред вы­пол­не­ни­ем ко­ман­ды ана­ли­зи­ру­ет со­стоя­ние сво­их ре­ги­ст­ров дан­ных; в слу­чае от­сут­ст­вия в них не­об­хо­ди­мых дан­ных он об­ра­ща­ет­ся к К.-п. L1, а за­тем к К.-п. L2. При от­сут­ст­вии дан­ных в К.-п. (та­кая си­туа­ция на­зы­ва­ет­ся про­ма­хом) про­цес­сор об­ра­ща­ет­ся к опе­ра­тив­ной па­мя­ти, а ес­ли их нет и там, счи­ты­ва­ет с жё­ст­ко­го дис­ка. Ка­ж­дый про­мах вы­зы­ва­ет за­мед­ле­ние ра­бо­ты про­цес­со­ра, по­сколь­ку он вы­ну­ж­ден об­ра­щать­ся к бо­лее мед­лен­но­му уров­ню па­мя­ти. Пред­ва­рит. вы­бор­ка дан­ных по спец. ал­го­рит­мам по­зво­ля­ет умень­шить ве­ли­чи­ну про­ма­хов до 10%. Эф­фек­тив­ность К.-п. за­ви­сит от раз­ме­ра её стро­ки (т. н. кэш-стро­ка, т. е. блок дан­ных фик­си­ро­ван­но­го раз­ме­ра, со­стоя­щий, напр., из че­ты­рёх слов, дли­ной 32 или 64 би­та ка­ж­дое), ас­со­циа­тив­но­сти (ко­ли­че­ст­ва строк К.-п., свя­зан­ных с од­ной ячей­кой опе­ра­тив­ной па­мя­ти), ал­го­рит­ма за­ме­ще­ния строк при за­пол­не­нии К.-п. и др. В свя­зи с этим вы­де­ля­ют пря­мо­ад­ре­суе­мую, час­тич­но ас­со­циа­тив­ную, пол­но­стью ас­со­циа­тив­ную К.-п. Со­че­та­ние пря­мо­ад­ре­суе­мой К.-п. с па­мя­тью боль­шей ас­со­циа­тив­ности да­ёт разл. ви­ды гиб­рид­ной К.-п. (кэш-про­ма­хов, кэш-за­ме­ще­ний, кэш-пе­ре­хо­дов и др.).

Прин­цип кэ­ши­ро­ва­ния ис­поль­зу­ет­ся так­же для ус­ко­ре­ния ра­бо­ты на­ко­пи­те­лей дан­ных (напр., жё­ст­ких дис­ков), для умень­ше­ния тра­фи­ка по­сред­ст­вом со­хра­не­ния час­то за­пра­ши­вае­мых ин­тер­нет-стра­ниц на т. н. про­кси-сер­ве­рах и т. п.

Что такое кэш-память – как её используете система Windows

Кэш-память или просто кэш, это тип памяти, используемый для ускорения выполнения программ. Её можно рассматривать как расширение основной памяти компьютера RAM (Random Access Memory).

Кэш-память используется аппаратным обеспечением для хранения наиболее часто используемых данных, для увеличения скорости отклика компьютера и, следовательно, его производительности.

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

В чем разница между оперативкой и кэшем

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

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

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

Поэтому для оптимизации производительности объединены два типа памяти. Большой объем памяти с медленным временем доступа в ОЗУ и небольшой объём памяти с очень быстрым временем доступа в кэше.

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

Как работает кэш-память

Чтобы понять, что такое кэширование и как оно работает, нам нужно объяснить, что такое принцип локальности.

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

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

Уровни кэш-память

После понимания, что такое кэш-память, давайте посмотрим, сколько существует

типов или уровней кеш-памяти.

Есть 4 возможных уровня (L), и они организованы иерархически:

  • L1 или кэш первого уровня. Он является внутренним по отношению к процессору и часто разделяется на кэш данных и кэш инструкций.
  • L2 или кэш второго уровня. Он может быть как внутренним, так и внешним, и не различает данные и инструкции.
  • L3 или кэш третьего уровня. Он может быть как внутренним, так и внешним, но может вовсе отсутствовать. Он не различает данных и инструкций.

Типы кэш-памяти

Мы завершаем руководство о том, что такое кэш-память, объясняя, каковы основные типы этого типа памяти.

Кэш процессора

Кэш процессора является кэшем, используемым процессором компьютера для ускорения операций доступа к основной памяти.

Кэш страницы

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

Дисковый кеш

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

Веб-кэш

Веб-кэш является частью жесткого диска, который используют веб-браузеры (Chrome, Edge, Firefox) или прокси-серверs, чтобы сохранить просмотренные интернет-страницы.

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

ЛАБОРАТОРНАЯ РАБОТА 8 ВЛИЯНИЕ КЭШ-ПАМЯТИ НА ВРЕМЯ ОБРАБОТКИ МАССИВОВ 1. ВЛИЯНИЕ КЭШ-ПАМЯТИ НА СКОРОСТЬ ДОСТУПА К ДАННЫМ

2012 МГУ/ВМиК/СП. Лекция апреля

Лекция 20 18 апреля Локальность Основной принцип локальности: программа стремится использовать данные и инструкции с адресами близкими (либо точно такими же) к тем, которые использовались ранее. Временная

Подробнее

Лекция 10: Графические процессоры (ГП)

Лекция 10: Графические процессоры (ГП) 1 Архитектура Большая часть логических элементов центральных процессоров (ЦП) отведена для кеширования памяти и контроллера. Это позволяет ядрам ЦП быстро выполнять

Подробнее

Неасимптотическая оптимизация

Неасимптотическая оптимизация Евгений Капун 15 ноября 2012 г. Введение Бывает, что даже асимптотически оптимальные алгоритмы не укладываются в ограничение времени. Это связано с тем, что константный множитель

Подробнее

cs.mipt.ru/wp/?page_id=346

Carnegie Mellon Кеширование памятей Основы информатики. Компьютерные основы программирования goo.gl/x7evf На основе CMU 15-213/18-243: Introduction to Computer Systems goo.gl/q7vgww Лекция 10, 9 апреля,

Подробнее

Модели взаимодействия процессов

Модели взаимодействия процессов С/к. «Параллельное программирование» мехмат, IV курс, группа 11 Практикум 2 Модели взаимодействия процессов 1 / 47 Модели Итеративный Производители Клиенты Равные Особенности

Подробнее

УДК Э.И. Ватутин, канд. техн. наук, доцент, кафедра вычислительной техники, ЮЗГУ ( И.А. Мартынов, аспирант кафедры

УДК 681.3 Э.И. Ватутин, канд. техн. наук, доцент, кафедра вычислительной техники, ЮЗГУ (e-mail: [email protected]) И.А. Мартынов, аспирант кафедры вычислительной техники, ЮЗГУ (e-mail: [email protected])

Подробнее

Физические модели данных

Физические модели данных Логическое представление данных Логическая запись 1 Иванов Иван Саранск Логическая запись 2 Петров Борис Пенза Логическая запись 3 Сидоров Андрей Москва……….. Логическая запись

Подробнее

Способы увеличения производительности

1С Битрикс Содержание 1. Замер 2. Типовые ошибки 3. Возможности хостинга Jeto Информация, размещенная в данном приложении, предназначена только для ознакомления. Копирование, изменение и распространение

Подробнее

Цифровые сигнальные процессоры TMS320C674x

Основы программирования цифровых сигнальных процессоров Цифровые сигнальные процессоры TMS320C674x Конспект лекций РГРТУ, 2018 Лекция 3. Архитектура ЦСП память Данные, участвующие в обработке, и коды программ

Подробнее

Информатика и ИКТ. 9 класс

урока Тема урока 1 Компьютерные сети: виды, структура, принципы функционирования. Аппаратное и программное обеспечение работы глобальных компьютерных сетей. Скорость передачи. 2 Работа в локальной сети

Подробнее

Реализация random write cache на основе красночерных

Федеральное государственное бюджетное образовательное учреждение высшего образования «Санкт-Петербургский государственный университет» Кафедра Системного Программирования Смирнов Михаил Александрович Реализация

Подробнее

Примеры использования CUDA: редукция

Министерство образования и науки Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «Новосибирский национальный исследовательский

Подробнее

Оптимизация программ

Оптимизация программ Оптимизация программы — это изменение компилируемой программы ( в основном переупорядочивание и замена операций) с целью получения более эффективной объектной программы. Используются

Подробнее

Лекция 5. Векторные и матричные системы

Лекция 5 Векторные и матричные системы Вектор AB B A Вектор (в программировании) одномерный массив. Вектор При размещении матрицы в памяти все ее элементы заносятся в ячейки с последовательными адресами,

Подробнее

Лекция 6. Физические модели данных

Лекция 6. Физические модели данных Трехуровневая архитектура данных ANSI/SPARC Концептуальные требования 1 Концептуальные требования 2 Концептуальные требования N Обобщенное концептуальное представление,

Подробнее

Однопроходные алгоритмы

Однопроходные алгоритмы (для тех, кто предпочитает Java, рекомендуем курс «Алгоритмы. Олимпиадное программирование» фирмы «1С», см. http://club.1c.ru) Часто бывает нужно обработать какую-нибудь длинную

Подробнее

Тест по Microsoft Excel

Тест по Microsoft Excel Задание 1 Табличный процессор это 2. набор команд для редактирования содержимого таблиц 1. программный продукт для ввода данных и создания электронных форм 2. специализированная

Подробнее

Классическая теория компиляторов

Классическая теория компиляторов Лекция 6 Теория компиляторов-1. Л.6 1 ОБ ОПЕРАТОРАХ И ВЫРАЖЕНИЯХ Базовые синтаксические категории: программа оператор выражение Например, в языке Си выражения считаются

Подробнее

Основы архитектуры ЭВМ: общая шина

Основы архитектуры ЭВМ: общая шина ЦП ОЗУ ПЗУ Контроллер шины Контроллер видео Контроллер НЖМД Контроллер USB… Шина (Bus) Стандартизованный интерфейс подсоединения устройств Стандартизация по электричеству:

Подробнее

Р.С. Ниязова, А.К. Сексенбаева

Р.С. Ниязова, А.К. Сексенбаева Аппаратные средства реализации механизма виртуальной памяти (Евразийский национальный университет им Л.Н.Гумилева, г. Астана) В этой статье дано описание аппаратных средств

Подробнее

Языки программирования

3. Влияние архитектуры Структура компьютера 1. Данные; 2. Элементарные операции; 3. Управление последовательностью действий; 4. Доступ к данным; 5. Управление памятью; 6. Операционная среда. 2 Данные Хранение:

Подробнее

2015 МГУ/ВМК/СП. Лекция 0x апреля

Лекция 0x16 22 апреля Иерархическая память: промежуточные итоги Разрыв в скорости работы между ЦПУ и оперативной памятью продолжает увеличиваться. Хорошо написанные программы имеют хорошую локальность.

Подробнее

Числовой дешифратор Тур II, задача 1

Числовой дешифратор Тур II, задача У мальчика Вовы с детства наблюдалась тяга к криптографии. Все свое свободное время Вова тратит на придумывание новых методов шифрования. Совсем недавно Вова придумал

Подробнее

стр 3. Файловые сортировки

3. Файловые сортировки К сожалению, алгоритмы сортировок, приведенные в предыдущем разделе, невозможно применять для нных, которые из-за своего размера не помещаются в оперативной памяти компьютера и находятся

Подробнее

ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА

ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА УДК 681.3 DOI: 10.17586/0021-3454-2015-58-2-104-108 П. Ю. ТКАЧЕВ, Д. Б. БОРЗОВ МЕТОД РАСПАРАЛЛЕЛИВАНИЯ ЦИКЛОВ СО СЧЕТЧИКОМ Разработан метод распараллеливания циклов со счетчиком

Подробнее

Основные функции микропроцессора :

Архитектура МП Основные понятия Микропроцессор — это программно-управляемое устройство, предназначенное для обработки цифровой информации и управления процессами этой обработки, выполненной в виде одной

Подробнее

1. Назначение и состав.

ПРОМЫШЛЕННО-КОММЕРЧЕСКАЯ КОМПАНИЯ МИЛАНДР Debug1886 Интегрированная среда разработки для внутрисхемной отладки и симуляции программ. Руководство пользователя. 1. Назначение и состав. Debug1886 — это интегрированная

Подробнее

Распределение памяти

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

Подробнее

Блок 1. Работа с массивами и матрицами.

Блок 1. Работа с массивами и матрицами. Ученик должен знать: понятие регулярного типа; оператор описания массива; способы описания одномерного и двумерного массивов; идентификацию элементов массива. Ученик

Подробнее

Хит и Мисс рацион в кэш-памяти и среднее время расчета



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

Вопрос: в определенной системе время доступа к основной памяти составляет 100 нс. Кэш в 10 раз быстрее основной памяти и использует протокол записи. Если коэффициент попадания для запроса на чтение равен 0.92 и 85% из запросов памяти, генерируемых CPU, предназначены для чтения, а остальные — для записи; тогда среднее время рассмотрения как запросов на чтение, так и запросов на запись равно

а) 14.62ns

б) 348.47ns

c) 29.62ns

г) 296.2ns

Моя работа ::::

Ну, время доступа к памяти = 100нс

время доступа к кэшу составит = 10 НС (в 10 раз быстрее)

In order to find avg time we have a formula

Tavg = hc+(1-h)M

   where h = hit rate
     (1-h) = miss rate
       c   = time to access information from cache
        M  = miss penalty  (time to access main memory)

Операция сквозной записи: расположение кэша и расположение основной памяти обновляются одновременно.

Дано, что 85% запрос, генерируемый CPU, является запросом на чтение, а 15%-запросом на запись.

Tavg = 0.85(avg time for read request)+ 0.15(avg time for write request)
     = 0.85(0.92*10+0.08*100)+0.15(avg time for write request)

//* 0.92-это коэффициент попадания для запроса на чтение, но коэффициент попадания для запроса на запись не задан ??

Если я предположу, что коэффициент попадания для запроса на запись такой же, как и коэффициент попадания для запроса на чтение, то,

  = 0.85(0.92*10+0.08*100)+0.15(0.92*(10+100)+0.08*100)
  =31 ns

Если я предположу, что коэффициент попадания равен 0% для запроса на запись, то,

  = 0.85(0.92*10+0.08*100)+0.15(0*110+1*100)
  =29.62 ns
memory computer-science cpu-usage computer-architecture
Поделиться Источник siddstuff     06 мая 2013 в 12:30

3 ответа


  • производительность кэш-памяти

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

  • Как очистить кэш chrome в памяти?

    Я разрабатываю расширение в chrome и пытаюсь выполнить действие каждый раз, когда пользователь ищет в Google. В настоящее время я использую chrome.webRequest onBeforeRequest слушателя. Он отлично работает в большинстве случаев, но некоторые запросы выполняются через кэш и не выполняют никаких…



3

Ваше второе предположение верно.

С помощью сквозного кэша записи он немедленно записывает измененные блоки в память, а затем на диск. Поскольку время доступа к диску не задано, оно исключается из уравнения. Мои обозначения немного отличаются, но я опубликую их таким образом для будущих читателей. Я использовал обозначения, приведенные в книге Уильяма Столлингса » Операционные системы: внутренние компоненты и принципы проектирования«.

Дано :

Tm = 100ns
Tc = 10ns /* 10x faster than Tm */ 
Hr = 0.92 /* Hit rate reading */
85% reading => 15% of the time writing

Решение:

The effective access time for reading:
Te_r = Hr * Tc + (1-Hr)Tm = 0.92*10 + (1 - 0.92)100 = 9.2 + 8 = 17.2

The effective access time for writing, is determined from the Hit rate Hw,
which is always 0, because the data must be immediately written onto the 
memory.
Te_w = Hw * Tc + (1-Hw)Tm = 0*10 + (1 - 0)100 = 100

Taking into account the percentage:
0.85*17.2 + 0.15*100 = 14.62 + 15 = 29.62

                                                                    Q.E.D

Поделиться dim8     28 марта 2016 в 09:50



2

Среднее время доступа с учетом только чтения = 0.92*10 + 0.08*100 = 17.2 нс.

Среднее время доступа с учетом только записи = 100 нс (потому что при сквозной записи вам нужно вернуться в память для обновления, даже если это попадание или промах. если вы предполагаете, что коэффициент попадания = 0.5 и промах = 0.5, то 0.5*100 + 0.5*100 = 1*100)

Таким образом, общее время доступа как для чтения, так и для записи будет равно — 0.85*17.2 + 0.15*100 = 14.62 + 15 = 29.62 нс

**you не может предполагать, что коэффициент попадания для записи такой же, как и коэффициент попадания для чтения. для запроса на запись (запись через), что бы ни произошло, вы должны записать обратно в память. таким образом, время доступа к записи будет равно времени доступа к памяти.

Поделиться Shubham Gupta     19 мая 2014 в 14:45



0

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

Tavg(for write)=Hw*Tm +(1-Hw)*Tm = Tm

Hw=коэффициент попадания для записи, Tm=Время доступа к основной памяти

в этой формуле в обоих случаях попадания в кэш & промаха мы можем обновлять и считывать данные одновременно в само время Tm, так как обычно Tm>>Tc. Таким образом, Tc для чтения можно игнорировать.

Следовательно, вам не нужно знать коэффициент попадания для записи для этого вопроса. и ответ будет 29.62ns

Поделиться hashPJ     08 июля 2013 в 11:46


Похожие вопросы:


Основы организация кэш-памяти второго уровня и Windows Azure кэш

Мы запускаем наше приложение в Windows Azure. Мы испытываем проблемы с производительностью с SQL Azure, поэтому мы рассматриваем возможность реализации кэша второго уровня. С ORM, который мы в…


Кэш в памяти и DiskCache для стратегий изображений

Теперь я разрабатываю приложение для чтения новостей, такое как BBC news iOS. смотрите в новостях Би -би-си В моем приложении я должен загрузить изображение с сервера и показать его в поле зрения,…


Путаница В Кэш-Памяти

Может ли кэш CPU по-прежнему использоваться программистом для использования памяти, когда он работает в режиме UC? Или это невозможно, потому что программист не может обратиться к кэш-памяти? Я…


производительность кэш-памяти

у меня просто есть общий вопрос о кэш-памяти. Как программа будет плохо работать в системе на основе кэша ? , поскольку кэш-память хранит адреса из основной памяти, которые запрашиваются, а также…


Как очистить кэш chrome в памяти?

Я разрабатываю расширение в chrome и пытаюсь выполнить действие каждый раз, когда пользователь ищет в Google. В настоящее время я использую chrome.webRequest onBeforeRequest слушателя. Он отлично…


Среднее время доступа с пропусками кэша

Время доступа к памяти составляет 1 наносекунду для операции чтения с попаданием в кэш, 5 наносекунд для операции чтения с пропуском в кэш, 2 наносекунды для операции записи с попаданием в кэш и 10…


CPU время попадания в кэш

Я читаю computer organization and design the hardware/software interface в испанском издании, и я столкнулся с упражнением, которое я не могу решить. Упражнение посвящено иерархии памяти, в…


Расчет среднего времени доступа к памяти на основе следующих данных?

Рассмотрим следующую информацию Предположим, что кэш физически адресован TLB частота попадания равна 95%, при времени доступа = 1 цикл Скорость попадания в Кэш составляет 90%, с временем доступа…


Конфликтная Мисс В / С обязательная Мисс

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


Вычислите среднее время загрузки

Компьютер имеет кэш, основную память и жесткий диск. Если ссылочное слово находится в кэше, то для доступа к нему требуется 15 НС. Если он находится в основной памяти , но не в кэше, то для загрузки…

Распределенная общая память (DSM — Distributed Shared Memory) / Хабр

Виртуальная память для распределенных вычислительных систем

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

Производители процессоров не предлагают решений данной задачи, а идут путем увеличения числа ядер и интерфейсов памяти в серверных решениях. В настоящий момент задача доступа решается посредством эмуляции прямого доступа в память с использованием сетевых интерфейсов (RDMA).

Внимание:

Все идеи и алгоритмы, описываемые в данной статье, являются результатом моей независимой и полностью самостоятельной интеллектуальной деятельности. Как автор, разрешаю свободно использовать, изменять, дополнять все идеи и алгоритмы любому человеку или организации в любых типах проектов при обязательном указании моего авторства (Балыбердин Андрей Леонидович [email protected]).

Предлагаю механизм работы современной виртуальной памяти расширить в сторону виртуализации памяти для всего дата-центра целиком. В качестве линии передачи данных между процессорами предлагаем использовать оптическое волокно для линий связей больше метра и электрический интерфейс для меньших расстояний (100G на пару, для 12 пар 1.2Т). Современные трансиверы позволяют достигать скоростей передачи до 400G (ближайшей перспективе до 800G), при этом максимальная пропускная способность PCI-E 5.0 500G, а пропускная способность интерфейса памяти DDR4 200G. Получается, что полное задействование всех имеющихся интерфейсов не позволяет полностью использовать производительность даже одного оптического интерфейса, поэтому данный механизм необходимо интегрировать именно в процессор, а не сделать в виде устройства на шине PCI с доступом в основную память.

Расположение виртуальной памяти

Модуль виртуальной память должен быть непосредственно в процессоре и работать с кэш-памятью практически со скоростью процессорных ядер (архитектура COMA). Кроме того, необходимо учитывать, что далеко не все данные необходимо сохранять в локальной оперативной памяти, оптимальнее произвести обработку прямо в кэш-памяти, а результат отправить в кэш другого ядра для дальнейшей обработки, не отправляя их в «бутылочные горлышки» медленных интерфейсов. Такой подход позволит строить очень эффективные цепочки конвейерной обработки, собирать данные, считываемые с большого числа интерфейсов DDR памяти в кэш-память процессоров или контроллеров DSM, где находится начало конвейера, далее передавать через промежуточные обрабатывающие звенья, до конца и уже там производить обратное сохранение результата в DDR. Появится возможность отделить основную оперативную память от процессора, по примеру СХД.

Количество каналов

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

Минимальные требуемые характеристики

По производительности интерфейса этот минимум соответствует скорости доступа одного канала DDR4 памяти, иначе особого смысла нет. Время доставки, должно быть стабильным, предсказуемым и в основном определяться скоростью распространения сигнала в кабелях связи, данное требование является ключевым для систем с большим числом промежуточных коммутаторов (гиперкуб). Скорость распространения сигнала в кабеле уже не ускорить — скорость света предел для распространения информации и это выдвигает на первый план требование к компактности вычислительной системы. С другой стороны уменьшать вычислительную систему бесконечно нельзя, появятся ограничения по отводу выделяемого тепла. Оптимальной будет система где отдельные процессоры отделены друг от друга радиаторами с жидкостным охлаждением (воздушное делает радиаторы слишком большими).

Для системы с временем доступа к разделяемой памяти сопоставимой с локальной динамической памятью, максимум производительности соответствует квадрату или кубу со стороной 3 метра для задержки доступа к первому элементу не более 50нс, в этом случае время доступа в кэш любого процессора не будет больше времени доступа в локальную память. Современная динамическая память, хоть и имеет высокие скорости передачи данных, но доступ к новой строке медленный и особого прогресса в этом параметре нет (всего в 2 раза за 20 лет).

Устройство виртуальной памяти с точки зрения программиста

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

Устройство распределенной памяти

Для понимания проблемы DSM желательно прочитать это.

Предлагаю такой вариант: Модель консистентности: Последовательная (Все процессы видят все записи разделяемых данных в одном и том же порядке).

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

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

Реализация виртуальной общей памяти с точки зрения аппаратуры

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

Сетевой основой выбрана свободно распространяемая коммуникационная технология: «Синхронная символьная коммутация» (разработанная Балыбердиным А.Л. [email protected]).

Данная технология соответствует всем заявленным характеристикам и имеет относительно небольшие требования к размеру аппаратуры. Описание примененной коммуникационной парадигмы ( https://habr.com/ru/post/512652/ ).

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

Возможность непосредственно задать маршрут и скорость передачи данных при контролируемой задержке передачи, позволяет оптимизировать потоки данных и решить давно востребованную, но не решенную задачу дезагрегации оперативной памяти (примерно как дисковые хранилища СХД). Можно создавать процессоры с малым размером оперативной памяти (на одном кристалле с процессором), построенной на основе статического ОЗУ (сейчас это кэш).

Повышения производительности за счет лучшей загрузки АЛУ

Сети символьной коммутации позволят производить оптимизацию потоков передачи данных и взаимного расположения задействованных задачей вычислительных ядер. Оперативность управления потоками данных в совокупности с высокой пропускной способностью современных трансиверов позволит загрузить исполнительные устройства процессоров до уровня пиковой производительности на постоянной основе, а не в отдельные моменты времени определяемые размером КЭШ памяти.

Распределенный по отдельным процессорам вычислительный конвейер может повысить производительность в несколько раз. Есть статистика, что на каждые пять исполняемых команд, требуется одно обращение в оперативную память за обрабатываемыми данными. Если считать, что одно 32х разрядное число считывается из памяти за 200 ps (25E9 команд в секунду), а одно 400G сетевое соединение позволяет его получить за 80 ps, то это позволит поддерживать в 2.5 раза больший темп исполнения команд (60E9 команд в секунду).

Если задействовать все 6 каналов, то это позволит загрузить в вычислитель практически в пиковой производительности на постоянной основе. Современная оперативная память является достаточно медленным устройством (относительно процессора), и символьная сеть позволит суммировать пропускные способности многих интерфейсов памяти для «запитывания» точек входа таких вычислительных конвейеров, что существенно увеличит производительность вычислительной системы целиком.

Хочу отдельно выделить интересный момент : Максимальная производительность на современных процессорах часто достигается только при правильном расположении данных в памяти, а сеть с синхронной символьной коммутацией может это делать без практически дополнительных затрат. Причем возможно сразу делать несколько различных раскладок, если данные используются в нескольких частях программы и не только для одного конкретного процессора. Есть возможность следить за «комплектностью» данных и формировать сигнал вызова нужного обработчика, иными словами выполнять аппаратную поддержку параллельной обработки.

Краткое описание работы распределенной виртуальной памяти

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

Если локальный процессор выполняет запись данных в разделяемую память, то сначала данные помещаются в буфер местного контроллера DSM, далее он формирует и передает запрос на изменение данных контроллеру владеющему оригиналом данных. Контроллер «хозяин», получив запрос, помещает его в общую очередь изменений (формирует одинаковую для всех последовательность изменений) и используя единый и очень быстрый канал рассылает уведомления всем владельцам копий. Получив уведомление, владелец копии обновляет данные в своем кэше (даже тот кто инициировал исходную запись). Для куба размером 3 метра, теоретическое полное время составляет 50нс. Если использовать префикс LOCK, то можно очень быстро (50нс) разрешать ситуации входа в критические секции для всей вычислительной системы целиком.

Влияние задержки передачи данных на производительность вычислительной системы

Есть еще важное соотношение, известное существенно меньше закона Амдала :

«Степень распараллеливания задачи равна корню из отношения времени исполнения на одном процессоре к суммарному времени затрачиваемому на передачу данных»

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

Цели проекта

Создание прототипа универсальной сети на базе недорогой FPGA матрицы с достаточным число трансиверов ) в формате сетевой карты с интерфейсом PCI-E.

Подтвердить предположения о возможности новой сетевой технологии (ССИ) на реальной вычислительной системе.

Получить реально работающее оборудование. Уровень скорости 240 Гбит при относительно скромном ценнике позволяет говорить о реальности применения ?

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

И еще впервые с 60х годов показать, что наша страна и наши ученые и инженеры что то стоят как самостоятельные игроки в области высокопроизводительных вычислений. (Шучу — в нашей стране нет такой науки).

Ожидаемые результаты

Для системы из 1000 процессоров и максимальном числе промежуточных коммутаторов 20.

Среднее ожидаемое время доставки:

(Размер посылки в символах) * (Время передачи символа) + (Длина кабеля связи) * (Скорость света в кабеле) + (Число промежуточных коммутаторов) * (Время передачи символа.)

Максимальное ожидаемое время доставки:

(Размер посылки в символах) * (Время передачи символа) + (Длина кабеля связи) * (Скорость света в кабеле) + (Число промежуточных коммутаторов) * (Время передачи символа) * 2.5

Чтение (запись) страницы размером 4кБ в монопольном режиме (пиковая производительность).

G10 3948 нс

G100 382 нс

G400 95 нс

Чтение (запись) страницы размером 4кБ в режиме средней загрузки сети

G10 9870 нс

G100 1035 нс

G400 296 нс

Чтение (запись) от 8 до 32 бит в монопольном режиме

G10 328 нс

G100 69 нс

G400 47 нс

Чтение (запись) от 8 до 32 бит в режиме средней загрузке сети

G10 760 нс

G100 112 нс

G400 50 нс

Время задержки стремится к 40 нс, ко времени распространения света по оптическому волокну.

* Средняя загрузка сети, когда для передачи обновлений выделяется только 30% от максимальной производительности физического канала.

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

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

Наиболее эффективным является алгоритм замещения на основе наиболее дав­него использования (LRU — Least Recently Used), при котором замещается та стро­ка кэш-памяти, к которой дольше всего не было обращения. Проводившиеся исследования показали, что алгоритм LRU, который «смотрит» назад, работает до­статочно хорошо в сравнении с оптимальным алгоритмом, «смотрящим» вперед.

Наиболее известны два способа аппаратурной реализации этого алгоритма.

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

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

Другой возможный алгоритм замещения — алгоритм, работающий по принци­пу «первый вошел, первый вышел » (FIFO — First In First Out). Здесь заменяется строка, дольше всего находившаяся в кэш-памяти. Алгоритм легко реализуется с помощью рассмотренной ра*нее очереди, с той лишь разницей, что после обраще­ния к строке положение соответствующей ссылки в очереди не меняется.

Еще один алгоритм — замена наименее часто использовавшейся строки (LFU — Least Frequently Used). Заменяется та строка в кэш-памяти, к которой было мень­ше всего обращений. Принцип можно воплотить на практике, связав каждую стро­ку со счетчиком обращений, к содержимому которого после каждого обращения добавляется единица. Главным претендентом на замещение является строка, счет­чик которой содержит наименьшее число.

Простейший алгоритм — произвольный выбор строки для замены. Замещаемая строка выбирается случайным образом. Реализовано это может быть, например, с помощью счетчика, содержимое которого увеличивается на единицу с каждым тактовым импульсом, вне зависимости от того, имело место попадание или про­мах; Значение в счетчике определяет заменяемую строку в полностью ассоциатив­ной кэш-памяти или строку в пределах модуля для множественно-ассоциативной кэш-памяти. Данный алгоритм используется крайне редко.         .            . .

что это такое и как с ним работать – простыми словами

Что такое кэш

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

В чем заключается принцип работы кэша

Большая часть ПО сохраняет свои рабочие файлы в архиве или загружает их на сетевой сервер. Когда пользователь работает с программой, ему требуется некоторое время, чтобы извлечь эти данные. Ускорить процесс можно, сохраняя временные рабочие файлы в кэш, тем самым обходя процедуру разархивации или скачивания. Впоследствии, при очередном обращении программы к этим данным они будут загружаться оперативнее. Чаще всего временные файлы сохраняются в оперативной памяти. Это обусловлено присущей ей высокой скоростью считывания и записи, благодаря чему информация из нее извлекается очень быстро.

Какие существуют способы кэширования

  • Аппаратный. В этом случае временные файлы записываются на само устройство в специально отведенные для этого участки памяти. Например, аппаратное кэширование в центральном процессоре выполняется в трех видах cache-памяти – L1, L2 и L3. Это позволяет программам быстро извлечь их при необходимости без обращения к иным устройствам в системе.
  • Программный. Кэширование этого типа осуществляется в выделенный участок памяти в операционной системе (как правило, он имеет вид обычной папки). Расположение кэша у различных программ может быть разным. Например, браузеры сохраняют свои временные файлы в свои папки в разделе Document and Settings.

Независимо от того, какой из способов кэширования применяется, этот процесс обеспечивает:

  • быстрый доступ к рабочим файлам;
  • ускоренную загрузку ПО;
  • экономию трафика;
  • эффективное использование системных ресурсов;
  • повышенную производительность аппаратного и программного обеспечения.

Что такое кэш-память

Кэш-память представляет собой интегрированный в устройство выделенный раздел памяти для сохранения в нем временных рабочих данных и быстрого их извлечения. Она имеется в процессорах и иных устройствах (оперативной памяти, жестком диске) и обеспечивает существенный рост производительности и скорости обработки информации за счет оперативного доступа к нужным файлам. На флеш-накопителях (SSD) ее размер составляет до 4 Гб, на хард-дисках (HHD) – до 256 Мб.

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

Как происходит очистка кэша

Удаление временных рабочих файлов в ОС выполняется, за редким исключением, автоматически и не нуждается в контроле пользователя. Например, для очистки кэша браузера достаточно одновременно нажать комбинацию клавиш Ctrl + F5 на открытой интернет-странице.

В других программах удаление временных данных осуществляется в настройках. Для этого необходимо зайти в соответствующий раздел меню и очистить кэш вручную. В операционной системе Windows таким образом выполняется очистка, как правило, только у браузеров. В iOS на iPhone или iPad данный процесс выполняется в полностью автоматическом режиме, а вот пользователям устройств с ОС Android часто нужно осуществлять его вручную. Однако с выходом каждой новой версии этой операционной системы процедура очистки временных файлов становится более понятной и автоматизированной.

Нужно ли чистить кэш

Иногда кэширование файлов работает некорректно. Из-за этого, например, может загружаться старый контент вместо нового. Зачастую такое случается именно в браузерах. По этой причине кэш необходимо периодически подчищать. Если этого не сделать, то при обновлении данных на сайте (например, при загрузке новых фотографий или изменении стилей) браузер может закачать устаревшую версию контента.

Для его очистки и загрузки актуального содержимого достаточно применить на активной интернет-странице комбинацию Ctrl + F5, после чего она перезагрузится с обновленным наполнением.

В заключение

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

Другие термины на букву «К»

Все термины SEO-Википедии

Теги термина

Многоуровневая организация кэша — GeeksforGeeks

Кэш — это оперативная память, используемая ЦП для сокращения среднего времени, необходимого для доступа к памяти.
Многоуровневые кэши — это один из методов повышения производительности кэша за счет уменьшения «MISS PENALTY» . Штраф за промах относится к дополнительному времени, необходимому для переноса данных в кэш из основной памяти всякий раз, когда в кэше имеется «промах» .
Для ясного понимания давайте рассмотрим пример, в котором ЦП требует 10 ссылок на память для доступа к требуемой информации, и рассмотрим этот сценарий в следующих трех случаях проектирования системы:

Случай 1: проектирование системы без кэш-памяти


Здесь ЦП напрямую связывается с основной памятью, и кеши не задействуются.
В этом случае ЦП необходимо 10 раз обратиться к основной памяти для доступа к требуемой информации.

Случай 2: Проектирование системы с кэш-памятью

Здесь ЦП сначала проверяет, присутствуют ли нужные данные в кэш-памяти или нет, то есть есть ли «попадание» в кеше или «промахивается» в кеше. Предположим, что в кэш-памяти имеется 3 промахов, тогда доступ к основной памяти будет осуществлен только 3 раза.Мы видим, что здесь штраф за промах уменьшен, потому что доступ к основной памяти осуществляется реже, чем в предыдущем случае.

Случай 3: Проектирование системы с многоуровневой кэш-памятью


Здесь производительность кэша дополнительно оптимизируется за счет введения многоуровневых кешей. Как показано на рисунке выше, мы рассматриваем двухуровневый дизайн кэша. Предположим, что в кэш-памяти L1 имеется 3 промахов и из этих 3 промахов в кэш-памяти L2 имеется 2 промахов , тогда доступ к основной памяти будет осуществлен только 2 раза.Понятно, что здесь штраф за промах значительно снижен, чем в предыдущем случае, тем самым улучшая производительность кэш-памяти.

ПРИМЕЧАНИЕ:
Из трех приведенных выше случаев видно, что мы пытаемся уменьшить количество ссылок на основную память и, таким образом, уменьшить штраф за промах, чтобы улучшить общую производительность системы. Также важно отметить, что в многоуровневой схеме кэширования кэш L1 прикреплен к процессору и имеет небольшой размер, но работает быстро.Хотя кэш L2 прикреплен к основному кешу, то есть кэшу L1, он больше по размеру и медленнее, но все же быстрее, чем основная память.

 Эффективное время доступа = частота совпадений * время доступа к кеш-памяти
                      + Коэффициент промахов * Время доступа к нижнему уровню

  

Среднее время доступа для многоуровневого кэша: (T avg )

T avg = H 1 * C 1 + (1 — H 1 ) * (H 2 * C 2 + (1 — H 2 ) * M)

где
h2 — частота попаданий в кеш L1.
h3 — частота попаданий в кэш L2.
C1 — время доступа к информации в кэшах L1.
C2 — это штраф за промах для передачи информации из кэша L2 в кэш L1.
M — штраф за промах при передаче информации из основной памяти в кэш L2.

Пример:
Найдите среднее время доступа к памяти для процессора с временем тактового цикла 2 нс, частотой промахов 0,04 на инструкцию, пропуском штрафа в 25 тактовых циклов и временем доступа к кеш-памяти (включая обнаружение попаданий ) 1 такт.Также предположим, что штрафы за промах при чтении и записи одинаковы, и игнорируем другие задержки записи.

Решение:

Среднее время доступа к памяти (AMAT) = Время обращения + Частота промахов * Штраф за промах.

Hit Time = 1 тактовый цикл (Hit time = Hit rate * time access time), но здесь время Hit задается напрямую, так что

Miss Penalty = 0,04

Miss Penalty = 25 тактовых циклов (это время, затраченное вышеупомянутым уровень памяти после попадания)

итак, AMAT = 1 + 0.04 * 25
AMAT = 2 такта

согласно вопросу 1 такт = 2 нс

AMAT = 4ns

Расчет эффективного времени доступа к кэш-памяти

Это тот случай, когда все, что вам нужно сделать, — это найти определения и следовать им. Больше вам нечего знать семантически. Вам должно быть (примерно) ясно, что на самом деле происходит в физическом мире. Это вопрос о том, как мы переводим наше понимание с использованием соответствующей общепринятой терминологии.Это вопрос о том, как мы интерпретируем данные условия в исходных задачах.

(Кстати, как правило, именно исходная задача / упражнение несет ответственность за то, чтобы прояснить точное значение каждого данного условия. Заметным исключением является вопрос собеседования, в котором вы должны выкопать различные предположения.)

Давайте возьмем определения, данные в разделе «Производительность кэша» от gshute в UMD, как указано в вопросе, что согласуется с записью в Википедии о среднем времени доступа к памяти.

Время доступа к кэшу

Доля или процент обращений, которые приводят к попаданию, называется частотой попаданий.
Доля или процент обращений, которые привели к пропуску, называется коэффициентом пропусков.
Отсюда следует, что процент попаданий + процент промахов = 1.0 (100%).
Разница между временем доступа нижнего уровня и временем доступа к кэш-памяти называется штрафом за промах.
Эффективное время доступа — это стандартное эффективное среднее значение.

  эффективное время доступа = частота совпадений * время доступа к кешу
                      + коэффициент промахов * время доступа нижнего уровня
  

Штраф за промах определяется как разница между временем доступа нижнего уровня и временем доступа к кэш-памяти.Тогда приведенное выше уравнение становится

  эффективное время доступа = время доступа к кешу + частота промахов * штраф за промах
  

Поскольку «t1 означает время для доступа к L1, а t2 и t3 означают (пропущенный) штраф для доступа к L2 и основной памяти, соответственно», мы должны применить вторую формулу выше дважды. То есть

  Teff = t1 + (1-h2) [t2 + (1-h3) t3] = 32
  

Для обсуждения, если мы предположим, что t2 и t3 означают время доступа к L2 и основной памяти , включая время, потраченное на проверку и пропуск более быстрых кешей , соответственно, то мы должны применить первую формулу выше дважды.То есть

  Teff = h2 * t1 + (1-h2) * h3 * t2 + (1-h2) * (1-h3) * t3 = 24.
  

Снова ради обсуждения, если мы предположим, что t2 и t3 означают время доступа к L2 и основной памяти , непосредственно предполагая, что кешей нет вообще , соответственно, тогда мы должны заявить, что информации недостаточно для вычисления разумного отвечать. Или, если мы можем предположить, что требуется относительно незначительное время, чтобы обнаружить, что это промах в $ L1 $ и $ L2 $ (что может быть верным, а может и нет), тогда мы могли бы применить первую формулу выше, дважды.

Можно сказать, что в этом ответе нет ничего нового, кроме того, что задано в вопросе. Я бы с готовностью согласился. Все, что я сделал, это в основном разъяснил то, что вы знали, а также показал, как выбрать правильное определение или формулу для применения.


Теперь, когда на вопрос дан ответ, возникает более глубокий или «настоящий» вопрос. Эти две формулы верны / точны / имеют смысл?

Картина доступа ЦП к памяти намного сложнее, чем то, что воплощено в этих двух формулах.Фактическое среднее время доступа зависит от других факторов [1]. Однако мы могли бы использовать эти формулы, чтобы получить общее представление о ситуации.

Архитектура компьютера

— сомнения относительно коэффициентов попадания в кэш и времени доступа

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

Ваши формулы неверны как для Method 1 , так и для Method 2 . При доступе к некоторому уровню памяти вы ВСЕГДА получаете доступ к этому уровню, а не с вероятностью! Объяснение выглядит примерно так: вы ДОСТУПИТЕ к $ L1 $, если вы ПРОПУСТИТЕ (с некоторой вероятностью), вы перейдете в $ L2 $. На $ L2 $ вы снова делаете ДОСТУП, и если вы ПРОПУСКАЕТЕ (с некоторой вероятностью), вы переходите на $ L3) …

Итак, Method 1 с вашей первой проблемой: $$ [T1] +0.1 ([2 * T1] +0.1 * [3 * T1]) = 1,23 [T1] $$

и Метод 2 для первой задачи: $$ [T1] +0,1 ([T1 + 2 * T1] +0,1 [T1 + 2 ∗ T1 + 3 ∗ T1]) = 1,36 [T1] $$

Итак, теперь взглянув на вторую проблему, вы можете решить ее с помощью Method 1 :

Новый метод 1

  Эффективное время доступа = 20 + 0,2 * (120) = 44 нс
Увеличьте на 40 нс, поэтому новое время = 84 нс
84 = 20 + (1ч) * 120
Коэффициент попадания = 0,467
  

Обратите внимание: здесь я предположил, что вы ошиблись с ответом $ (C) $ в описании проблемы (это не $ 0.4467 $, а это 0,467 $).

Теперь, если в формулировке задачи определены штрафы за промах, можно использовать Метод 2 . Штраф за промах просто говорит, что если вы не получаете результат на вашем текущем уровне, вы должны скопировать его с верхнего уровня. Теперь предположим, что штраф за промах на втором уровне составляет 300 нс (это означает копирование содержимого на уровень 1 и доступ к нему). Все остальное остается прежним. Расчеты пойдут:

Новый метод 2

  Эффективное время доступа = 20 + 0.2 * (120 + 0,2 * 300) = 56 нс
Увеличьте на 40 нс, поэтому новое время = 96 нс
96 = 20 + (1-час) * (120+ (1-час) * 300)
Коэффициент попадания = 0,65840
  

Еще одно предостережение … Вам нужно использовать ту же формулу для расчета среднего времени доступа, если вы выбрали один метод. (В методе 2 вы рассчитали время доступа с помощью метода 2 , а затем вычислили новый коэффициент совпадений с помощью метода 1 )

Итак, как узнать, какой метод выбрать? Из описания проблемы! Если вам назначен штраф за промах, вы выбираете второй подход.Если у вас нет штрафа за промах, то вы используете первый подход.

Сокращение времени доступа к памяти с помощью кешей

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

  1. Получить инструкцию
  2. Команда декодирования и операнды регистра выборки
  3. Выполнение арифметических вычислений
  4. Возможный доступ к памяти (чтение или запись)
  5. Результаты обратной записи в регистр

Для выполнения каждого шага требуется как минимум один такт процессора.Однако для шагов 1 и 4 доступ к основной памяти может занять гораздо больше времени, чем один цикл. Современные процессоры обычно имеют тактовый цикл 0,5 нс, в то время как доступ к основной памяти составляет 50 нс или более. Таким образом, доступ к основной памяти очень дорог, более 100 тактов. Чтобы добиться хорошей производительности процессора, необходимо сократить среднее время выборки инструкций и доступа к данным из памяти.

Предположим, что каждая инструкция должна быть извлечена из памяти, каждая инструкция обращения к памяти требует одного обращения к памяти, а одна треть инструкций является ссылкой на память, а шаг 4 для инструкции, которая не имеет ссылки на память, занимает один цикл.Средние часы на инструкции (CPI) могут быть вычислены по следующей формуле:

 CPI = (стоимость шага 1) + (стоимость шагов 2,3,5) + (стоимость шага 4)
    = 100 циклов + 3 * (1 цикл) + ((1 цикл * 2/3) + (100 циклов * 1/3))
    = 100 циклов + 3 цикла + (0,6667 цикла + 33,33 цикла)
    = 137 циклов на команду 

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

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

Если большая часть обращений удовлетворяется кешем (попадание в кэш), то количество циклов на инструкции может быть значительно сокращено. Предполагая, что 95% ссылок на память удовлетворяются кешем, а доступ к кеш-памяти осуществляется за один цикл, формула CPI принимает следующий вид:

 CPI = (стоимость шага 1) + (стоимость шагов 2,3,5) + (стоимость шага 4)
    = (1 цикл * (0.95) + 100 циклов * (1-0,95)) + (3 цикла) + ((1 цикл * (2/3 + 0,95 /3)) + (100 циклов * (1-0,95)  1/3))
    = (0,95 цикла + 5 циклов) + 3 цикла + (0,9833 цикла + 1,667 цикла)
    = 5,95 цикла + 3 цикла + 2,6533 цикла
    = 11,60 циклов 

Последний расчет, приведенный выше, показывает, что кэш оказывает огромное влияние на производительность процессора. В этом примере кэш позволяет процессору работать более чем в десять раз быстрее. Вот почему каждый современный процессор включает в себя кэш. Без кеша не имеет смысла иметь тактовую частоту процессора, работающую на гигагерцовых частотах.Процессор будет просто ждать завершения доступа к памяти. 11.60 циклов на инструкцию по-прежнему немного выше, чем хотелось бы. Давайте пересчитаем среднюю стоимость инструкции, если кэш удовлетворяет 99% выборок инструкций и обращений к памяти данных.

 CPI = (стоимость шага 1) + (стоимость шагов 2,3,5) + (стоимость шага 4)
    = (1 цикл * (0,99) + 100 циклов * (1-0,99)) + (3 цикла) + ((1 цикл * (2/3 + 0,99 + 0,99 /3)) + (100 циклов * (1-0,99)  1 / 3))
    = (0,99 цикла + 1 цикл) + 3 цикла + (0.9966 циклов + 0,3333 цикла)
    = 1,99 цикла + 3 цикла + 1,3299 цикла
    = 6,3199 циклов 

Поскольку стоимость доступа к основной памяти настолько высока, улучшение показателя попадания в кэш на 4% с 95% до 99% почти вдвое снижает средние тактовые циклы, необходимые для выполнения инструкции. Максимальное увеличение процента обращений к памяти, которым может удовлетворять кэш, необходимо для получения хорошей производительности современных микропроцессоров. Даже повышение скорости попадания в кэш на 1% может значительно повысить производительность процессора.

Работа кэша спроектирована так, чтобы быть невидимой для нормального кода приложения, и оборудование управляет данными в кэше. Оборудование управляет кешем как несколькими отдельными строками кеша. Каждая строка кэша состоит из двух частей: тега, который определяет, какая часть основной памяти обрабатывается в данный момент, и фактические данные для этой области памяти. Тег — это часть адреса, достаточная для того, чтобы оборудование могло определить, содержит ли строка в кэше содержимое для конкретной области памяти.Когда процессор запрашивает доступ к области памяти, которая еще не находится в кэше, кэш очищает одну из занятых строк кэша, записывая свое измененное содержимое обратно в память, если требуется, чтобы освободить место для вновь выбранных данных.

Чтобы ускорить поиск и выбор соответствующей строки кэша для доступа к памяти, строки кэша сгруппированы в наборы. Каждый набор обычно содержит от одной до восьми строк кэша. Часть адреса памяти используется для выбора набора в кэше, который должен содержать этот адрес памяти.Ограничение количества строк кэша для поиска упрощает схему сопоставления и логику для определения, какую строку кэша вернуть в память. Это позволяет кэшу работать с более высокой скоростью и не замедлять работу процессора.

Еще одна уловка при проектировании кэша, которую используют разработчики процессоров, состоит в том, чтобы заставить каждую строку кэша содержать несколько байтов (обычно от 16 до 256 байтов), что снижает затраты на байт учета строк кэша. Наличие нескольких байтов в строке кэша также может повысить производительность за счет устранения промахов кеша для этих соседних байтов при последующих обращениях к памяти.

Кэш-память

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

  • пропускная способность
  • конфликтных промахов
  • ложный обмен
  • принудительная очистка и аннулирование кеша

Пропускная способность

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

Конфликт пропущенных

Каждый адрес отображается в один набор в кэше, и каждый набор в кэше будет иметь только ограниченное количество строк кэша, обычно от одной до восьми строк. При определенных шаблонах доступа к памяти активное количество адресов памяти, отображаемых в один и тот же набор, будет превышать количество строк кэша в наборе. Строки в наборе необходимо будет удалить из набора кешей, чтобы освободить место для более поздних обращений, что вызовет пропуски конфликта.Это отличается от пропусков емкости тем, что проблема вызвана ограниченным количеством строк в наборе, а не общим размером кеша.

Часть адресных битов используется для определения того, какому набору принадлежит конкретный адрес. На рисунке ниже показано, как делятся биты адреса. Например, процессор имеет кэш размером 32 КБ с 2 строками в каждом наборе и 64 байтами в каждой строке. Младшие 6 бит (5-0) будут указывать, к какому байту в 64-байтовой строке кэша обращается.Всего имеется 512 строк кэша (всего 32 КБ / 64Б на строку) и 256 наборов (512 строк / 2 строки на набор). Биты 13-6 адреса будут использоваться для выбора набора, в котором должен находиться этот адрес. Все адреса с одинаковыми значениями для битов 13-6 end отображаются в один и тот же набор. Оставшиеся наиболее значимые биты (31–14) будут использоваться в качестве тега для определения того, откуда в памяти появилась эта строка кэша. Таким образом, если используется более двух адресов с кратными 16384 байтами между ними, возникнут конфликтные пропуски.Можно попытаться устранить эту проблему, изменив расположение данных, чтобы они попадали в разные наборы.

Ложный обмен

Как упоминалось ранее, каждая строка кэша состоит из нескольких байтов. Строка кэша достаточно велика, чтобы содержать несколько несвязанных структур данных из области памяти. Ложное совместное использование происходит, когда два процессора изменяют значения в неперекрывающихся частях памяти, которые могут содержаться в одной строке кэша. Когда процессор изменяет значение в строке кэша, ему необходимо получить монопольный доступ к строке.В результате в этой ситуации строка кэша может многократно перемещаться между процессорами. Если отдельные структуры данных были размещены в памяти так, чтобы они не попадали в одну строку кэша, накладные расходы на перемещение данных между процессорами могут быть устранены.

Принудительная очистка и аннулирование кеша

Существуют условия, при которых содержимое кэша должно быть признано недействительным для правильной работы машины. Одним из примеров того, где это происходит, является JIT-транслятор в системе времени выполнения, такой как Java.Транслятор JIT генерирует последовательность инструкций в областях памяти, которые представляют собой данные, которые могут храниться в кэше данных или основной памяти. У процессоров есть другой кеш для инструкций. Код должен предпринять шаги для признания недействительными любых устаревших значений в кэше инструкций, чтобы гарантировать, что вновь сгенерированный код будет извлечен в кэш инструкций. На некоторых процессорах операции очистки и аннулирования кеша являются очень крупнозернистыми, что приводит к очистке кешей целиком, что запускает многие дорогостоящие операции пополнения кеша при последующих выборках из памяти.

Статья Ульриха Дреппера «Что должен знать каждый программист о памяти» предоставляет большой объем информации о том, как иерархия памяти работает в процессорах.

Есть пара статей в блоге Red Developer, в которых обсуждаются проблемы с кешем:

И Intel, и AMD имеют документацию, в которой обсуждается настройка производительности
для своих процессоров, в которой содержатся предложения о том, как
решить некоторые проблемы с производительностью кэша:

Последнее обновление: 6 апреля 2018 г.

Время доступа к памяти

Время доступа к памяти
Далее: Пример 1: ЦП, кэш Up: Магия памяти Предыдущая: Организация кэша

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

Время обращения (HT):
время, необходимое для поиска и проверки соответствующие строки кэша, чтобы определить, не тег соответствует действительному тегу в кеше.
Процент промахов (MR):
процент обращений к памяти, не нашел нужной информации.
Штраф за промах (MP):
стоимость удовлетворения доступа к памяти запрос, в результате которого был пропущен.

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


Подразделы

Далее: Пример 1: ЦП, кэш Up: Магия памяти Предыдущая: Организация кэша
MM Hugue 2005-04-17
Моделирование производительности

: Amdahl, AMAT и Alpha-Beta

CS 641 Лекция CS 641 Лекция, доктор Лоулор

Закон Амдала

Пользователи заботятся о скорости.Мы хотим, чтобы код выполнялся быстрее, поэтому определите:
ускорение = старая среда выполнения / новая среда выполнения
Чем выше ускорение (меньше новое время выполнения), тем лучше.

Если мы нормализуем старую среду выполнения до «1» и определим новую среду выполнения как комбинацию последовательного и параллельного:
новая среда выполнения = последовательный код + параллельный код

Затем мы можем определить:
N: количество процессоров, работающих в параллельный
P: часть программы, которая выполняется параллельно

Затем предполагая идеальное ускорение параллельного кода:
новое время выполнения = последовательная часть + параллельная часть = (1-P) + P / N
ускорение = 1 / ((1- P) + P / N) = N / ((1-P) * N + P)

Это закон Амдала, который говорит вам две вещи:

  • Даже если 80% кода параллельны (P = 0.8), на четырехъядерной машине (N = 4), вы все равно тратите * половину * времени на ожидание последовательной части код!
  • Если N большое, P лучше быть очень близким к 1 или коэффициенту (1-P) будет доминировать в новой среде исполнения. Вы не можете оставить очень много сериала код при большом количестве процессоров.
  • Пока выполняется серийный код, там ждут процессоры N-1, а работает только один.
  • Часто N (аппаратное обеспечение) менее важно, чем P (программное обеспечение).

Среднее время доступа к памяти (AMAT)

Одноуровневый кэш довольно легко смоделировать математически.Каждый доступ является либо попаданием, либо промахом, поэтому среднее время доступа к памяти (AMAT) составляет:
AMAT = время, потраченное на попадания + время, потраченное на промахи = частота попаданий * время попаданий + частота промахов * время промахов

Например, если попадание занимает 0,5 нс и происходит в 90% случаев, а промах занимает 10 нс и случается в 10% случаев, в среднем вы тратите 0,4 нс по количеству попаданий и 1,0 нс по ошибкам, что в сумме дает среднее время доступа 1,4 нс.

Многоуровневые кэши более сложны, поскольку на самом деле есть два способа определить частоту попаданий на каждом уровне:

  • «Абсолютная частота попаданий» — это доля всех обращений к памяти, которые происходят на этом уровне кеша.
  • «относительная частота попаданий» — это доля обращений к памяти, которые не попали на все предыдущие уровни, но достигли этого.
Например, если L1, L2 и RAM имеют абсолютные показатели успешности 95%, 4% и 1%, относительная скорость попадания в кэш L2 составляет 80% из-за 5% всех доступ, который отсутствует в L1, кэш L2 обрабатывает большинство из них, и только немногие выходят в оперативную память.

Лично я предпочитаю абсолютную частоту попаданий, потому что это упрощает математику:
AMAT = время, проведенное в L1 + время, проведенное в L2 + время, проведенное в RAM
AMAT = абсолютная скорость попаданий L1 * время попаданий L1 + абсолютное частота попаданий L2 * время совпадений L2 + абсолютная скорость совпадений RAM * время совпадений RAM

Например, если коэффициенты совпадений L1, L2 и RAM составляют 95%, 4% и 1%; и время срабатывания составляет 1 нс, 10 нс и 100 нс,
AMAT = 0.95 нс + 0,4 нс + 1 нс = 2,35 нс

Другой способ рассчитать AMAT — использовать относительную частоту попаданий и промахов.
AMAT = относительная частота попаданий L1 * время срабатывания L1 + относительная частота промахов L1 * (относительная частота попаданий L2 * время попаданий L2 + относительная скорость промахов L2 * (время попадания в RAM))
Для наших цифр
AMAT = 95% * 1 нс + 5% * (80% * 10 нс + 20% * ( 100 нс)) = 0,95 нс + 5% * (8 нс + 20 нс) = 0,95 нс + 1,4 нс = 2,35 нс

Относительные частоты действительно имеют то преимущество, что ясно показывают вам «штраф за промах»: например, промах в L1 выше стоит 28ns на средний.

Альфа-Бета


Большинству сетевых карт требуется некоторое фиксированное количество времени на сообщение (альфа, довольно большое) плюс некоторое количество времени на один байт сообщения (бета, обычно намного меньше):
tnet = a + b * L;

Где

  • tnet: время сети. Общее время в секундах, проведенное в сети.
  • а: сетевая задержка. Время в секундах, чтобы отправить сообщение нулевой длины. Для TCP, работающего на гигабитном Ethernet, это это что-то вроде 50us / message, что абсурдно (это время CPU к северному мосту к контроллеру PCI к сетевой карте к сеть на переключение на другую сетевую карту на прерывание ЦП контроллер через ОС и, наконец, приложение). Причудливее, больше дорогие сети, такие как Myrinet или Infiniband, имеют задержки всего 5 мкс / сообщение (в 2005 году; теперь Википедия утверждает, что 1,3us / сообщение). Открытие нового TCP соединение может занять сотни миллисекунд (!), особенно если вы необходимо разрешить имя DNS. Сетевая задержка часто записывается как альфа или α .
  • b: 1 / (пропускная способность сети). Время в секундах для отправки каждый байт сообщения. Для гигабитного Ethernet 100 МБ / с (1000 МБ / с это мегабиты), это 10 нс / байт.Для 4x Infiniband, который отправляет 1000 МБ / с, это 1 нс / байт. (Сеть 1 / пропускная способность часто обозначается как бета или β).
  • L: количество байтов в сообщении.
Суть в том, что более короткие сообщения всегда быстрее. *Но* из-за накладных расходов на каждое сообщение они могут быть * незначительно * Быстрее. Например, для Ethernet сообщение нулевой длины принимает 50us. 100-байтовое сообщение занимает 51 мкс. (50 мкс / сообщение + 100 * 10 нс / байт). Так что вы можете отправить 100 байт если ты собираешься отправить что-нибудь!

Как правило, при отправке сообщений вы используете 50% доступной пропускной способности сети, поэтому
a = b * L
или
L = a / b
Для Ethernet эта точка безубыточности составляет L = 5000 байт / сообщение, что удивительно долго! В более коротких сообщениях преобладает альфа-канал, что означает, что вы ждете задержки сети (скорость света, подтверждения, накладные расходы ОС).Более длинные сообщения являются «бета-версией» доминирует «, что означает, что вы ждете пропускной способности сети (скорость передачи сигналов). Маленькие сообщения мало помогают, если вы альфа преобладает!

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

Та же альфа-бета модель производительности применяется к ядрам графического процессора (альфа — это время запуска ядра от 5 до 10 мкс; бета время на инструкцию в ядре обычно 0.01ns или меньше), потоки OpenMP (альфа — это время создавать темы, 10us или около того; бета — время на итерацию, обычно несколько нс) и многие другие аппаратные доступы.

c — анализ времени доступа к кеш-памяти процессора

Поскольку вы работаете в Linux, я отвечу с этой точки зрения. Я также буду писать с учетом архитектуры Intel (т.е. x86-64).

  1. 440 мс вероятно точное. Лучший способ посмотреть на результаты — это время на элемент или доступ. Обратите внимание, что увеличение k уменьшает количество доступных элементов.Теперь кэш-доступ 2 показывает довольно стабильный результат 0,9 нс / доступ. Это время примерно сопоставимо с 1–3 циклами на доступ (в зависимости от тактовой частоты процессора). Так что размеры 1–16 (возможно, 32) точны.
  2. Нет (хотя сначала я предполагаю, что вы имеете в виду 32 байта вместо 64). Вы должны спросить себя, как выглядит «размер строки кеша»? Если вы обращаетесь к строке меньшего, чем строка кэша, вы пропустите, а затем попадете один или несколько раз. Если вы больше или равны размеру строки кэша, каждый доступ будет пропущен.При k = 32 и выше время доступа для доступа 1 относительно постоянно и составляет 20 нс на доступ. При k = 1–16 общее время доступа постоянно, что говорит о примерно одинаковом количестве промахов в кэше. Итак, я бы сделал вывод, что размер строки кеша составляет 64 байта.
  3. Да, по крайней мере, для последнего цикла, который хранит только ~ 16 КБ. Как? Либо коснитесь множества других данных, например, другого массива ГБ. Или вызовите такую ​​инструкцию, как WBINVD x86, которая записывает в память, а затем делает недействительным все содержимое кеша; однако для этого требуется, чтобы вы находились в режиме ядра.
  4. Как вы заметили, за пределами размера 32 время колеблется в районе 10 мс, что показывает степень детализации по времени. Вам нужно либо увеличить требуемое время (чтобы было достаточно детализации в 10 мс), либо переключиться на другой механизм синхронизации, о чем идет речь в комментариях. Я фанат использования инструкции rdtsc (считывание счетчика отметок времени (т. Е. Счетчика циклов)), но это может быть даже более проблематичным, чем приведенные выше предложения. Переключение вашего кода на rdtsc в основном требовало переключения часов, clock_t и CLOCKS_PER_SEC.Тем не менее, вы все равно можете увидеть дрейф часов, если ваш поток мигрирует, но это забавный тест, поэтому я бы не стал беспокоиться об этой проблеме.

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

Ошибки страницы также могут повлиять на ваши результаты. Вы выделяете 500 МБ или около 2 ГБ дискового пространства.Цикл 1 пытается коснуться памяти, чтобы ОС распределила страницы, но если у вас недостаточно доступной памяти (не только всего, поскольку ОС и т. Д. Занимает некоторое место), то ваши результаты будут искажены. Кроме того, ОС может начать освобождать часть пространства, поэтому при некоторых доступах всегда будет происходить сбой страницы.

Как и предыдущий, TLB также будет иметь некоторое влияние на результаты. Аппаратное обеспечение хранит небольшой кэш сопоставлений виртуального адреса в физический в резервном буфере трансляции (TLB).Для каждой страницы памяти (4 КБ на Intel) требуется запись TLB. Таким образом, для вашего эксперимента потребуется 2 ГБ / 4 КБ => ~ 500 000 записей. Большинство TLB содержат менее 1000 записей, поэтому измерения также искажаются из-за этого промаха. К счастью, это происходит только раз в 4 КБ или 1024 целых числа.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *