Разбор задачи 7: TLB и служебные обращения к памяти

⏱ 40 мин · 🧩 заданий: 9

Условие

В аппаратуре 4-уровневая организация таблиц страниц. Размер страницы 512 байт. TLB на 3 записи. Обращения за инструкциями игнорировать. Каково минимальное и максимальное число лишних, служебных обращений в память, не связанных непосредственно с обращениями к ячейкам массивов?

extern double *a;
extern double *b;

register int i;
register double sum = 0.0;

for (i = 0; i < 70; i++)
{
    sum += a[i] * b[i];
}

Шаг 0. Предположения

Ответ нужно пояснить, поэтому сначала выпишите предположения. Без них «правильного» числа нет.

  • i и sum в регистрах (register) — к памяти не обращаются.
  • a и b — глобальные переменные-указатели в памяти. Без оптимизации компилятор читает их на каждой итерации (каждое a[i] — это *(a + i)).
  • Промах TLB стоит 4 обращения к памяти (по одному на уровень). Попадание — 0.
  • TLB вначале пуст (или содержит чужие трансляции), замещение — LRU.
  • Массивы не пересекаются. sizeof(double) = 8.
  • Служебные обращения = обращения к таблицам страниц + чтения указателей a и b (они не к ячейкам массивов).

Шаг 1. Обращения одной итерации

№ Обращение Страница
1 прочитать указатель a Pa
2 прочитать a[i] одна из страниц массива a
3 прочитать указатель b Pb (может совпадать с Pa)
4 прочитать b[i] одна из страниц массива b

За 70 итераций — 280 обращений: 140 к массивам и 140 к указателям.

Шаг 2. Сколько страниц

70 × 8 = 560 байт > 512, поэтому массив занимает минимум 2 страницы.

выровнен (смещение 0): |████████████████ стр.0 ████████████████|███ стр.1 ██ | элементы 0–63 (512 Б) 64–69 (48 Б) смещение 504: | стр.0 ██|████████ стр.1 ████████|██ стр.2 | эл. 0 эл. 1–64 эл. 65–69
  • Минимум: 2 страницы (массив начинается с начала страницы).
  • Максимум: 3 страницы (начинается со смещения 504: 504 + 560 = 1064 > 1024).

Шаг 3. Минимум

Указатели a и b — на одной странице P (рядом объявлены). Массивы по 2 страницы.

На итерации нужны 3 разные страницы: P, текущая страница a, текущая страница b. TLB на 3 записи держит их все. Промахи бывают только при первом обращении к странице:

Страница Промахов
P (указатели) 1
a: стр. 0, стр. 1 2
b: стр. 0, стр. 1 2
итого 5

Проверим LRU при переходе a на новую страницу (итерация 64): TLB = {P, A0, B0}, нужна A1 → вытесняется наименее недавно использованная. Порядок обращений P, A0, P, B0, поэтому LRU — A0. Её и вытесняем. Хорошо: B0 и P остаются.

Минимум = 5 × 4 + 140 = 20 + 140 = 160

Шаг 4. Максимум

Указатели a и b — на разных страницах Pa ≠ Pb. Массивы по 3 страницы.

На итерации нужны 4 разные страницы: Pa, A, Pb, B. Обращения идут по кругу: Pa → A → Pb → B → Pa → …

TLB (3 записи, LRU) обращение результат [ — — — ] Pa промах [ Pa — — ] A промах [ Pa A — ] Pb промах [ Pa A Pb ] B промах → вытеснить Pa (LRU) [ B A Pb ] Pa промах → вытеснить A [ B Pa Pb ] A промах → вытеснить Pb ... ... каждое обращение — промах!

При циклическом обходе N+1 страниц через N записей LRU каждый раз вытесняет ту страницу, которая понадобится следующей. Поэтому промахивается каждое из 280 обращений.

Максимум = 280 × 4 + 140 = 1120 + 140 = 1260

Нужны ли для максимума смещения 504?

Для «каждое обращение — промах» достаточно 4 разных страниц на итерацию, то есть Pa ≠ Pb. Число страниц массивов при этом уже не влияет: промах и так на каждом обращении. Но в объяснении стоит упомянуть, что массивы могут занимать по 3 страницы — это показывает, что вы проверили и этот фактор.

Симулятор

Минимум: указатели «на одной странице», смещения 0 и 0. Максимум: «на разных страницах», смещения 504 и 504. Сравните с «в регистрах».

Альтернативные трактовки

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

Трактовка Минимум Максимум
Стандартная: указатели читаются каждую итерацию, TLB вначале пуст 160 1260
Только обращения к таблицам страниц (чтения указателей не считать «служебными») 20 1120
Указатели в регистрах (компилятор вынес чтения из цикла) 4 × 4 = 16 (по 2 страницы на массив) 6 × 4 = 24 (по 3 страницы)
TLB уже содержит страницу указателей и первые страницы массивов 2 × 4 + 140 = 148 1260

Как записать ответ

  1. Выпишите обращения одной итерации: a, a[i], b, b[i]; i и sum в регистрах.
  2. Массив 560 байт: 2–3 страницы по 512.
  3. Минимум: указатели на одной странице, массивы выровнены → 3 страницы на итерацию помещаются в TLB → 5 промахов × 4 = 20, плюс 140 чтений указателей = 160.
  4. Максимум: указатели на разных страницах → 4 страницы на итерацию при 3 записях TLB → при LRU промах на каждом из 280 обращений: 280 × 4 = 1120, плюс 140 = 1260.
  5. Оговорите: если не считать чтения указателей — 20 и 1120; если указатели в регистрах — максимум 24.

Практика решено 0 из 9

Вы не вошли — ответы проверяются, но прогресс не сохранится. Войти или зарегистрироваться.
Задание 1 Ввод ответа

Шаг 1. Сколько обращений к памяти за одну итерацию делает тело цикла sum += a[i] * b[i];, если i и sum — регистровые, а a и b — глобальные (extern) указатели? Чтение инструкций не считаем. (число)

Задание 2 Ввод ответа

Сколько из этих обращений за все 70 итераций не относятся к ячейкам массивов? (число)

Задание 3 Ввод ответа

Шаг 2. Массив из 70 double занимает 560 байт. Минимальное число страниц по 512 байт, которые он может занимать? (число)

Задание 4 Ввод ответа

А максимальное число страниц для того же массива? (число)

Задание 5 Ввод ответа

Шаг 3, минимум. Указатели a и b лежат на одной странице, каждый массив — на 2 страницах (выровнен), TLB вначале пуст. Сколько промахов TLB за весь цикл? (число)

Задание 6 Ввод ответа

Сколько служебных обращений в минимальном случае (промахи × 4 уровня + чтения указателей)? (число)

Задание 7 Ввод ответа

Шаг 4, максимум. Указатели a и b на разных страницах, массивы по 3 страницы. Сколько разных страниц нужно на одной итерации? (число)

Задание 8 Ввод ответа

При 4 разных страницах на итерацию (порядок a, a[i], b, b[i], снова a, …) и TLB на 3 записи с LRU сколько служебных обращений за весь цикл? (число)

Задание 9 Один вариант ответа

Компилятор с оптимизацией прочитал a и b в регистры один раз до цикла. Каким станет максимум?

Войдите, чтобы отмечать пройденные уроки.