- •1.Суть динамічного виконання:
- •2.Який кеш мають процесори Pentium II та Pentium Pro.
- •3.Скільки стадій має цілочисельний конвеєр процесора Pentium Pro, на які блоки він поділяється? Яке призначення блоків?
- •4.Особливості передбачення розгалужень в процесорі Pentium Pro. Суть динамічного та статистичного передбачення?
- •5. Декодування команд. В чому різниця між декодерами d0, d1, d2?
- •6. Суть перейменування регістрів?
- •7. Особливості позачергового виконання.
- •8.Механізм завершення та впорядкування інструкцій.
- •9.Види та особливості промахів в кеші.
- •10.Суть оптимізації розгалужень, доступу до пам‘яті і кешу та декодування.
- •11.Особливості оптимізації для процесораPentiumPro.
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
- Оптимізація коду, що містить префікси
- Розділення коду і даних