Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab3.docx
Скачиваний:
1
Добавлен:
27.10.2018
Размер:
50.73 Кб
Скачать

9.Види та особливості промахів в кеші.

Процесори Pentium II і Pentium Pro забезпечені роздільними кешами команд і даних першого рівня з множинною асоціативністю, що забезпечує швидкий паралельний доступ в кеш.

Дані в кеші є не блокуючими, тобто при виникненні промаху при звертанні в кеш наступне звертання не затримується.

Кеш другого рівня призначений для зберігання як команд, так і даних.

Щоб дізнатисяоб'ємкешів процесора, потрібно використати команду CPUID.

Розмір кешів даних і команд першого рівня в процесорі Pentium Pro 8 Кб (кеш даних є 2-шляховим, кеш команд 4-шляховим). Розмір кешів даних і команд в процесорі Pentium ІІ 16 Кб. Довжина кешу другого рівня в Pentium Pro 256 Кб, в Pentium ІІ - мінімум 256 Кб. Довжина рядка кешу в обох процесорах 32 байти.

Якщо стався промах в кеші першого рівня, процесор прочитує з кеша другого рівня (або, якщо треба, з основної пам'яті) цілу групу з 32 байтів. При необхідності відбувається заміщення рядка кеша, що не використовувалася довше за інших.

Як при читанні, так і при записі процесор заповнює даними цілі рядки кешу.

Імовірність кешового попадання зростає в наступних випадках:

- Необхідні дані або команди недавно вже використовувалися (має місце часове розміщення).

- Необхідні дані або команди розташовуються в пам'яті близько до даних і команд, що використовуються в даний момент (просторове розміщення).

10.Суть оптимізації розгалужень, доступу до пам‘яті і кешу та декодування.

Процесори Pentium II і Pentium Pro вибирають команди з адреси, отриманої внаслідок передбачення розгалуження, декодують ці команди і здійснюють їх попереджувальне виконання.

У разі вірного передбачення розгалуження процесор отримує виграш у часі на початковому етапі обробки команди. При невірному прогнозі вибрані команди будуть відкинуті, а замість них повинні бути прочитані команди з правильної адреси переходу.

Підвищення точності прогнозу розгалужень дозволяє зменшити число тактів, що втрачаються через помилки передбачення. На процесорах з 12-ступінчастим конвеєром такі втрати дуже істотні.

Усунення розгалужень звільняє в буфері адрес розгалужень місце для зберігання історії розгалужень, що залишилися, наявність яких зумовлена семантикою програми.

Основні способи усунення деяких розгалужень і зниження витрат на виконання що залишилися

- Перестановка коду для усунення розгалужень

- Використання cmov і fcmov для усунення розгалужень

- Використання setcc для усунення розгалужень

- setcc: особливі випадки

- Оптимізація виконаних умовних переходів

- Облік статичного прогнозування

- Відповідність між call і ret

На ефективність виконання вашого коду на різних рівнях конвеєра значним чином впливає те, як і коли проводиться задання структур даних і доступ до них.

Основні ідеї оптимізації:

- Вирівнюйте структури даних відповідно до їх розміру і розміру їх елементів.

- Розташовуйте структури даних так, щоб вони не перетинали границі 32-байтних вирівняних областей пам'яті.

- Упорядковуйте дані для забезпечення ефективного доступу до них.

- Упорядковуйте код для забезпечення ефективного доступу до даних.

- Розташовуйте операції читання і запису в пам'ять так, щоб не виникали затримки.

Основні методи оптимізації:

- Вирівнювання даних вздовж границі

- Запобігання перетину границі рядка кешу

- Перестановка даних для вирівнювання

- Використання статичних змінних для вирівнювання

- Використання асемблерного коду для вирівнювання

- Використання malloc для вирівнювання

- Упорядкування елементів структур

- Упорядкування елементів масиву

- Заповнення і вирівнювання структур

- Перетворення циклів

- Перестановка в циклі

- Блокова організація циклів

- Запобігання затримкам при доступі до пам'яті

- Використання запису з буферизацією

На кожному такті декодери процесора (D0, D1 і D2) можуть декодувати до трьох команд архітектури Intel, генеруючи до шести мікрооперацій.

З метою оптимізації декодування слід:

- Групувати команди в послідовності 4-1-1 для використання можливостей паралельного декодування.

- Вміщувати не менше трьох команд в кожні 16 байтів.

- Використовувати команди, довжина яких менше восьми байтів.

- Уникати використання команд, що містять префікси. Декодування таких команд займає декілька додаткових тактів.

- Розділяти код і дані.

- Використовувати директиву асемблера ALIGN для вирівнювання часто використовуваних даних про мітки за адресами, кратними 16 байтами. Таке вирівнювання особливо ефективне в точках входу в підпрограми і в тілах внутрішніх циклів.

Деякі шляхи підвищення ефективності декодування:

- Використання послідовностей 4-1-1

- Оптимізація коду, що містить префікси

- Розділення коду і даних

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]