Professional Documents
Culture Documents
A9 БГ Computer Architecture a Quantitative Approach (5th Edition)
A9 БГ Computer Architecture a Quantitative Approach (5th Edition)
„Компютърна архитектура: Количествен подход е класика, която като хубаво вино просто
става все по-добра. Купих първото си копие, когато завърших бакалавърската си степен
и това остава един от най-често цитираните ми текстове днес.
Когато излезе четвъртото издание, имаше толкова много нов материал, че трябваше да
го накарам, за да остана актуален в областта. И докато преглеждам петото издание,
разбирам, че Хенеси и Патерсън са го направили отново. Целият текст е силно
актуализиран и само Глава 6 прави това ново издание задължително четиво за тези,
които искат наистина да разберат облачните и складовите изчисления. Само Hennessy и
Patterson имат достъп до вътрешните лица в Google, Amazon, Microsoft и други
доставчици на облачни изчисления и приложения в интернет мащаб и няма по-добро
покритие на тази важна област навсякъде в индустрията.“
„Хенеси и Патерсън написаха първото издание на тази книга, когато студенти изградиха
компютри с 50 000 транзистора. Днес компютрите с размер на склад съдържат толкова
много сървъри, всеки от които се състои от десетки независими процесори и милиарди
транзистори. Еволюцията на компютърната архитектура е бърза и безмилостна, но
Computer Architecture: A Quantitative Approach поддържа темпото, като всяко издание
точно обяснява и анализира важните нововъзникващи идеи, които правят тази област
толкова вълнуваща.
„Това ново издание добавя страхотна нова глава за паралелизъм на ниво данни във
векторни, SIMD и GPU архитектури. Обяснява ключови архитектурни концепции в GPU
за масовия пазар, съпоставя ги с традиционните термини и ги сравнява с векторни и
SIMD архитектури. Това е навременно и уместно с широко разпространеното
преминаване към GPU паралелни изчисления. Компютърна архитектура: Количествен
подход допълва своята поредица от първи в представянето на цялостно покритие на
архитектурата на значими нови разработки!“
Компютърна архитектура
Количествен подход
Пето издание
Machine Translated by Google
Джон Л. Хенеси е десетият президент на Станфордския университет, където той е член на факултета от
1977 г. в отделите по електротехника и компютърни науки.
Hennessy е сътрудник на IEEE и ACM; член на Националната инженерна академия, Националната академия
на науките и Американското философско общество; и сътрудник на Американската академия за изкуства
и науки. Сред многобройните му награди са наградата Eckert-Mauchly за 2001 г. за приноса му към RISC
технологията, наградата Seymour Cray Computer Engineering за 2001 г. и наградата John von Neumann за
2000 г., която той споделя с Дейвид Патерсън. Получил е и седем почетни докторски степени.
През 1981 г. той стартира проекта MIPS в Станфорд с шепа студенти. След като завършва проекта през
1984 г., той си взема отпуск от университета, за да съучреди MIPS Computer Systems (сега MIPS Technologies),
която разработва един от първите комерсиални RISC микропроцесори. Към 2006 г. над 2 милиарда MIPS
микропроцесори са били доставени в устройства, вариращи от видео игри и палмтоп компютри до
лазерни принтери и мрежови комутатори.
Впоследствие Хенеси ръководи проекта DASH (Директорска архитектура за споделена памет), който
създаде прототип на първия кохерентен мултипроцесор с мащабируем кеш; много от ключовите идеи са
възприети в съвременните мултипроцесори. В допълнение към своите технически дейности и
отговорности в университета, той продължава да работи с множество стартиращи фирми както като
съветник на ранен етап, така и като инвеститор.
В Бъркли Патерсън ръководи проектирането и внедряването на RISC I, вероятно първият VLSI компютър
с редуциран набор от инструкции и основата на комерсиалната SPARC архитектура. Той беше ръководител
на проекта Redundant Arrays of Inexpensive Disks (RAID), който доведе до надеждни системи за съхранение
от много компании. Той също така участва в проекта Network of Workstations (NOW), който доведе до
клъстерната технология, използвана от интернет компаниите, а по-късно и до облачните изчисления.
Тези проекти спечелиха три награди за дисертации от ACM. Текущите му изследователски проекти са
Лаборатория Алгоритъм-Машина-Хора и Лабораторията за паралелни изчисления, където той е директор.
Целта на AMP Lab е да разработи мащабируеми алгоритми за машинно обучение, модели за програмиране,
подходящи за компютър, и инструменти за краудсорсинг, за да получите бързо ценна информация от
големи данни в облака. Целта на Par Lab е да разработи технологии за доставяне на мащабируем,
преносим, ефективен и продуктивен софтуер за паралелни персонални мобилни устройства.
Machine Translated by Google
Компютърна архитектура
Количествен подход
Пето издание
Джон Л. Хенеси
Станфордски университет
Дейвид А. Патерсън
Калифорнийски университет, Бъркли
Даяна Франклин
Дейвид А. Ууд
Калифорнийски университет, Санта Барбара
Университет на Уисконсин-Медисън
Дейвид Голдбърг
Амр Заки
Изследователският институт Скрипс
Университет на Санта Клара
Никаква част от тази публикация не може да бъде възпроизвеждана или предавана под каквато и да е форма или по каквито и
да било средства, електронни или механични, включително фотокопиране, запис или каквато и да е система за съхранение и
извличане на информация, без писмено разрешение от издателя. Подробности за това как да поискате разрешение,
допълнителна информация относно политиките за разрешения на Издателя и нашите договорености с организации като
Центъра за изчистване на авторски права и Агенцията за лицензиране на авторски права, можете да намерите на нашия
уебсайт: www.elsevier.com/permissions .
Тази книга и отделните приноси, съдържащи се в нея, са защитени с авторски права от Издателя (освен както може да бъде
отбелязано тук).
Забележки
Знанията и най-добрите практики в тази област непрекъснато се променят. Тъй като новите изследвания и опитът разширяват
нашето разбиране, може да се наложи промяна в методите на изследване или професионалните практики. Практиците и
изследователите винаги трябва да разчитат на собствения си опит и знания при оценяването и използването на каквато и да е
информация или методи, описани тук. При използването на такава информация или методи те трябва да имат предвид
собствената си безопасност и безопасността на другите, включително страните, за които носят професионална отговорност.
В пълната степен на закона нито Издателят, нито авторите, сътрудниците или редакторите не поемат каквато и да е отговорност
за каквито и да било наранявания и/или щети на хора или имущество като въпрос на отговорност за продукти, небрежност
или по друг начин, или от каквото и да е използване или работа на всякакви методи, продукти, инструкции или идеи,
съдържащи се в материала тук.
ISBN: 978-0-12-383872-8
Предговор 1
Последното издание пристигна само две години след като необузданата индустриална
надпревара за по-висока тактова честота на процесора приключи официално, като Intel
отмени своите 4 GHz едноядрени разработки и прегърна многоядрени процесори. Две години
бяха достатъчно време за Джон и Дейв да представят тази история не като произволна
актуализация на продуктовата линия, а като определяща инфлексна точка на компютърните
технологии през последното десетилетие. Четвъртото издание имаше намален акцент върху
паралелизма на ниво инструкции (ILP) в полза на добавен материал за паралелизма на ниво
нишка, нещо, което сегашното издание отива още повече, като посвещава две глави на
паралелизма на ниво нишка и данни, като същевременно ограничава ILP дискусия към една
глава. Читателите, които се запознават с новите машини за обработка на графики, ще се
възползват особено от новата Глава 4, която се фокусира върху паралелизма на данни,
обяснявайки различните, но бавно сближаващи се решения, предлагани от мултимедийни
разширения в процесори с общо предназначение и все по-програмируеми графични
процесори. От забележително практическо значение: Ако някога сте се борили с
терминологията на CUDA, вижте Фигура 4.24 (закачка: „Споделена памет“ е наистина локална,
докато „Глобална памет“ е по-близо до това, което смятате за споделена памет).
Въпреки че все още сме в средата на тази многоядрена технологична промяна, това
издание включва това, което изглежда следващото голямо: облачните изчисления. В този
случай повсеместното разпространение на интернет свързаността и еволюцията на
завладяващите уеб услуги извеждат в светлината на прожекторите много малки устройства (смартфони,
ix
Machine Translated by Google
x Предговор
и много големи (компютърни системи от складов мащаб). ARM Cortex A8, популярен CPU за смарт
телефони, се появява в раздела „Putting It All Together“ на Глава 3, а цяла нова Глава 6 е посветена
на паралелизма на ниво заявка и данни в контекста на изчисленията в складови помещения
системи. В тази нова глава Джон и Дейв представят тези нови масивни клъстери като отличително
нов клас компютри – отворена покана към компютърните архитекти да помогнат за оформянето
на това нововъзникващо поле. Читателите ще оценят как тази област се е развила през
последното десетилетие, като сравнят клъстерната архитектура на Google, описана в третото
издание, с по-модерното въплъщение, представено в глава 6 на тази версия.
Съдържание 1
Предговор ix
Предговор xv
Благодарности xxiii
xi
Machine Translated by Google
xii Съдържание
Съдържание xiii
xiv Съдържание
Онлайн приложения
От Томас М. Конте
от Дейвид Голдбърг
Препратки R-1
Индекс I-1
Machine Translated by Google
Предговор 1
Чрез пет издания на тази книга нашата цел беше да опишем основните принципи,
залегнали в основата на това, което ще бъде утрешното технологично развитие.
Вълнението ни относно възможностите в компютърната архитектура не е намаляло и
ние повтаряме това, което казахме за областта в първото издание: „Това не е мрачна
наука за хартиените машини, които никога няма да работят. Не! Това е дисциплина с
голям интелектуален интерес, изискваща баланса на пазарните сили към цена-
производителност-мощност, което води до славни провали и някои забележителни успехи.“
Основната ни цел при написването на първата ни книга беше да променим начина,
по който хората учат и мислят за компютърната архитектура. Смятаме, че тази цел все
още е валидна и важна. Областта се променя ежедневно и трябва да се изучава с реални
примери и измервания на реални компютри, а не просто като колекция от дефиниции и
дизайни, които никога няма да се наложи да бъдат реализирани. Предлагаме
ентусиазирано посрещане на всеки, който е идвал с нас в миналото, както и на тези,
които се присъединяват към нас сега. Така или иначе, можем да обещаем същия
количествен подход и анализ на реални системи.
Както при по-ранните версии, ние се стремим да произведем ново издание, което ще
продължи да бъде също толкова подходящо за професионални инженери и архитекти,
колкото и за тези, които участват в напреднали курсове по компютърна архитектура и
дизайн. Подобно на първото издание, това издание има остър фокус върху новите
платформи – персонални мобилни устройства и компютри от складов мащаб – и нови
архитектури – многоядрени и GPU. Подобно на своите предшественици, това издание
има за цел да демистифицира компютърната архитектура чрез акцент върху компромисите
между цена-производителност и енергия и добър инженерен дизайн. Вярваме, че
областта продължава да се развива и да се движи към строгата количествена основа на
отдавна установени научни и инженерни дисциплини.
xv
Machine Translated by Google
xvi Предговор
Това издание
Предговор xvii
Както и преди, ние възприехме консервативен подход към подбора на теми, тъй като в
областта има много по-интересни идеи, отколкото разумно може да се обхване при
разглеждането на основните принципи. Ние се отклонихме от цялостно проучване на всяка
архитектура, която читателят може да срещне. Вместо това нашата презентация се фокусира
върху основните концепции, които вероятно ще бъдат намерени във всяка нова машина.
Ключовият критерий остава този за подбор на идеи, които са били проверени и използвани
достатъчно успешно, за да позволят тяхното обсъждане в количествено отношение.
Нашето намерение винаги е било да се фокусираме върху материал, който не е достъпен
в еквивалентна форма от други източници, така че продължаваме да наблягаме на разширено
съдържание, когато е възможно. Наистина тук има няколко системи, чиито описания не могат
да бъдат намерени в литературата. (Читателите, които се интересуват стриктно от по-основно
въведение в компютърната архитектура, трябва да прочетат Компютърна организация и
дизайн: Хардуерно/софтуерен интерфейс.)
Преглед на съдържанието
Глава 1 е подобрена в това издание. Той включва формули за енергия, статична мощност,
динамична мощност, разходи за интегрални схеми, надеждност и наличност.
(Тези формули се намират и на предната вътрешна корица.) Надяваме се, че тези теми могат
да бъдат използвани в останалата част от книгата. В допълнение към класическите
количествени принципи на компютърен дизайн и измерване на производителността, секцията
PIAT е надстроена, за да използва новия бенчмарк SPECPower.
Нашето мнение е, че архитектурата на набора от инструкции играе по-малка роля днес,
отколкото през 1990 г., така че преместихме този материал в Приложение A. Той все още
използва архитектурата MIPS64. (За бърз преглед, резюме на MIPS ISA може да се намери на
задната вътрешна корица.) За феновете на ISA, Приложение K обхваща 10 RISC архитектури,
80x86, DEC VAX и IBM 360/370.
След това преминаваме към йерархията на паметта в глава 2, тъй като е лесно да се
приложат принципите цена-производителност-енергия към този материал и паметта е
критичен ресурс за останалите глави. Както и в предишното издание, Приложение B съдържа
въвеждащ преглед на принципите на кеша, който е достъпен в случай, че имате нужда от него.
Глава 2 обсъжда 10 разширени оптимизации на кеша. Главата включва виртуални машини,
които предлагат предимства в защитата, управлението на софтуера и управлението на хардуера
и играят важна роля в облачните изчисления. В допълнение към покриването на SRAM и DRAM
технологиите, главата включва нов материал за Flash паметта. Примерите за PIAT са ARM Cortex
A8, който се използва в PMD, и Intel Core i7, който се използва в сървъри.
xviii Предговор
на Itanium и VLIW, този материал вече е в Приложение H, което показва нашето виждане
че тази архитектура не отговаря на по-ранните твърдения.
Нарастващото значение на мултимедийните приложения като игри и видео
обработката също увеличи значението на архитектурите, които могат да използват паралелизъм на
ниво данни. По-специално, има нарастващ интерес към изчисленията с помощта на графични процесори
(GPU), но малко архитекти разбират как наистина работят GPU.
Решихме да напишем нова глава до голяма степен, за да разкрием този нов стил на компютърна
архитектура. Глава 4 започва с въведение във векторните архитектури,
който действа като основа, върху която да се изграждат обяснения на мултимедийния SIMD
разширения на набор от инструкции и графични процесори. (Приложение G навлиза в още по-голяма дълбочина
книга, тъй като бяха необходими много повторения, за да се получи точно описание, което също беше
лесно за разбиране. Значително предизвикателство беше терминологията. Решихме да тръгваме
с нашите собствени условия и след това предоставяме превод между нашите условия и официалните
условия на NVIDIA. (Екземпляр от тази таблица може да се намери на задната вътрешна корица
страници.) Тази глава въвежда модела за изпълнение на Roofline и след това го използва
за сравняване на Intel Core i7 и графичните процесори NVIDIA GTX 280 и GTX 480. The
глава описва и Tegra 2 GPU за PMD.
Глава 5 описва многоядрени процесори. Изследва симетрични и
архитектури с разпределена памет, като се изследват както организационните принципи, така и
производителност. Темите за моделите за синхронизация и последователност на паметта са
следващия. Примерът е Intel Core i7. Читателите, които се интересуват от мрежи за взаимно свързване
на чип, трябва да прочетат Приложение F, а тези, които се интересуват от по-мащабни мултипроцесори
и научни приложения, трябва да прочетат Приложение I.
Както бе споменато по-рано, Глава 6 описва най-новата тема в компютърната архитектура,
компютрите в складов мащаб (WSC). Въз основа на помощта на инженерите от
Amazon Web Services и Google, тази глава интегрира подробности относно дизайна, разходите,
и производителност на WSC, за която малко архитекти знаят. Започва с популярния модел за
програмиране MapReduce, преди да опише архитектурата и
физическо изпълнение на WSC, включително разходи. Разходите ни позволяват да обясним
появата на облачни изчисления, чрез които може да бъде по-евтино да се използва
WSC в облака, отколкото във вашия локален център за данни. Примерът PIAT е описание на Google
WSC, което включва информация, публикувана за първи път в
тази книга.
Предговор xix
Навигация в текста
Няма единен най-добър ред, в който да се подходи към тези глави и приложения, освен че всички
читатели трябва да започнат с Глава 1. Ако не искате да прочетете всичко, ето някои предложени
последователности:
Приложения A и K
Приложение E може да се чете по всяко време, но може да работи най-добре, ако се чете след ISA
и кеш последователностите. Приложение J може да се чете винаги, когато аритметиката ви движи.
Трябва да прочетете съответната част от Приложение L, след като завършите всяка глава.
Machine Translated by Google
xx Предговор
Структура на главата
Избраният от нас материал е опънат върху последователна рамка, която се следва във всяка
глава. Започваме с обяснение на идеите на дадена глава.
Тези идеи са последвани от раздел „Взаимосвързани въпроси“, функция, която показва как
идеите, обхванати в една глава, взаимодействат с тези, дадени в други глави.
Това е последвано от раздел „Сглобяване на всичко“, който обединява тези идеи, като показва
как се използват в реална машина.
Следващата в поредицата е „Заблуди и капани“, която позволява на читателите да се учат
от грешките на другите. Показваме примери за често срещани недоразумения и архитектурни
капани, които е трудно да се избегнат, дори когато знаете, че ви дебнат. Разделът „Заблуди и
клопки“ е един от най-популярните раздели на книгата. Всяка глава завършва с раздел
„Заключителни бележки“.
Казуси с упражнения
регистрирайте се на textbooks.elsevier.com.
Допълнителни материали
Предговор xxi
Списък с грешки
добавяни редовно.
И накрая, възможно е да правите пари, докато четете тази книга. (Говорете за цена-
производителност!) Ако прочетете благодарностите, които следват, ще видите, че положихме
много усилия, за да коригираме грешките. Тъй като една книга преминава през много
печатания, имаме възможност да правим още повече корекции. Ако откриете оставащи
устойчиви грешки, моля, свържете се с издателя по електронна поща (ca5bugs@mkp.com).
Заключителни бележки
Още веднъж тази книга е истинско съавторство, като всеки от нас пише половината от главите
и равен дял от приложенията. Не можем да си представим колко време щеше да отнеме без
някой друг да свърши половината работа, да предложи вдъхновение, когато задачата
изглеждаше безнадеждна, да предостави ключовото прозрение за обяснение на трудна
концепция, да предостави прегледи през уикенда на главите и да съчувства, когато тежестта от
другите ни задължения ни беше трудно да вземем писалката. (Тези задължения са ескалирали
експоненциално с броя на изданията, както свидетелстват биографиите.) Така отново
споделяме поравно вината за това, което ще прочетете.
Благодарности 1
Въпреки че това е едва петото издание на тази книга, ние всъщност създадохме десет
различни версии на текста: три версии на първото издание (алфа, бета и окончателно) и
две версии на второ, трето и четвърто издание (бета и окончателно).
По пътя получихме помощ от стотици рецензенти и потребители.
Всеки от тези хора е помогнал тази книга да стане по-добра. Затова избрахме да изброим
всички хора, които са дали принос за някоя версия на тази книга.
Подобно на предишните издания, това е усилие на общността, което включва десетки доброволци.
Без тяхната помощ това издание нямаше да е толкова изпипано.
Рецензенти
Членове на Калифорнийския университет – Бъркли Par Lab и RAD Lab, които дадоха чести
прегледи на Глава 1, 4 и 6 и оформиха обяснението на
Графични процесори и WSC: Крсте Асанович, Майкъл Армбруст, Скот Биймър, Сара Бърд,
Брайън Катандзаро, Джике Чонг, Хенри Кук, Дерик Кутзи, Ранди Кац, Юн-суп Лий, Лео
Майервич, Марк Мърфи, Джанси Тан, Василий Волков и Андрю
Waterman
Консултативен панел
Луис Андре Барозу, Google Inc.; Робърт П. Колуел, R&E Colwell & Assoc.
Inc.; Krisztian Flautner, вицепрезидент на R&D в ARM Ltd.; Мери Джейн Ъруин, Пен Стейт;
xxiii
Machine Translated by Google
xxiv Благодарности
Дейвид Кърк, NVIDIA; Грант Мартин, главен учен, Tensilica; Гуриндар Сохи,
Университет на Уисконсин–Медисън; Матео Валеро, Universidad Politécnica de
Каталуния
Приложения
Казуси с упражнения
Jichuan Chang, Kevin Lim и Justin Meza помогнаха при разработването и тестването на
казусите и упражненията за глава 6.
Допълнителен материал
Благодарности xxv
Рецензенти
xxvi Благодарности
Приложения
Упражнения
Казуси с упражнения
Благодарности xxvii
Специални благодарности
1.1 Въведение 2
1.7 Надеждност 33
1
Основи на количественото
Проектиране и анализ 1
1.1 Въведение
1.1 Въведение 3
100 000
280 22%/година
Digital Alphastation 4/266, 266 MHz 183
IBM POWERstation 100, 150 MHz
100 117
Цифров 3000 AXP/500, 150 MHz 80
HP 9000/750, 66 MHz
51
AX-11/780, 5 MHz
1 1978 1980 1982 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2006 2008 2010 2012
Фигура 1.1 Ръст в производителността на процесора от края на 70-те години. Тази диаграма показва производителността по отношение
на VAX 11/780, измерена от SPEC бенчмарковете (вижте раздел 1.8). Преди средата на 80-те години на миналия век ръстът на
производителността на процесорите беше до голяма степен обусловен от технологиите и беше средно около 25% годишно.
Увеличението на растежа до около 52% оттогава се дължи на по-напредналите архитектурни и организационни идеи. До 2003 г. този
растеж доведе до разлика в представянето от около коефициент 25 в сравнение с това, ако бяхме продължили със скорост от 25%.
Производителността за изчисления, ориентирани към плаваща запетая, се увеличи още по-бързо. От 2003 г. ограниченията на
мощността и наличния паралелизъм на ниво инструкции забавиха еднопроцесорната производителност до не повече от 22% годишно,
или около 5 пъти по-бавно, отколкото ако продължихме с 52% годишно. (Най-бързата производителност на SPEC от 2007 г. включва
автоматично паралелизиране с нарастващ брой ядра на чип всяка година, така че скоростта на еднопроцесорния процесор е по-
трудна за измерване. Тези резултати са ограничени до системи с един сокет, за да се намали въздействието на автоматичното
паралелизиране. ) Фигура 1.11 на страница 24 показва подобрението на тактовите честоти за същите тези три ери. Тъй като SPEC се
промени през годините, производителността на по-новите машини се оценява чрез коефициент на мащабиране, който свързва
производителността за две различни версии на SPEC (напр. SPEC89, SPEC92, SPEC95, SPEC2000 и SPEC2006).
Уви, Фигура 1.1 също показва, че този 17-годишен хардуерен ренесанс приключи.
От 2003 г. подобрението на производителността на един процесор е спаднало до по-малко от
22% на година поради двойното препятствие на максималното разсейване на мощността на чиповете с
въздушно охлаждане и липсата на повече паралелизъм на ниво инструкции, който да се използва
ефективно. Всъщност през 2004 г. Intel отмени своите проекти за високопроизводителни еднопроцесорни процесори
и се присъедини към други в декларацията, че пътят към по-висока производителност ще бъде през
множество процесори на чип, а не чрез по-бързи еднопроцесорни процесори.
Този крайъгълен камък сигнализира за историческо преминаване от разчитане единствено на
паралелизъм на ниво инструкции (ILP), основният фокус на първите три издания на тази книга,
към паралелизъм на ниво данни (DLP) и паралелизъм на ниво нишка (TLP), които бяха
включен в четвъртото издание и разширен в това издание. Това издание също добавя
складови компютри и паралелизъм на ниво заявка (RLP). като има предвид, че
компилаторът и хардуерът заговорничат да използват ILP имплицитно без вниманието на програмиста,
DLP, TLP и RLP са изрично паралелни, изисквайки
Machine Translated by Google
Лично
Клъстери/складови
Особеност мобилно устройство работен плот сървър Вграден
компютри
(PMD)
Цена на $100–$1000 $300–$2500 $5000–$10 000 000 $100 000–$200 000 000 $10–$100 000
системата
Критични
Цена, енергия, Цена- Пропускателна Цена-производителност, Цена, енергия,
проблеми
медийно производителност, способност, производителност, производителност,
при представяне, енергия, енергийна пропорционалност
достъпност, мащабируемост, енергия специфична за приложението
отзивчивост
проектирането на системата
графична
производителност
Фигура 1.2 Обобщение на петте основни компютърни класа и техните системни характеристики. Продажбите през 2010г
включва около 1,8 милиарда PMD (90% мобилни телефони), 350 милиона настолни компютри и 20 милиона сървъри. Общият брой
от продадените вградени процесори е близо 19 милиарда. Бяха доставени общо 6,1 милиарда чипове, базирани на ARM технология
2010. Обърнете внимание на широкия диапазон в системните цени за сървъри и вградени системи, които преминават от USB ключове до мрежа
рутери. За сървърите този диапазон възниква от необходимостта от много големи многопроцесорни системи за висок клас
обработка на транзакции.
Machine Translated by Google
Персонално мобилно устройство (PMD) е терминът, който прилагаме за колекция от безжични устройства
и така нататък. Цената е основна грижа, като се има предвид, че потребителската цена за целия продукт е
няколкостотин долара. Въпреки че акцентът върху енергийната ефективност често се дължи на използването
пластмаса срещу керамика - и липсата на вентилатор за охлаждане също ограничава общото количество
Раздел 1.5. Приложенията на PMD често са уеб базирани и медийно ориентирани, като например
PMD, времето за обработка на всеки видеокадър е ограничено, тъй като процесорът трябва
Подходите - понякога наричани меко реално време - възникват , когато е възможно от време на време да се
пропусне ограничението във времето за дадено събитие, стига да не бъдат пропуснати твърде много.
значението на размера на паметта се превръща в акцент върху размера на кода, тъй като размера на данните
се диктува от приложението.
Настолни компютри
Първият и вероятно все още най-големият пазар в доларово изражение е настолните компютри. Настолните
работни станции от висок клас, силно конфигурирани, които може да се продават за $2500. От 2008 г.
повече от половината настолни компютри, произведени всяка година, са лаптопи, работещи с батерии.
В целия този диапазон на цена и възможности пазарът на настолни компютри е склонен да бъде
цената на една система е това, което има най-голямо значение за клиентите на този пазар, а оттам и за
Сървъри
С преминаването към настолни компютри през 80-те години на миналия век ролята на сървърите нараства
за предоставяне на по-мащабни и по-надеждни файлови и компютърни услуги. Такива сървъри се
превърнаха в гръбнака на широкомащабните корпоративни компютри, заменяйки
традиционен мейнфрейм.
Приложение
Разходи за престой на час 1% 0,5% 0,1%
Фигура 1.3 Разходите, закръглени до най-близките $100 000 на неналична система, са показани чрез анализиране на разходите за
престой (по отношение на незабавно загубени приходи), като се приемат три различни нива на наличност и това време на престой се разпределя равномерно. Тези данни са
Планиране на изследвания.
Machine Translated by Google
Растежът на софтуера като услуга (SaaS) за приложения като търсене, социални мрежи, споделяне на
видео, мултиплейър игри, онлайн пазаруване и т.н. доведе до растежа на клас компютри, наречени
клъстери . Клъстерите са колекции от настолни компютри или сървъри, свързани чрез локални
мрежи, за да действат като един по-голям компютър. Всеки възел работи със собствена операционна
система и възлите комуникират с помощта на мрежов протокол. Най-големите от клъстерите се
наричат компютри от складов мащаб (WSC), тъй като са проектирани така, че десетки хиляди сървъри
да могат да действат като един. Глава 6 описва този клас изключително големи компютри.
Вградени компютри
микропроцесори, които изпълняват 100 милиона инструкции в секунда и струват под $5, и процесори
от висок клас за мрежови комутатори, които струват $100 и могат да изпълняват милиарди инструкции
в секунда. Въпреки че гамата от изчислителна мощност на пазара на вградени компютри е много
голяма, цената е ключов фактор при проектирането на компютри за това пространство. Изискванията
за производителност съществуват, разбира се, но основната цел често е да се отговори на
необходимостта от производителност на минимална цена, вместо да се постигне по-висока
производителност на по-висока цена.
По-голямата част от тази книга се отнася за проектирането, използването и производителността
на вградените процесори, независимо дали са готови микропроцесори или микропроцесорни ядра,
които ще бъдат сглобени с друг хардуер със специално предназначение. Наистина, третото издание на
тази книга включваше примери от вградени компютри, за да илюстрира идеите във всяка глава.
Уви, повечето читатели намират тези примери за незадоволителни, тъй като данните, които
управляват количествения дизайн и оценката на други класове компютри, все още не са разширени
добре до вградените компютри (вижте предизвикателствата с EEMBC, например, в раздел 1.8) .
Следователно засега оставаме с качествени описания, които не се вписват добре в останалата част от
книгата. В резултат на това в това и предишното издание консолидирахме вградения материал в
Приложение E. Вярваме, че отделно приложение подобрява потока от идеи в текста, като същевременно
позволява на читателите да видят как различните изисквания влияят на вградените компютри.
Паралелизмът на множество нива сега е движещата сила на компютърния дизайн във всичките четири
класа компютри, като енергията и цената са основните ограничения.
Има основно два вида паралелизъм в приложенията:
1. Паралелизмът на ниво данни (DLP) възниква, защото има много елементи от данни, с които може да
се работи едновременно.
2. Паралелизмът на ниво задача (TLP) възниква, защото се създават работни задачи, които могат да
работят независимо и до голяма степен паралелно.
Компютърният хардуер от своя страна може да използва тези два вида паралелизъм на приложения по
четири основни начина:
1. Паралелизмът на ниво инструкции използва паралелизма на ниво данни на скромни нива с помощта
на компилатора, използвайки идеи като конвейер и на средни нива, използвайки идеи като
спекулативно изпълнение.
2. Векторните архитектури и графичните процесори (GPU) използват паралелизъм на ниво данни чрез
прилагане на една инструкция към колекция от данни паралелно.
3. Паралелизмът на ниво нишка използва или паралелизъм на ниво данни, или паралелизъм на ниво
задача в тясно свързан хардуерен модел, който позволява взаимодействие между паралелни
нишки.
Тази таксономия е груб модел, тъй като много паралелни процесори са хибриди на
класовете SISD, SIMD и MIMD. Въпреки това е полезно да поставим рамка върху
пространството за проектиране на компютрите, които ще видим в тази книга.
Machine Translated by Google
разходите, мощността и наличността. Тази задача има много аспекти, включително дизайн на набор от инструкции,
1. Клас ISA—Почти всички ISA днес се класифицират като регистър с общо предназначение
архитектури, където операндите са или регистри, или места в паметта.
80x86 има 16 регистъра с общо предназначение и 16, които могат да съхраняват данни с плаваща
запетая, докато MIPS има 32 регистъра с общо предназначение и 32 регистъра с плаваща запетая
(виж Фигура 1.4). Двете популярни версии на този клас са регистър-памет
ISA, като 80x86, които имат достъп до паметта като част от много инструкции, и ISA за зареждане ,
като ARM и MIPS, които имат достъп до паметта само с инструкции за зареждане или съхраняване.
Фигура 1.4 MIPS регистри и конвенции за използване. В допълнение към 32-те регистъра с общо
предназначение (R0–R31), MIPS има 32 регистъра с плаваща запетая (F0–F31), които могат да съдържат
или 32-битово число с единична точност, или 64-битово число с двойна точност.
Трансфери на данни Преместване на данни между регистри и памет или между цяло число и FP или специални регистри;
единственият режим на адрес на паметта е 16-битово изместване + съдържание на GPR
LB, LBU, SB Зареждане на байт, зареждане на байт без знак, съхраняване на байт (към/от целочислени регистри)
LH, LHU, SH Зареждане на половин дума, зареждане на половин дума без знак, съхраняване на половин дума (към/от целочислени регистри)
LW, LWU, SW Зареждане на дума, зареждане на неподписана дума, съхраняване на дума (към/от целочислени регистри)
LD, SD Зареждане на двойна дума, съхраняване на двойна дума (към/от целочислени регистри)
LS, LD, SS, SD Заредете SP float, заредете DP float, запазете SP float, запазете DP float
Аритметично/логическо Операции с целочислени или логически данни в GPR; аритметично прихващане със знак при препълване
DADD, DADDI, DADDU, DADDIU Добавяне, незабавно добавяне (всички непосредствени са 16 бита); подписани и неподписани
DMUL, DMULU, DDIV, Умножение и деление, със знак и без знак; умножение-събиране; всички операции приемат и дават 64-битови
ДДИВУ, МАДД стойности
И, АНДИ И, и незабавно
ИЛИ, ORI, XOR, XORI Или, или незабавно, изключително или, изключително или незабавно
LUI Заредете горната част незабавно; зарежда битове от 32 до 47 от регистъра с незабавно, след което разширява знака
DSLL, DSRL, DSRA, DSLLV, Промени: незабавни (DS__) и променлива форма (DS__V); отместванията са отместване наляво логическо, дясно
DSRLV, DSRAV логическо, дясно аритметично
SLT, SLTI, SLTU, SLTIU Задайте по-малко от, задайте по-малко от непосредствено, със знак и без знак
BC1T, BC1F Бит за тестово сравнение в регистъра на състоянието на FP и разклонението; 16-битово отместване от PC + 4
MOVN, MOVZ Копирайте GPR в друг GPR, ако третият GPR е отрицателен, нула
ДЖАЛ, ДЖАЛР Прескачане и връзка: запазване на PC + 4 в R31, целта е свързана с PC (JAL) или регистър (JALR)
MADD.PS DIV.D, DIV.S, DIV.PS CVT._._ Умножение-събиране на DP, SP числа и двойки SP числа
Фигура 1.5 Подгрупа от инструкции в MIPS64. SP = единична точност; DP = двойна точност. Приложение А дава
много повече подробности за MIPS64. За данни най-значимият битов номер е 0; най-малкото е 63.
Machine Translated by Google
6. Инструкции за контрол на потока - Поддържат се практически всички ISA, включително тези три
условни разклонения, безусловни скокове, извиквания на процедури и връщания. всичко
три използват PC-относително адресиране, където адресът на клона е посочен от an
адресно поле, което се добавя към компютъра. Има някои малки разлики. MIPS
31 26 25 21 20 16 15 11 10 65 0
аз
операционен код
rs rt незабавно
31 26 25 21 20 16 15
31 26 25
31 26 25 21 20 16 15 11 10 65 0
31 26 25 21 20 16 15
Фигура 1.6 Формати на архитектурата на набора инструкции MIPS64. Всички инструкции са 32 бита
дълго. Форматът R е за целочислени операции от регистър към регистър, като DADDU, DSUBU,
и така нататък. Форматът I е за прехвърляне на данни, разклонения и незабавни инструкции, като такива
като LD, SD, BEQZ и DADDI. Форматът J е за скокове, форматът FR за плаваща запетая
операции и FI формат за разклонения с плаваща запетая.
Machine Translated by Google
Лично мобилно устройство Изпълнение в реално време за набор от задачи, включително интерактивно изпълнение за графики,
видео и аудио; енергийна ефективност (гл. 2, 3, 4, 5; приложение A)
Десктоп с общо предназначение Балансирана производителност за набор от задачи, включително интерактивна производителност за
графики, видео и аудио (Ch. 2, 3, 4, 5; App. A)
Сървъри Поддръжка на бази данни и обработка на транзакции; подобрения за надеждност и наличност; поддръжка
за мащабируемост (гл. 2, 5; приложение A, D, F)
Клъстери/складови компютри Производителност за много независими задачи; корекция на грешки в паметта; пропорционалност
на енергията (гл. 2, 6; приложение F)
Вградени компютри Често изисква специална поддръжка за графики или видео (или друго специфично за приложението
разширение); може да са необходими ограничения на мощността и контрол на мощността;
ограничения в реално време (гл. 2, 3, 5; приложение A, E)
Обектен код или двоична Архитектурата на набора от инструкции е напълно дефинирана – малка гъвкавост – но не е
съвместимост необходима инвестиция в софтуер или програми за пренасяне (приложение A)
Изисквания към операционната система Необходими функции за поддръжка на избрана ОС (гл. 2; приложение B)
Размер на адресното пространство Много важна характеристика (гл. 2); може да ограничи приложенията
Управление на паметта Изисква се за съвременна ОС; могат да бъдат странирани или сегментирани (гл. 2)
защита Различни нужди от ОС и приложения: страница срещу сегмент; виртуални машини (гл. 2)
Плаваща запетая аритметика: стандарт IEEE 754 (приложение J), специална аритметика за обработка на графики или сигнали
I/O интерфейси За I/O устройства: Serial ATA, Serial Attached SCSI, PCI Express (приложение D, F)
Програмни езици Езиците (ANSI C, C++, Java, Fortran) засягат набора от инструкции (приложение A)
Фигура 1.7 Обобщение на някои от най-важните функционални изисквания, пред които е изправен един архитект. Лявата ръка
колоната описва класа на изискването, докато дясната колона дава конкретни примери. Дясната ръка
колоната също така съдържа препратки към глави и приложения, които се занимават с конкретни въпроси.
Ако архитектурата на набора от инструкции трябва да бъде успешна, тя трябва да бъде проектирана така, че да оцелее
бързи промени в компютърните технологии. В края на краищата, успешен нов набор от инструкции
капацитет на чипа, тъй като производителите на DRAM обикновено предлагат няколко продукта с
бавно в изданията на тази книга, както показва фигура 1.8 . Има дори опасения дали темпът на растеж
клетки [Kim 2005]. Глава 2 споменава няколко други технологии, които могат
Фигура 1.8 Промяна в скоростта на подобряване на капацитета на DRAM с течение на времето. Първите две
изданията дори нарекоха този процент DRAM Growth Rule of Thumb, тъй като беше така
DRAM. Днес някои се съмняват дали капацитетът на DRAM изобщо може да се подобри с 5 до 7
Тези бързо променящи се технологии оформят дизайна на компютър, който със скорост и
технологични подобрения може да има живот от три до пет години. Ключови технологии като
DRAM, Flash и диск се променят достатъчно, така че дизайнерът трябва да планира тези промени.
Наистина, дизайнерите често проектират за следващата технология, знаейки, че когато даден
продукт започне да се доставя в обем, следващата технология може да бъде най-рентабилната или
може да има предимства в производителността. Традиционно цената е намаляла приблизително
със скоростта, с която се увеличава плътността.
Както ще видим в раздел 1.8, честотната лента или пропускателната способност е общото количество
работа, извършена за дадено време, като например мегабайта в секунда за прехвърляне на диск.
За разлика от това, латентността или времето за реакция е времето между началото и завършването
на събитие, като например милисекунди за достъп до диска. Фигура 1.9 изобразява относителната
Machine Translated by Google
100 000
Микропроцесор
10 000
мрежа
1000
памет
ритба
илнеаетн
атаен етП
соа
ттдн
сооо н
ч
о
л
диск
100
10
(Подобрение на латентността
= подобрение на честотната лента)
1
1 10 100
Фигура 1.9 Графика логаритмичен график на честотната лента и етапите на закъснение от Фигура 1.10
по отношение на първия етап. Обърнете внимание, че латентността се подобри 6X до 80X, докато
честотната лента се подобри около 300X до 25 000X. Актуализирано от Patterson [2004].
Микропроцесор 16-битов 32-битов 5-степенен 2-посочен Извън ред Извън ред Многоядрени
адрес/ адрес/ тръбопровод, суперскаларен, 3-посочен свръхтръбопроводен, OOO 4-пътен
автобус, автобус, на чип I & D 64-битова шина суперскаларен на чип L2 L3 кеш на
микрокодиран микрокодиран кешове, FPU кеш памет чип, Turbo
Продукт Intel 80286 Intel 80386 Intel 80486 Intel Pentium Intel Pentium Pro Intel Pentium 4 Intel Core i7
Транзистори 134 000 275 000 1 200 000 3 100 000 5 500 000 42 000 000 1 170 000 000
Процесори/чип 1 1 1 1 1 1 4
Латентност (часовници) 6 5 5 5 10 22 14
Модул памет Режим DRAM страница Бърза страница Бърза страница Синхронен Двойни данни DDR3
DRAM режим DRAM режим DRAM DRAM скорост SDRAM SDRAM
Твърд диск 3600 RPM 5400 RPM 7200 RPM 10 000 RPM 15 000 RPM 15 000 RPM
Формат на диска 5,25 инча 5,25 инча 3,5 инча 3,5 инча 3,5 инча 3,5 инча
Диаметър на носителя 5,25 инча 5,25 инча 3,5 инча 3,0 инча 2,5 инча 2,5 инча
Фигура 1.10 Етапи на производителността за период от 25 до 40 години за микропроцесори, памет, мрежи и дискове. The
етапи на микропроцесора са няколко поколения процесори IA-32, преминаващи от 16-битова шина, микрокодирани
80286 към 64-битова шина, многоядрен, извънредно изпълнение, суперконвейерен Core i7. Важните етапи на модула памет са извършени
от 16-битова обикновена DRAM до 64-битова синхронна DRAM с двойна скорост на предаване на данни версия 3. Ethernet напреднал от
10 Mbits/sec до 100 Gbits/sec. Важните етапи на диска се основават на скоростта на въртене, подобрявайки се от 3600 RPM на 15 000
RPM. Всеки случай е честотната лента в най-добрия случай, а латентността е времето за проста операция, без да се допуска конкуренция.
Актуализирано от Patterson [2004].
Machine Translated by Google
към 8-битови, към 16-битови, към 32-битови, към 64-битови микропроцесори. Съвсем наскоро, плътност
разбира се, тъй като размерът на характеристиките се свива, проводниците стават по-къси, но съпротивлението
и капацитетът на единица дължина се влошават. Тази връзка е сложна, тъй като и съпротивлението, и
транзистора, което създава допълнителни предизвикателства за дизайнера. През последните няколко години, в
в допълнение към границата на разсейване на мощността, забавянето на кабела се превърна в основен дизайн
всеки клас компютър. Първо, властта трябва да бъде въведена и разпределена наоколо
чипът, а съвременните микропроцесори използват стотици щифтове и множество слоеве за свързване само
Как един системен архитект или потребител трябва да мисли за производителност, мощност и
Първо, каква е максималната мощност, която един процесор изисква? Среща с това
търсенето може да бъде важно за осигуряване на правилна работа. Например, ако процесорът се опита да черпи
черпене на повече ток, отколкото системата може да достави), резултатът обикновено е спад на напрежението,
наречена топлинна проектна мощност (TDP), тъй като определя изискването за охлаждане. TDP не е нито пикова
действителната средна мощност, която ще бъде консумирана по време на дадено изчисление, което е
вероятно ще бъде още по-ниско. Типичното захранване за една система обикновено е оразмерено до
топлината, тъй като максималната мощност (и следователно топлината и повишаването на температурата) може
надвишава дългосрочната средна стойност, определена от TDP. Първо, когато топлинната температура се
като по този начин намалява мощността. Ако тази техника не е успешна, се активира второ прекъсване при
енергийна ефективност. Спомнете си, че мощността е просто енергия за единица време: 1 ват =
енергия или сила? Като цяло енергията винаги е по-добра метрика, защото е свързана с
конкретна задача и времето, необходимо за тази задача. По-специално, енергията за изпълнение на работно
неговата консумация на енергия ще бъде 1,2 × 0,7 = 0,84, което е очевидно по-добро.
Някой може да възрази, че в голям сървър или облак е достатъчно да се вземе предвид
средна мощност, тъй като натоварването често се приема за безкрайно, но това е погрешно. Ако нашият облак
облакът би свършил по-малко работа за същото количество изразходвана енергия. Използване на енергия
сравняването на алтернативите избягва този капан. Всеки път, когато имаме фиксирано работно натоварване,
консумирана енергия.
като ограничение: например един чип може да бъде ограничен до 100 вата. Може да се използва
Machine Translated by Google
като показател, ако работното натоварване е фиксирано, но тогава това е просто вариант на истинския показател
енергия за задача.
×
Енергодинамичен Капацитивен товар Напрежение2
× ×
Енергийна динамичност 1 2⁄ Капацитивен товар Напрежение2
×
Powerdinamical 1 2⁄ × Капацитивен товар Напрежение2 × Превключване на честотата
Пример Някои микропроцесори днес са проектирани да имат регулируемо напрежение, така че 15%
намаляването на напрежението може да доведе до 15% намаление на честотата. Какво би било
въздействието върху динамичната енергия и върху динамичната мощност?
2
Energynew
------------------------ )(Напрежение
0,852 = == 0,72 0,85 ×
------------------------------------------
Energyold Напрежение2
като по този начин намалява енергията до около 72% от първоначалната. За мощност добавяме съотношението
на честотите
10 000
Intel Nehalem Xeon
Intel Pentium4 Xeon
3330 MHz през 2010 г
3200 MHz през 2003 г
Една година
Digital Alpha 21064
150 MHz през 1992 г
100
ач
)zтHскM
авто е Т(
MIPS M2000
25 MHz през 1989 г
40%/година
Цифров VAX-11/780
5 MHz през 1978 г
15%/година
1 1978 1980 1982 1984 1986 1988 1990 1992 1994 1996 1998 2000 2002 2004 2006 2008 2010 2012
Фигура 1.11 Нарастване на тактовата честота на микропроцесорите на Фигура 1.1. Между 1978 г. и 1986 г. тактовата честота се подобрява
с по-малко от 15% на година, докато производителността се подобрява с 25% на година. По време на „ренесансовия период“ на 52%
подобрение на производителността на година между 1986 г. и 2003 г., тактовите честоти скочиха с почти 40% на година. Оттогава честотата
на часовника е почти равна, нараствайки с по-малко от 1% на година, докато производителността на един процесор се подобрява с по-
малко от 22% на година.
Machine Translated by Google
използване на транзистори; в миналото това е била зона със суров силиций. Следователно съвременните
модули за пестене на енергия и динамична мощност. Например, ако няма плаваща запетая
предлагат няколко тактови честоти и напрежения, в които да работят, които използват по-ниски
сила и енергия. Фигура 1.12 показва потенциалните икономии на енергия чрез DVFS
за сървър, тъй като работното натоварване се свива за три различни тактови честоти: 2,4 GHz,
1,8 GHz и 1 GHz. Общата икономия на енергия на сървъра е около 10% до 15%
3. Дизайн за типичен случай. Като се има предвид, че PMD и лаптопите често са неактивни, паметта и
режим, който се върти с по-ниски скорости, когато е неактивен, за да пести енергия. Уви, не можете
достъп до DRAM или дискове в тези режими, така че трябва да се върнете към напълно активни
режим за четене или запис, без значение колко ниска е скоростта на достъп. Както е споменато
100
2,4 GHz
1,8 GHz
80
1 GHz
60
тМ
%
акои
тсон)щ п
о(
40
20
типичен случай на тежка употреба при високи работни температури, разчитайки на вграден чип
механизъм, ако някой наистина изпълнява програми, които консумират много повече
4. Овърклок. Intel започна да предлага режим Turbo през 2008 г., където чип
само няколко ядра, докато температурата започне да се повишава. Например 3,3 GHz
микропроцесорите всяка година от 2008 г. на Фигура 1.1 предлагат временно овърклокване с около 10% над
резбован код, тези микропроцесори могат да изключат всички ядра освен едно и да го стартират
при още по-висока тактова честота. Имайте предвид, че докато операционната система може да се изключи
температура!
разсейването на мощността в CMOS, статичната мощност се превръща във важен проблем, защото
(захранване) към неактивни модули за контрол на загубата поради изтичане. През 2011 г.,
целта за изтичане е 25% от общата консумация на енергия, като изтичането при високопроизводителни
конструкции понякога далеч надхвърля тази цел. Изтичането може да бъде толкова високо
като 50% за такива чипове, отчасти поради големите SRAM кешове, които се нуждаят от захранване
система, може да има смисъл да използвате по-бърз, по-малко енергийно ефективен процесор
оставете останалата част от системата да премине в режим на заспиване. Тази стратегия е известна като
състезание до спиране.
основната оценка сега е задачи на джаул или производителност на ват, за разлика от производителността на
промяна, като по този начин датира книги за запознанства, и защото проблемите са фини и се различават в различните
индустриални сегменти. И все пак, разбирането на цената и нейните фактори е от съществено значение за
функцията трябва да бъде включена в проекти, където цената е проблем. (Представете си архитекти
Този раздел обсъжда основните фактори, които влияят върху цената на компютъра
Цената на произведения компютърен компонент намалява с течение на времето дори без големи подобрения
добив— процентът на произведените устройства, които оцеляват след процедурата за тестване. Независимо
дали става въпрос за чип, платка или система, дизайни, които имат два пъти по-висока производителност
ще има половината от цената.
е спаднал в дългосрочен план. Тъй като DRAM паметите обикновено се оценяват в тясна връзка с цената - с
В период на значителна конкуренция обаче цената има тенденция да следи отблизо разходите
Обемът е вторият ключов фактор при определяне на разходите. Увеличаването на обемите влияе
обучение, което е отчасти пропорционално на броя на произведените системи (или чипове). Второ, обемът
цената намалява с около 10% за всяко удвояване на обема. Освен това, обем
намалява размера на разходите за разработка, които трябва да бъдат амортизирани от всеки компютър, като
в ниския край, макар и с много ограничени печалби (както е типично за всяка стока
бизнес).
В този раздел се фокусираме върху цената на матриците, като обобщаваме ключовите проблеми при тестването
и опаковка накрая.
Първо трябва да се научите как да прогнозирате броя на добрите чипове на вафла
научаване колко матрици пасват на пластина и след това научаване как да прогнозирате процента
на тези, които ще работят. Оттам е лесно да се предвидят разходите:
Цена на вафла
Цена на матрицата = -------------------------------------------------- --------------
×
Матрица за пластина Добив на матрица
Най-интересната характеристика на този първи член от уравнението за цената на чипа е неговата чувствителност
Фигура 1.13 Снимка на матрица на микропроцесор Intel Core i7, която е оценена в глави 2 до 5.
Размерите са 18,9 mm на 13,6 mm (257 mm2 ) при 45 nm процес. (С любезното съдействие на
Intel.)
Контролер на паметта
Извън
ред
планиране и Изпълнителни
единици
ангажимент
за инструкции
М М
и и
с с
Ядро Ядро Ядро Ядро Декодиране
°С °С
М Q на
I/O I/O Подреждане L1
д u инструкции,
кеш
и изпълнение
м д преименуване
на паметта данни
о u
на регистър и микрокод
r д
г
Фигура 1.14 Етажен план на матрицата Core i7 на Фигура 1.13 отляво с близък план на етажния план на второто ядро вдясно.
Machine Translated by Google
Фигура 1.15 Тази пластина от 300 mm съдържа 280 пълни матрици Sandy Bridge, всяка 20,7 на
10,5 mm при 32 nm процес. (Sandy Bridge е наследникът на Intel на Nehalem, използван в
Core i7.) При 216 mm2 , формулата за матрици на пластина оценява 282. (С любезното съдействие на Intel.)
2
× Диаметър на вафлата/2 ) π × диаметър на пластината
= π( ----------------------------------------------
Матрица на вафла
– -------------------------------------------------- ---------
Зона на матрицата
2 Площ
× на матрицата
Първият член е съотношението на площта на пластината (πr2 ) към площта на матрицата. Второто компенсира
Пример Намерете броя на матриците на 300 mm (30 cm) пластина за матрица, която е 1,5 cm на
страна и за матрица, която е 1,0 см отстрани.
2
× π × 30 706.9 94.2
Матрица на вафла
= π ( ) 30 2⁄
– ---------------------------- ----------------------- = ------------- –
= ---------- 270
2.25 2 2,25 × 2.25 2.12
Тъй като площта на по-голямата матрица е 2,25 пъти по-голяма, има приблизително 2,25 като
много по-малки матрици на пластина:
2
× π × 30 706.9 94.2
Матрица на вафла
= π ( ) 30 2⁄
– ---------------------------- ----------------------- = ------------- –
= ---------- 640
1,00 2 1,00 × 1,00 1.41
= н
× ⁄ (1 1 Дефекти
Добив на матрицата Добив на пластини + на единица площ Площ ×
на матрицата )
Пример Намерете добива на матрицата за матрици, които са 1,5 cm отстрани и 1,0 cm отстрани, като приемем-
с плътност на дефектите от 0,031 на cm2 и N е 13,5.
Отговор Общата площ на матрицата е 2,25 cm2 и 1,00 cm2 . За по-голямата матрица добивът е
Тоест по-малко от половината от всички големи матрици са добри, но две трети от малките
матриците са добри.
Machine Translated by Google
1.7 Надеждност 33
За първите четири издания на тази книга цената означаваше цената за изграждане на компютър,
а цената означаваше цената за закупуване на компютър. С появата на складови компютри,
които съдържат десетки хиляди сървъри, разходите за работа с компютрите са значителни в
допълнение към разходите за покупка.
Както показва Глава 6 , амортизираната покупна цена на сървъри и мрежи е малко над 60%
от месечните разходи за работа с компютър от складов мащаб, като се предполага кратък живот
на ИТ оборудването от 3 до 4 години. Около 30% от месечните оперативни разходи са за
потребление на електроенергия и амортизирана инфраструктура за разпределяне на енергия и
охлаждане на ИТ оборудването, въпреки че тази инфраструктура се амортизира за 10 години.
По този начин, за да намалят оперативните разходи в компютър от складов мащаб, компютърните
архитекти трябва да използват енергията ефективно.
1.7 Надеждност
В исторически план интегралните схеми са били един от най-надеждните компоненти на
компютъра. Въпреки че техните изводи може да са уязвими и могат да възникнат грешки по
комуникационните канали, процентът на грешки вътре в чипа е много нисък. Тази
конвенционална мъдрост се променя, тъй като се насочваме към размери на характеристиките
от 32 nm и по-малки, тъй като както преходните дефекти, така и постоянните дефекти ще станат
по-често срещани, така че архитектите трябва да проектират системи, за да се справят с тези
предизвикателства. Този раздел дава бърз преглед на проблемите, свързани с надеждността,
оставяйки официалната дефиниция на термините и подходите към Раздел D.3 в Приложение D.
Компютрите са проектирани и конструирани на различни нива на абстракция. Можем да се
спуснем рекурсивно надолу през компютър, виждайки как компонентите се разширяват до цели
подсистеми, докато не се натъкнем на отделни транзистори. Въпреки че някои неизправности
са широко разпространени, като загубата на мощност, много от тях могат да бъдат ограничени
до единичен компонент в модул. По този начин пълният отказ на модул на едно ниво може да
се счита просто за грешка на компонента в модул от по-високо ниво. Това разграничение е
полезно в опитите да се намерят начини за изграждане на надеждни компютри.
Един труден въпрос е да се реши кога една система работи правилно. Тази философска
точка се конкретизира с популярността на интернет услугите.
Доставчиците на инфраструктура започнаха да предлагат споразумения за ниво на обслужване
(SLA) или цели за ниво на обслужване (SLO), за да гарантират, че техните мрежови или енергийни
услуги ще бъдат надеждни. Например, те биха платили на клиента неустойка, ако не изпълни
споразумението повече от няколко часа на месец. По този начин SLA може да се използва, за да
се реши дали системата работи или не работи.
Machine Translated by Google
Преходите между тези две състояния се причиняват от повреди (от състояние 1 към
състояние 2) или възстановявания (2 към 1). Количественото определяне на тези преходи
води до двете основни мерки за надеждност:
MTTF
= -------------------------------------------
Наличност на модула
( MTTF MTTR + )
1.7 Надеждност 35
Отговор Имаме нужда от формула, за да покажем какво да очакваме, когато можем да толерираме провал и все пак
предоставят услуги. За да опростим изчисленията, приемаме, че животът на
компонентите са експоненциално разпределени и че няма зависимост
между повредите на компонентите. MTTF за нашите резервни захранвания е
средното време до повреда на едно захранване, разделено на шанса другото да се повреди
се провали, преди първият да бъде заменен. По този начин, ако шансът за втори провал преди
ремонтът е малък, тогава MTTF на двойката е голям.
Тъй като имаме две захранвания и независими повреди, средното време
×
2 MTTR захранване 2 24 ×
което прави двойката около 4150 пъти по-надеждна от едно захранване.
Machine Translated by Google
След като определихме количествено цената, мощността и надеждността на компютърната технология, ние сме готови
Когато казваме, че един компютър е по-бърз от друг, какво имаме предвид? Потребителят на
настолен компютър може да каже, че компютърът е по-бърз, когато програмата се изпълнява за
по-малко време, докато администратор на Amazon.com може да каже, че компютърът е по-бърз,
когато извършва повече транзакции на час. Потребителят на компютъра се интересува от
намаляване на времето за реакция – времето между началото и завършването на дадено събитие
– наричано още време за изпълнение. Операторът на компютър от складов мащаб може да се
интересува от увеличаване на производителността - общото количество работа, извършена за
дадено време.
При сравняване на алтернативи на дизайна често искаме да свържем производителността на
два различни компютъра, да речем, X и Y. Фразата „X е по-бърз от Y“ се използва тук, за да означава,
че времето за реакция или времето за изпълнение е по-ниско на X, отколкото на Y за дадената
задача. По-специално, „X е n пъти по-бързо от Y“ ще означава:
Време за изпълнение Y
= n
--------------------------------------
Време за изпълнение X
1
----------------------------------
Потребителите на компютри, които рутинно изпълняват едни и същи програми, биха били перфектните
щастлива ситуация обаче. Повечето трябва да разчитат на други методи за оценка на компютри, а често и на
други оценители, надявайки се, че тези методи ще предскажат производителността за тяхното използване на
новия компютър.
Бенчмаркове
вградени процесори!
Друг въпрос са условията, при които се провеждат бенчмарковете. един
много програми или ще забави работата на други. За да ограничат този процес и да увеличат значимостта
изискват от доставчика да използва един компилатор и един набор от флагове за всички програми в
същия език (C++ или C). В допълнение към въпроса за флаговете на компилатора,
например бенчмарковете на бази данни разчитат на стандартни програми за бази данни, които са
десетки милиони редове код. Компаниите за бази данни са много малко вероятни
същият изход.
Machine Translated by Google
Настолни бенчмаркове
fma3d
sixtrack
Фигура 1.16 Програми SPEC2006 и еволюцията на SPEC бенчмарковете във времето, с цели програми над линията и
програми с плаваща запетая под линията. От 12 цели програми SPEC2006, 9 са написани на C, а останалите на C++.
За програмите с плаваща запетая разделянето е 6 във Fortran, 4 в C++, 3 в C и 4 в смесени C и Fortran. Фигурата
показва всичките 70 програми в изданията от 1989, 1992, 1995, 2000 и 2006 г. Описанията на бенчмарковете вляво
са само за SPEC2006 и не се отнасят за по-ранни версии. Програми в един и същи ред от различни поколения на
SPEC обикновено не са свързани; например fpppp не е CFD код като bwaves. Gcc е възрастният гражданин на групата.
Само 3 програми с цели числа и 3 програми с плаваща запетая са оцелели след три или повече поколения. Имайте
предвид, че всички програми с плаваща запетая са нови за SPEC2006. Въпреки че някои се пренасят от поколение
на поколение, версията на програмата се променя и или входът, или размерът на бенчмарка често се променят, за
да се увеличи времето за изпълнение и да се избегнат смущения в измерването или доминиране на времето за
изпълнение от някакъв фактор, различен от процесорното време.
Machine Translated by Google
Сървърни бенчмаркове
Точно както сървърите имат множество функции, така има и множество видове бенчмаркове.
Най-простият бенчмарк е може би ориентиран към производителността на процесора
бенчмарк. SPEC CPU2000 използва бенчмарковете на SPEC CPU, за да създаде прост бенчмарк за
обработва транзакции, които се състоят от достъп до база данни и актуализации. Системите за резервации
в средата на 80-те години на миналия век група загрижени инженери сформираха независимия от доставчика
Първият TPC бенчмарк, TPC-A, беше публикуван през 1985 г. и оттогава е публикуван
през 1992 г. симулира сложна среда за заявки. TPC-H модели ad hoc решение
(OLTP) работно натоварване, което симулира клиентски акаунти на брокерска фирма. Повечето
скорошно усилие е TPC Energy, което добавя енергийни показатели към всички съществуващи TPC
бенчмаркове.
способност се измерва само когато ограничението за време за реакция е спазено. За моделиране на системи
условия както на потребителите, така и на базата данни, към която се прилагат транзакциите.
И накрая, цената на системата за бенчмарк система също трябва да бъде включена, позволявайки
точни сравнения на разходите и ефективността. TPC промени своята ценова политика така
че има единна спецификация за всички показатели на TPC и да позволи проверка на цените, които TPC
публикува.
резултати. Докладът за сравнителен анализ на SPEC изисква обширно описание на компютъра и флаговете
както в таблична форма, така и като графика. Докладът за сравнителен анализ на TPC е още по-пълен, тъй
Тези доклади са отлични източници за намиране на реалните разходи за изчислителни системи, тъй като
относителни количествени ползи в набор от показатели, за които се смята, че са уместни. По същия начин
След като сме избрали да измерваме ефективността с пакет за сравнение, бихме искали да
можем да обобщим резултатите от ефективността на пакета в едно число. Един прост подход за
изчисляване на обобщен резултат би бил да се сравнят средните аритметични стойности на
времето за изпълнение на програмите в пакета.
Уви, някои SPEC програми отнемат четири пъти повече време от други, така че тези програми
биха били много по-важни, ако средноаритметичната стойност беше единственото число,
използвано за обобщаване на производителността. Алтернатива би била да се добави коефициент
на тежест към всеки бенчмарк и да се използва среднопретеглената аритметична стойност като
единствено число за обобщаване на ефективността. Тогава проблемът ще бъде как да изберете
тежести; тъй като SPEC е консорциум от конкурентни компании, всяка компания може да има
свой любим набор от тегла, което би затруднило постигането на консенсус. Един подход е да се
използват тегла, които карат всички програми да се изпълняват еднакво време на някакъв
референтен компютър, но това отклонява резултатите спрямо характеристиките на
производителността на референтния компютър.
Вместо да избираме тегла, бихме могли да нормализираме времето за изпълнение към
референтен компютър, като разделим времето на референтния компютър на времето на
компютъра, който се оценява, като се получи съотношение, пропорционално на
производителността. SPEC използва този подход, наричайки съотношението SPECRatio. Той има
особено полезно свойство, че съвпада с начина, по който сравняваме производителността на
компютъра в този текст - а именно, сравнявайки коефициенти на производителност. Да
предположим например, че SPECRatio на компютър A на бенчмарк е 1,25 пъти по-висок от
компютър B; тогава ще знаем:
н н
Средна геометрична
= samplei
i=1
Machine Translated by Google
Ултра 5
време Opteron Итаний 2 Opteron/Itanium Itanium/Opteron
Бенчмаркове (сек) време (сек) SPECRatio време (сек) SPECRatio пъти (сек) SPECRatios
изравнявам се
1300 72.6 17.92 36.3 35,78 2.00 2.00
Фигура 1.17 Времена за изпълнение на SPECfp2000 (в секунди) за Sun Ultra 5—референтния компютър на SPEC2000—
и времена за изпълнение и SPECRatios за AMD Opteron и Intel Itanium 2. (SPEC2000 умножава съотношението на времената за изпълнение
по 100, за да премахне десетичната запетая от резултата, така че 20,86 се отчита като 2086.) Последните две колони
показва съотношенията на времето за изпълнение и SPECRatios. Тази фигура показва неуместността на референтния компютър
в относителна производителност. Съотношението на времената за изпълнение е идентично на съотношението на SPECRatios, а съотношението на
средно геометрично (27,12/20,86 = 1,30) е идентично със средното геометрично на съотношенията (1,30).
n SPECRatio Ai
н
Средногеометрично A i=1 SPECRatio Ai
------------------------------------------- = ------------------------------------------------ = ----------------------------------
н
n SPECRatio Bi
Средна геометрична Б i=1
n SPECRatio Bi
i=1
н н н
Време за изпълнение Ai Време за изпълнение Изпълнение
----------------------------------
= = ---------------------------------------------- =
Ai n
-------------------------------------------------- -------
Bi n
н
i=1 Референция за време на изпълнение
-------------------------------------------------- -------
i=1 Време за изпълнение Ai i=1 PerformanceBi
Време за изпълнениеBi
Възползвайте се от паралелизма
Принцип на местността
Фокусирането върху общия случай работи както за мощност, така и за разпределение на ресурси
и производителност. Устройството за извличане и декодиране на инструкции на процесора може
да се използва много по-често от множителя, така че първо го оптимизирайте. Работи върху
надеждност също. Ако сървър на база данни има 50 диска за всеки процесор, надеждността на
съхранението ще доминира над надеждността на системата.
В допълнение, честият случай често е по-прост и може да се направи по-бързо от
рядък случай. Например, когато събираме две числа в процесора, можем
очаква препълването да бъде рядко обстоятелство и следователно може да подобри производителността
чрез оптимизиране на по-често срещания случай на липса на препълване. Този акцент може
забавете случая, когато възникне препълване, но ако това е рядко, цялостната производителност ще
бъде подобрена чрез оптимизиране за нормалния случай.
Machine Translated by Google
В този текст ще видим много случаи на този принцип. При прилагането на това
прост принцип, ние трябва да решим какъв е честият случай и доколко производителността може да
бъде подобрена, като направим този случай по-бърз. Основен закон, т.нар
Законът на Амдал може да се използва за количествено определяне на този принцип.
Законът на Амдал
Алтернативно,
Фракционно подобрено
+ -------------------------------------
Време за изпълнениеново = Старо време за изпълнение × ( 1 – Подобрена фракция )
Подобрена скорост
Machine Translated by Google
Фракционно подобрено
Време за изпълнениеново
( 1 – Подобрена фракция ) + -------------------------------------
Подобрена скорост
1 1
--------------------- = ---------- 1,56
Отговор фракционно подобрен = 0,4; Повишена скорост = 10; Speedupoverall =
0,4 0,64
0,6 + -------
10
Законът на Амдал може да послужи като ръководство за това колко ще бъде подобрението
подобряване на производителността и как да се разпределят ресурсите, за да се подобри
ефективността на разходите. Целта, разбира се, е да се харчат ресурси пропорционално на времето
се изразходва. Законът на Амдал е особено полезен за сравняване на цялостната система
производителност на две алтернативи, но може да се приложи и за сравняване на две алтернативи
на дизайна на процесора, както показва следният пример.
Пример Обичайна трансформация, изисквана в графичните процесори, е корен квадратен. Реализациите на корен
квадратен с плаваща запетая (FP) се различават значително по отношение на производителността,
особено сред процесорите, предназначени за графика. Да предположим, че FP корен квадратен
(FPSQR) е отговорен за 20% от времето за изпълнение на критична графика
бенчмарк. Едно предложение е да се подобри хардуерът на FPSQR и да се ускори това
операция с коефициент 10. Другата алтернатива е просто да се опитате да направите всички FP
инструкциите в графичния процесор се изпълняват по-бързо с коефициент 1,6; FP инструкции
са отговорни за половината от времето за изпълнение на приложението. Дизайнерският екип
вярва, че могат да накарат всички FP инструкции да работят 1,6 пъти по-бързо със същото
усилие, както се изисква за бърз квадратен корен. Сравнете тези две алтернативи на дизайна.
Machine Translated by Google
1 1
---------------------------------- = ---------- = 1,22
SpeedupFPSQR = 0,2 0,82
( 1 0,2 – ) + -------
10
1 1
SpeedupFP =
---------------------------------- = ---------------- = 1,23
0,5 0,8125
( 1 0,5 – ) + -------
1.6
1 1 1 1 1
= +++
10 ----------------------
× ----------------------- + ------------------- ------------------- -------------------
Система за процент на неуспех
1 000 000 500 000 200 000 200 000 1 000 000
10 2 5 5 1 ++++ 23
= ---------------------------------------------- = --------------------------------------
1 1
= ---------------------------------------------- = ---------- = 1,28
Подобряване на захранващата двойка 0,22 0,78
( 1 0,22 – ) + -----------
4150
цикли или часовникови цикли. Компютърните дизайнери се отнасят за времето на часовниковия период с
нейната продължителност (напр. 1 ns) или по нейната скорост (напр. 1 GHz). Процесорното време за една програма може
=
Време на процесора Тактови цикли на процесора за програма ×Време на тактовия цикъл
или
Тактова честота
Брой инструкции
= ×
CPU време Брой инструкции Цикли на инструкция Време на тактовия цикъл×
н
Тактови цикли на процесора = ICi CPIi ×
i=1
н
=
процесорно време
ICi CPIi × × Време на цикъла на часовника
i=1
н
ICi CPIi ×
н
i=1 ICi
CPI = ---------------------------------------------- =
---------------------------------------------- CPIi ×
Брой инструкции Брой инструкции
i=1
Честота на FPSQR = 2%
CPI на FPSQR = 20
Отговор Първо, забележете, че се променя само CPI; тактовата честота и броя на инструкциите
остават идентични. Започваме с намирането на оригиналния CPI без нито едно подобрение:
н
= ICi
---------------------------------------------- ×
CPIоригинал CPIi Брой инструкции
i=1
CPI с нов FPSQR = CPI оригинален – 2% CPI × ( стар FPSQR – CPIof ) само нов FPSQR
= (2,0 – 2% 20
× – 2) 1,64 =
×
IC Тактов цикъл CPIоригинал
×
Speedupnew FP = Процесорно време оригинално
------------------------------------- = -------------------------------------------------- ---------------------
CPU timenew FP ×
IC Тактов × FP
цикъл CPInew
CPIоригинал 2.00
= == -----------------------
------------- 1.23
CPIнов FP 1,625
фино ниво от това, което се предлага от хардуерните броячи. Например, те може да искат да знаят
защо CPI е такъв, какъвто е. В такива случаи симулация
използваните техники са като тези за процесорите, които се проектират.
Техники, които помагат за енергийната ефективност, като например динамично мащабиране
на напрежението и честотата и овърклок (вижте раздел 1.5), правят това уравнение по-трудно за
използване, тъй като тактовата честота може да варира, докато измерваме програмата. Едно просто
подходът е да изключите тези функции, за да направите резултатите възпроизводими. За щастие,
тъй като производителността и енергийната ефективност често са силно свързани – вземане
по-малкото време за изпълнение на програма обикновено спестява енергия - вероятно е безопасно да се обмисли
Базов сървър PowerEdge R710 $653 (7%) PowerEdge R815 $1437 (15%) PowerEdge R815 $1437 (11%)
Процесор Xeon X5670 $3738 (40%) Opteron 6174 $2679 (29%) Opteron 6174 $5358 (42%)
Тактова честота 2,93 GHz 2,20 GHz 2,20 GHz
Общо ядра 12 24 48
Гнезда 2 2 4
Ядра/гнездо 6 12 12
Фигура 1.18 Три измервани сървъра Dell PowerEdge и техните цени към август 2010 г. Изчислихме
цената на процесорите чрез изваждане на цената на втори процесор. По подобен начин изчислихме общата цена на
памет, като видите каква е цената на допълнителната памет. Следователно базовата цена на сървъра се коригира чрез премахване
прогнозната цена на процесора и паметта по подразбиране. Глава 5 описва как са тези системи с множество гнезда
свързани заедно.
CPU, но също и кеш паметта, системата с памет и дори системата за мултипроцесорна връзка. В
допълнение, той упражнява Java Virtual Machine (JVM), включително JIT компилатор за изпълнение и
събирач на отпадъци, както и части от
основната операционна система.
Както показват последните два реда на Фигура 1.18 , победителят в производителността и
съотношението цена-производителност е PowerEdge R815 с четири гнезда и 48 ядра. Удря
1,8 милиона ssj_ops, а ssj_ops за долар е най-висок при 145. Удивително е, че компютърът с най-голям
брой ядра е най-рентабилен. На второ място
е двуцокълният R815 с 24 ядра, а на последно място е R710 с 12 ядра.
Докато повечето бенчмаркове (и повечето компютърни архитекти) се интересуват само от
производителността на системите при пиково натоварване, компютрите рядко работят при пиково
натоварване. Наистина, фигура 6.2 в глава 6 показва резултатите от измерването на използването на десетки
хиляди сървъри за 6 месеца в Google и по-малко от 1% работят на an
средно използване на 100%. Повечето имат средно използване между
10% и 50%. По този начин бенчмаркът SPECpower улавя мощността като цел
работното натоварване варира от пика си на интервали от 10% до 0%, което се нарича
Активен празен ход.
Фигура 1.19 изобразява ssj_ops (SSJ операции/секунда) на ват и средната мощност, тъй като
целевият товар варира от 100% до 0%. Intel R710 винаги има
най-ниската мощност и най-добрите ssj_ops на ват за всяко целево ниво на натоварване.
Machine Translated by Google
4500 550
710 Intel 12 ядрен
400
3000
350
710 Intel 12 ядрен W
2500 300
евотав
250
/spo_тjаsвs
2000 г
200
1500
150
1000
100
500
50
0 0
100% 90% 80% 70% 60% 50% 40% 30% 20% 10% Активен празен ход
Целево натоварване
Фигура 1.19 Енергийна производителност на трите сървъра на Фигура 1.18. Стойностите на Ssj_ops/watt са на лявата ос, с трите колони,
свързани с нея, а ватовете са на дясната ос, с трите линии, свързани с нея. Хоризонталната ос показва целевото работно натоварване,
тъй като то варира от 100% до Active Idle. Базираният на Intel R715 има най-добрите ssj_ops/watt при всяко ниво на натоварване и също
така консумира най-ниската мощност на всяко ниво.
Една от причините е много по-голямото захранване за R815, 1100 вата срещу 570 вата
при R715. Както показва глава 6 , ефективността на захранването е много важна за
цялостната енергийна ефективност на компютъра. Тъй като ватове = джаули/секунда,
този показател е пропорционален на SSJ операциите на джаул:
ssj_operations/сек
------------------------------------------- = ssj_operations/сек
------------------------------------------- ssj_operations
= ----------------------------------
ват Джаул/сек Джаул
ssj_ops
= ------------------------
Общо ssj_ops/ват
мощност
Общият ssj_ops/watt на трите сървъра е 3034 за Intel R710, 2357 за AMD с двоен сокет
R815 и 2696 за AMD с четири сокета R815. следователно
Machine Translated by Google
сървъри, ssj_ops/watt/$1000 е 324 за Intel R710, 254 за AMD R815 с двоен сокет и 213 за MD R815 с четири
на последно място.
някои често срещани погрешни вярвания или погрешни схващания, които трябва да избягвате. Ние
наричаме такива погрешни вярвания заблуди. Когато обсъждаме заблуда, ние се опитваме да дадем
обратен пример. Ние също така обсъждаме клопките - лесни грешки. Често има клопки
тези раздели са, за да ви помогнат да избегнете тези грешки в компютрите, които вие
дизайн.
благодарение на ILP стените и силовите стени. Няколко процесора на чип не гарантират по-ниска мощност;
чрез замяна на неефективно ядро с висока тактова честота с няколко ефективни ядра с по-ниска тактова
честота. Тъй като технологията се подобрява за свиване на транзисторите, това може да свие и двете
техните програми вървят по-бързо, без да си мръднат пръста, официално приключи. Ако програмистите
искат техните програми да вървят по-бързо с всяко поколение, те трябва да направят своите програми по-
паралелни.
На практика всеки практикуващ компютърен архитект знае закона на Амдал. Въпреки това,
преди да измерим използването му. Направете го само когато общото ускоряване е разочароващо
подобрявайки го!
Machine Translated by Google
всеки компонент беше излишен, така че нито една повреда на компонента не можеше да доведе
надолу по цялата система. Глава 6 показва как софтуерният слой избягва единичните
Fallacy Хардуерните подобрения, които увеличават производителността, подобряват енергийната ефективност или
Esmaeilzadeh и др. [2011] измерва SPEC2006 само на едно ядро от 2,67 GHz
Intel Core i7 с помощта на Turbo режим (Раздел 1.5). Производителността е увеличена с фактор
от 1,07, когато тактовата честота се увеличи до 2,94 GHz (или фактор 1,10), но i7
Няколко фактора влияят върху полезността на бенчмарка като предиктор на реалната производителност, а
След като даден бенчмарк стане стандартизиран и популярен, има огромен натиск за подобряване на
производителността чрез целеви оптимизации или чрез агресивно тълкуване на правилата за изпълнение
300 × 300 матрични умножения. В това ядро 99% от времето за изпълнение беше
в един ред (виж SPEC [1989]). Когато компилаторът на IBM оптимизира този вътрешен
тества настройката на компилатора и, разбира се, не беше добра индикация за цялостната производителност,
В продължение на дълъг период от време тези промени могат да направят дори добре избран
Грешка Номиналното средно време до повреда на дисковете е 1 200 000 часа или почти 140 години, така че
Те изчисляват MTTF като общия брой часове, през които дисковете са работили кумулативно, разделен
на броя на неуспешните.
Един проблем е, че този брой далеч надвишава живота на диска, което е
обикновено се приема за 5 години или 43 800 часа. За да направите този голям MTTF
в известен смисъл производителите на дискове твърдят, че моделът отговаря на потребител, който
купува диск и след това продължава да сменя диска на всеки 5 години - планираният живот
на диска. Твърдението е, че ако много клиенти (и техните правнуци)
направиха това през следващия век, средно ще сменят диск 27 пъти
преди провал, или около 140 години.
По-полезна мярка би бил процентът на дисковете, които се провалят. Да приемем 1000
дискове с 1 000 000 часа MTTF и че дисковете се използват 24 часа на ден. Ако
сте заменили повредени дискове с нови със същите характеристики на надеждност, броят на
повредените за една година (8760 часа) е
70%
Мощност4
Итаний 2
60% 58%
54% 54% NEC Земен симулатор
50% Cray X1
40%
30%
20%
20%
16%
0%
Paratec LBMHD GTC
физика на плазмата материалознание Астрофизика на кактус магнитен синтез
Фигура 1.20 Процент на пикова производителност за четири програми на четири мултипроцесора, мащабирани до 64 процесора.
Earth Simulator и X1 са векторни процесори (вижте Глава 4 и Приложение G). Те не само осигуряваха по-висока част от пиковата
производителност, но също така имаха най-високата пикова производителност и най-ниските тактови честоти. С изключение на
програмата Paratec, системите Power 4 и Itanium 2 доставят между 5% и 10% от своя пик. От Oliker et al. [2004].
Няма значение. Ако трябваше да сринете програмата при откриване на преходна грешка в
мъртъв регистър, това би намалило наличността ненужно.
Sun Microsystems преживя този капан през 2000 г. с L2 кеш, който включва паритет, но не
и коригиране на грешки, в своите системи Sun E3000 до Sun E10000. SRAM, които са използвали
за изграждане на кешовете, са имали периодични грешки, които паритетът е открил. Ако
данните в кеша не са променени, процесорът просто препрочита данните от кеша. Тъй като
дизайнерите не са защитили кеша с ECC (код за коригиране на грешки), операционната
система няма друг избор, освен да съобщи за грешка на мръсни данни и да срине програмата.
Полевите инженери не откриха проблеми при проверка в повече от 90% от случаите.
Глава 6 също е нова за това издание. Въвеждаме клъстери и след това навлизаме
дълбочина на складови компютри (WSC), за които компютърните архитекти помагат
дизайн. Дизайнерите на WSC са професионални наследници на пионерите
на суперкомпютри като Seymour Cray, тъй като те проектират екстремни
компютри. Те съдържат десетки хиляди сървъри и оборудването и
сградата, която ги държи, струва близо 200 милиона долара. Притесненията за цена-производителност
и енергийната ефективност от по-ранните глави се отнася за WSCs, както и количественият подход за
вземане на решения.
Тази книга идва с изобилие от материали онлайн (вижте Предговор за повече
подробности), както за намаляване на разходите, така и за запознаване на читателите с различни
усъвършенствани теми. Фигура 1.21 ги показва всички. Приложения A, B и C, които се появяват в
книга, ще бъде рецензия за много читатели.
В Приложение D се отдалечаваме от изглед, ориентиран към процесора, и обсъждаме
проблеми в системите за съхранение. Ние прилагаме подобен количествен подход, но един
въз основа на наблюдения на поведението на системата и използване на подход от край до край
анализ на ефективността. Той разглежда важния въпрос за това как да се съхранява ефективно
и извличане на данни, използвайки основно евтини технологии за магнитно съхранение. Нашите
фокусът е върху изследването на производителността на дисковите системи за съхранение за
типични I/O-интензивни работни натоварвания, като OLTP бенчмарковете, които видяхме в тази глава. Ние
подробно проучете напреднали теми в RAID-базирани системи, които използват излишни дискове, за
да постигнат както висока производителност, така и висока наличност. И накрая, на
глава въвежда теорията на опашките, която дава основа за размяна на използването
и латентност.
Приложение E прилага вградена компютърна перспектива към идеите на всеки от тях
на главите и ранните приложения.
Приложение F изследва темата за свързване на системата широко, включително широко
зонални и системни мрежи, които позволяват на компютрите да комуникират.
Приложение Заглавие
д Вградени системи
аз
Мащабни мултипроцесори и научни приложения
Дж
Компютърна аритметика
Разходи за производство
Производствен добив
Има много фактори, които участват в цената на компютърния чип. Нов, по-малък
технологията дава тласък на производителността и намаляване на необходимата площ на чипа. В
по-малка технология, човек може или да запази малката площ, или да постави повече хардуер
чипа, за да получите повече функционалност. В този казус ние изследваме как различните дизайнерски
решения включват производствена технология, площ и излишък
влияят на цената на чиповете.
Machine Translated by Google
1.1 [10/10] <1.6> Фигура 1.22 дава съответните статистически данни за чипове, които влияят върху цената
от няколко актуални чипа. В следващите няколко упражнения ще изследвате
ефект на различни възможни дизайнерски решения за IBM Power5.
b. [10] <1.6> Защо IBM Power5 има по-нисък процент на дефекти от Niag-ara и Opteron?
1.2 [20/20/20/20] <1.6> Изграждането на ново производствено съоръжение струва 1 милиард долара. Вие
ще продава набор от чипове от тази фабрика и вие трябва да решите как
голям капацитет за отделяне на всеки чип. Вашият чип Woods ще бъде 150 mm2 и
ще направи печалба от $20 на бездефектен чип. Вашият чип Markon ще бъде 250
mm2 и ще реализира печалба от $25 на бездефектен чип. Вашето производствено съоръжение
ще бъде идентичен с този за Power5. Всяка вафла е с диаметър 300 мм.
д. [20] <1.6> Каква е печалбата от всеки нов Power5 чип? Ако вашето търсене е
50 000 чипа Woods на месец и 25 000 чипа Markon на месец, и
вашето съоръжение може да произвежда 150 вафли на месец, колко вафли трябва да направите
направи на всеки чип?
1.3 [20/20] <1.6> Вашият колега от AMD предполага, че тъй като добивът е толкова слаб,
може да правите чипове по-евтино, ако поставите допълнително ядро върху матрицата и
изхвърли само чипове, на които и двата процесора са се провалили. Ние ще решим това
упражняване, като разглеждате добива като вероятност да не се появят дефекти в определен
площ при процент на дефекти. Изчислете вероятностите въз основа на всяко ядро на Opteron
отделно (това може да не е напълно точно, тъй като уравнението за добив се основава на
емпирични доказателства, а не математическо изчисление, свързващо вероятностите за
намиране на грешки в различни части на чипа).
b. [20] <1.6> Ако старият чип струва $20 долара на чип, каква ще бъде цената на
новия чип, като се вземат предвид новата площ и добив?
Machine Translated by Google
Закон на Амдал
Излишък
MTTF
Консумирана мощност
1.4 [20/10/20] <1.5> Фигура 1.23 представя консумацията на енергия на няколко компонента на компютърната
система. В това упражнение ще проучим как твърдият диск
влияе върху консумацията на енергия за системата.
b. [10] <1.5> Колко енергия ще консумира дисковото устройство със 7200 rpm, ако е
празен ход приблизително 60% от времето?
° С. [20] <1.5> Като се има предвид, че времето за четене на данни от дисково устройство със 7200 rpm ще бъде
приблизително 75% от диск с 5400 rpm, при какво време на празен ход на диска с 7200 rpm ще
консумацията на енергия да е еднаква средно за двата диска?
1.5 [10/10/20] <1.5> Един критичен фактор при захранването на сървърна група е охлаждането. Ако топлината
не се отстранява ефективно от компютъра, вентилаторите ще духат горещ въздух обратно
компютъра, а не студения въздух. Ще разгледаме как влияят различните дизайнерски решения
необходимото охлаждане и съответно цената на системата. Използвайте фигура 1.23 за вашия
изчисления на мощността.
Тип компонент
Продукт Мощност на производителността
и отзад), колко сървъра от част (a) могат да бъдат поставени на един шкаф и колко охлаждащи
врати са необходими?
1.7 [20/20/20/20] <1.6, 1.9> Вътрешните проучвания на вашата компания показват, че едноядрен
системата е достатъчна за търсенето на вашата процесорна мощност; обаче ти си
проучване дали бихте могли да спестите енергия, като използвате две ядра.
° С. [20] <1.6, 1.9> Сега приемете, че напрежението може да не намалее под 25% от
оригинално напрежение. Това напрежение се нарича дъно на напрежението и всяко напрежение
по-ниско от това ще загуби състоянието. Какъв процент паралелизиране дава
имате напрежение на пода на напрежението?
д. [20] <1.6, 1.9> Използвайки уравнението в раздел 1.5, колко динамична мощност
би ли изисквала двуядрената система в сравнение с едноядрената система
като се вземе предвид пода на напрежението?
Упражнения
1.8 [10/15/15/10/10] <1.4, 1.5> Едно предизвикателство за архитектите е, че създаденият днес дизайн
ще изисква няколко години изпълнение, проверка и тестване, преди да се появи на пазара.
Това означава, че архитектът трябва да проектира каква ще бъде технологията няколко години
предварително. Понякога това е трудно да се направи.
b. [15] <1.5> Увеличаването на тактовите честоти някога отразяваше тази тенденция. Ако темповете на часовника
бяха продължили да се покачват със същата скорост, както през 90-те години, приблизително колко бързо
биха били темповете на часовника през 2015 г.?
° С. [15] <1.5> При сегашния темп на нарастване, какви са прогнозните часови честоти през
2015 г.?
д. [10] <1.4> Какво е ограничило скоростта на нарастване на тактовата честота и какво правят
архитектите с допълнителните транзистори сега, за да увеличат производителността?
1.9 [10/10] <1.5> Вие проектирате система за приложение в реално време, в което трябва да се спазват
конкретни срокове. По-бързото завършване на изчислението не печели нищо.
Откривате, че вашата система може да изпълни необходимия код, в най-лошия случай, два
пъти по-бързо от необходимото.
1.10 [10/10/20/20] <1.5> Сървърни ферми като Google и Yahoo! осигурете достатъчно изчислителен
капацитет за най-високата честота на заявки за деня. Представете си, че през повечето време
тези сървъри работят само с 60% капацитет. Освен това приемете, че мощността не се
мащабира линейно с товара; тоест, когато сървърите работят с 60% капацитет, те консумират
90% от максималната мощност. Сървърите могат да бъдат изключени, но ще им отнеме твърде
много време, за да се рестартират в отговор на по-голямо натоварване.
Предложена е нова система, която позволява бързо рестартиране, но изисква 20% от
максималната мощност, докато е в това състояние „едва жив“. а.
[10] <1.5> Колко икономии на енергия ще бъдат постигнати чрез изключване на 60%
на сървърите?
b. [10] <1.5> Колко икономии на енергия ще бъдат постигнати чрез поставяне на 60% от
сървърите в състояние „едва живи“?
Machine Translated by Google
д. [20] <1.5> Колко икономии на енергия ще бъдат постигнати чрез поставяне на 30% от
сървърите в състояние „едва живи“ и 30% намаление?
[10] <1.7> Имаме един процесор с откази във времето (FIT) от 100.
Какво е средното време до отказ (MTTF) за тази система?
b. [10] <1.7> Ако отнеме 1 ден, за да стартира системата отново, каква е наличността на
системата?
1.12 [20/20/20] <1.1, 1.2, 1.7> В сървърна група като тази, използвана от Amazon или eBay, единична
повреда не причинява срив на цялата система. Вместо това ще намали броя на заявките,
които могат да бъдат удовлетворени във всеки един момент. а. [20]
<1.7> Ако една компания има 10 000 компютъра, всеки с MTTF от 35 дни, и претърпи
катастрофален срив само ако 1/3 от компютрите се повредят, каква е MTTF за системата?
b. [20] <1.1, 1.7> Ако удвояването на MTTF струва допълнителни $1000 на компютър, ще бъде
ли това добро бизнес решение? Покажете работата си.
° С. [20] <1.2> Фигура 1.3 показва средната цена на прекъсванията, като се приема, че цената
е еднаква по всяко време на годината. За търговците на дребно обаче коледният сезон
е най-печелившият (и следователно най-скъпият период за загуба на продажби). Ако
център за каталожни продажби има два пъти повече трафик през четвъртото тримесечие,
отколкото всяко друго тримесечие, каква е средната цена на престой на час през
четвъртото тримесечие и останалата част от годината?
1.13 [10/20/20] <1.9> Вашата компания се опитва да избере между закупуването на Opteron или
Itanium 2. Вие сте анализирали приложенията на вашата компания и 60% от времето ще
изпълнява приложения, подобни на wupwise, 20% от приложенията за време, подобни на
ammp, и 20% от приложенията за време, подобни на apsi. а. [10] Ако избирате само въз
която изобразява ускоряването като процент от изчислението, извършено във векторен режим.
Етикетирайте оста y „Нетно ускоряване“ и етикетирайте оста x „Процентна векторизация“.
1.15 [15/10] <1.9> Да приемем, че правим подобрение на компютър, което подобрява някакъв режим на
изпълнение с фактор 10. Подобреният режим се използва 50% от времето, измерено като процент
от времето за изпълнение, когато използва се подобрен режим. Спомнете си, че законът на
Amdahl зависи от частта от първоначалното, неусъвършенствано време за изпълнение, което
може да използва подобрения режим. По този начин не можем директно да използваме това
измерване от 50%, за да изчислим ускоряването със закона на Амдал.
а. [15] <1.9> Какво е ускорението, което сме получили от бързия режим? b. [10] <1.9>
1.16 [20/20/15] <1.9> Когато правите промени за оптимизиране на част от процесор, често се случва
ускоряването на един тип инструкции да се дължи на забавяне на нещо друго. Например, ако
поставим сложна бърза единица с плаваща запетая, това отнема място и може да се наложи
нещо да се премести по-далеч от средата, за да се приспособи, добавяйки допълнителен цикъл
на забавяне, за да достигне тази единица. Основното уравнение на закона на Амдал не взема
предвид този компромис. а. [20] <1.9> Ако новият бърз модул с плаваща запетая ускорява
операциите с плаваща запетая средно 2 пъти и операциите с плаваща запетая отнемат 20% от
времето за изпълнение на оригиналната програма, какво е цялостно ускоряване (игнориране
на наказанието за други инструкции)?
b. [20] <1.9> Сега приемете, че ускоряването на модула с плаваща запетая забави достъпа до кеша
на данни, което доведе до забавяне 1,5 пъти (или 2/3 ускоряване). Достъпите до кеша на
данни отнемат 10% от времето за изпълнение. Какво е общото ускорение сега?
Machine Translated by Google
° С. [15] <1.9> След прилагането на новите операции с плаваща запетая, какъв процент от
времето за изпълнение се изразходва за операции с плаваща запетая? Какъв процент
се изразходва за достъп до кеша на данни?
1.17 [10/10/20/20] <1.10> Вашата компания току-що закупи нов двуядрен процесор Intel Core i5 и вие
сте получили задачата да оптимизирате софтуера си за този процесор. Ще стартирате две
приложения на този двуядрен, но изискванията за ресурси не са еднакви. Първото
приложение изисква 80% от ресурсите, а другото само 20% от ресурсите. Да приемем, че
когато паралелизирате част от програмата, ускоряването за тази част е 2. a. [10] <1.10> Като
се има предвид, че 40% от първото приложение може да се
д. [20] <1.10> Като се има предвид, че 99% от второто приложение може да се паралелизира,
колко общо ускоряване на системата бихте наблюдавали, ако го паралелизирате?
b. [20] <1.10> Какво е ускоряването с 8 процесора, ако за всеки добавен процесор разходите
за комуникация са 0,5% от първоначалното време за изпълнение. ° С. [20] <1.10>
Какво е ускоряването с 8 процесора, ако за всеки път, когато броят на процесорите се удвои,
комуникационните разходи се увеличават с 0,5% от първоначалното време за
изпълнение? д. [20] <1.10> Какво е
д. [25] <1.10> Напишете общото уравнение, което решава този въпрос: Какъв е броят на
процесорите с най-висока скорост в приложение, в което P% от първоначалното време
за изпълнение е паралелно, и за всеки път броят на процесори се удвоява,
комуникацията се увеличава с 0,5% от първоначалното време за изпълнение?
Machine Translated by Google
2.1 Въведение 72
2
Йерархия на паметта
Дизайн 1
AW Burks, HH Goldstine,
и Й. фон Нойман
Предварително обсъждане на
Логически дизайн на електроника
Изчислителен инструмент (1946)
2.1 Въведение
L1 L2 L3
°С °С °С Шина на
процесор а а а паметта
памет I/O шина Дисково съхранение
°С °С °С
Регистри
ч ч ч
д д д
диск
препратка
Ниво 1 Ниво 2 Ниво 3 Препратка
сн
,гр
т8тн 3каев
тн ъм
ю
е
д2ач
и ти
,м
1
о
д хN
ф
и
:гл
сп 0рсм
1о нх
л
рд оъ
утеB
1
8
в кн
й
р
0
7
оа S.ж
т,М ;г,еI.©
е
п
К
Б
о
0
2
9
а П
Л
Д
А
Х
Справка
:,7а
н
53а 8
нн в
р
еръ т,ъ
3уи
към паметта
по регистъра Кеш Кеш Кеш към паметта
L1 L2
°С °С Шина на
процесор а а паметта
памет Съхранение
°С °С
Регистри
ч ч
д д
Светкавица
препратка
Справка Ниво 1 Ниво 2 Препратка
към паметта
по регистъра Кеш Кеш към паметта
справка справка
Фигура 2.1 Нивата в типична йерархия на паметта в сървърен компютър, показан отгоре (a) и в
персонално мобилно устройство (PMD) отдолу (b). Тъй като се отдалечаваме от процесора, паметта
на нивото по-долу става по-бавна и по-голяма.
Обърнете внимание, че единиците за време се променят с коефициент 109 — от пикосекунди до
милисекунди — и че единиците за размер се променят с коефициент 1012 — от байтове до терабайти.
PMD има по-бавна тактова честота и по-малки кешове и основна памет. Ключова разлика е, че
сървърите и настолните компютри използват дисково съхранение като най-ниско ниво в йерархията,
докато PMD използват Flash, който е изграден от EEPROM технология.
Machine Translated by Google
2.1 Въведение 73
100 000
10 000
1000
Процесор
тсонлетидовзиорп
100
10
памет
1
1980 г 1985 г 1990 г 1995 г 2000 г 2005 г 2010 г
година
Фигура 2.2 Започвайки с производителността от 1980 г. като базова линия, разликата в производителността,
измерено като разликата във времето между заявките за памет на процесора (за a
единичен процесор или ядро) и латентността на достъп до DRAM, се нанася във времето.
Обърнете внимание, че вертикалната ос трябва да е в логаритмична скала, за да се запише размерът на
разлика в производителността на процесора и DRAM. Базовата линия на паметта е 64 KB DRAM през 1980 г., с
1,07 на година подобрение на производителността в латентността (вижте Фигура 2.13 на страница 99). The
процесорната линия предполага подобрение от 1,25 на година до 1986 г., подобрение от 1,52
до 2000 г., подобрение с 1,20 между 2000 г. и 2005 г. и без промяна в процесора
производителност (на база ядро) между 2005 г. и 2010 г.; вижте Фигура 1.1 в Глава 1.
Machine Translated by Google
Ключово дизайнерско решение е къде могат да бъдат поставени блокове (или редове) в кеш
паметта. Най-популярната схема е асоциативната набор, където наборът е група от блокове в кеша.
Един блок първо се картографира върху набор и след това блокът може да бъде поставен навсякъде
в този набор. Намирането на блок се състои от първо картографиране на адреса на блока към
набора и след това търсене в набора - обикновено паралелно - за намиране на блока. Комплектът
се избира по адреса на данните:
Ако има n блока в набор, разположението на кеша се нарича асоциативно на n-way set.
Крайните точки на асоциативността на множеството имат свои имена. Кешът с директно
картографиране има само един блок на набор (така че блокът винаги се поставя на едно и също
място), а напълно асоциативният кеш има само един набор (така че блокът може да бъде поставен навсякъде).
Кеширането на данни, които се четат само, е лесно, тъй като копието в кеша и паметта ще
бъдат идентични. Кеширането на записи е по-трудно; например, как копието в кеша и паметта може
да се поддържа последователно? Има две основни стратегии.
Кешът за запис актуализира елемента в кеша и записва, за да актуализира
Machine Translated by Google
2.1 Въведение 75
Главна памет. Кешът за обратно записване актуализира само копието в кеша. Когато
блок е на път да бъде заменен, той се копира обратно в паметта. И двамата пишат стратегии
може да използва буфер за запис , за да позволи на кеша да продължи веднага след като данните бъдат поставени
Процентът на пропуски е просто частта от достъпите до кеша, които водят до пропуск – т.е.
Да получите представа за причините за високия процент пропуски, което може да вдъхнови по-добре
дизайни на кеша, трите модела Cs сортират всички пропуски в три прости категории:
блок трябва да бъде пренесен в кеша. Задължителните пропуски са тези, които се случват
блок може да бъде отхвърлен и по-късно извлечен, ако множество блокове се съпоставят с неговия набор
многонишковостта и множеството ядра добавят усложнения за кеш паметта, като и двете се увеличават
Уви, пропуснатият процент може да бъде подвеждаща мярка по няколко причини. Следователно някои
(Често се съобщава като пропуски на 1000 инструкции за използване на цели числа вместо
дроби.)
Средно време за достъп до паметта = време на попадение + степен на пропуски × наказание за пропуски
където времето за попадение е времето за попадение в кеша, а наказанието за пропуск е времето за замяна
могат да изпълняват други инструкции по време на пропуск, като по този начин намаляват
Machine Translated by Google
процесора да толерира пропуски, без да бъде принуден да пази. Както ще разгледаме скоро, за да се възползваме
от такива техники за толериране на латентност, се нуждаем от кеш памети, които могат да обслужват заявки,
Ако този материал е нов за вас или ако този бърз преглед се движи твърде бързо, вижте Приложение B.
Той обхваща същия уводен материал по-задълбочено и включва примери за кешове от реални компютри и
Раздел B.3 в Приложение B представя шест основни оптимизации на кеша, които набързо преглеждаме
тук. Приложението също така дава количествени примери за ползите от тези оптимизации. Ние също така
блока. По-големите блокове намаляват задължителните пропуски, но също така увеличават наказанието за пропуски.
Тъй като по-големите блокове намаляват броя на етикетите, те могат леко да намалят статичната мощност.
По-големите размери на блокове също могат да увеличат капацитета или пропуските на конфликти,
особено в по-малки кешове. Изборът на правилния размер на блока е сложен компромис, който зависи от
за попадение на по-голямата кеш памет и по-висока цена и мощност. По-големите кешове увеличават както
на увеличено време за попадение. Както ще видим скоро, асоциативността също увеличава консумацията
на енергия.
времето за попадение на кеша бързо, за да сте в крак с високата тактова честота на процесорите, или да
направите кеша голям, за да намалите разликата между достъпите на процесора и достъп до основната
памет. Добавянето на друго ниво на кеш между оригиналния кеш и паметта опростява решението (вижте
Фигура 2.3). Кешът от първо ниво може да бъде достатъчно малък, за да отговаря на бърз цикъл на
часовника, но кешът от второ ниво (или трето ниво) може да бъде достатъчно голям, за да улови много
достъпи, които биха отишли в основната памет. Фокусът върху пропуските в кешовете от второ ниво води
енергийно ефективни от един общ кеш. Ако L1 и L2 се отнасят съответно за кешове от първо и второ ниво,
Време за попадение L1 + степен на пропуск L1 × (време за попадение L2 + процент на пропуск L2 × наказание за пропуск L2)
5. Даване на приоритет на пропуските при четене пред записите, за да се намали наказанието за пропуски –
Буферът за запис е добро място за прилагане на тази оптимизация. Буферите за запис създават опасности,
2.1 Въведение 77
800
700
600
500
оъм
иднукеспе оам
р
рткеси В
д
вз
400
300
200
100
0
16 KB 32 KB 64 KB 128 KB 256 KB
Размер на кеша
пропуск—т.е. опасност от четене след запис през паметта. Едно решение е да се провери
съдържанието на буфера за запис при пропуск на четене. Ако няма конфликти и ако
системата с памет е налична, изпращането на четене преди записите намалява наказанието
за пропуск. Повечето процесори дават приоритет на четене пред запис.
Този избор има малък ефект върху консумацията на енергия.
За разлика от тях PMD не само обслужват един потребител, но обикновено имат и по-малки
операционни системи, обикновено по-малко мултитаскинг (изпълнение на няколко приложения
едновременно) и по-прости приложения. PMD също обикновено използват Flash
памет, а не дискове, и повечето отчитат както производителността, така и консумацията на енергия,
което определя живота на батерията.
Формулата за средно време за достъп до паметта по-горе ни дава три показателя за кеша
оптимизации: време за попадение, процент на пропуски и наказание за пропуск. Предвид последните тенденции, добавяме
кеш честотна лента и консумация на енергия към този списък. Можем да класифицираме десетте
разширени оптимизации на кеша, които разглеждаме в пет категории въз основа на тях
метрика:
Като цяло сложността на хардуера се увеличава, докато преминаваме през тези оптимизации. В допълнение,
страница 96. Тъй като някои от тях са ясни, ние ги разглеждаме накратко; други
Натискът както от бързия тактов цикъл, така и от ограниченията на мощността насърчава ограниченото
размер за кешове от първо ниво. По същия начин използването на по-ниски нива на асоциативност може
намалете както времето за попадение, така и мощността, въпреки че подобни компромиси са по-сложни от
Критичният времеви път при попадение в кеша е процесът на адресиране в три стъпки
стойност към адреса и настройка на мултиплексора да избере правилния елемент от данни, ако
кешът е зададен асоциативно. Директно картографираните кешове могат да припокриват проверката на етикета
предаването на данните, което ефективно намалява времето за попадение. Освен това по-ниско
нивата на асоциативност обикновено ще намалят мощността, защото трябва да има по-малко кеш линии
да бъде достъпен.
или изобщо не. В много скорошни процесори дизайнерите са избрали повече асоциативност, отколкото по-
скоро.
Преди изграждането на чип е да използвате CAD инструменти. CACTI е програма за оценка на времето за достъп
Фигура 2.3 показва очакваното въздействие върху времето за попадение като размер на кеша и асоциативност
пъти по-бързо от осемпосочен. Разбира се, тези оценки зависят от технологията като
както и размера на кеша.
Пример Като използвате данните от Фигура B.8 в Приложение B и Фигура 2.3, определете дали a
пъти времето за достъп за по-бързия L1 кеш. Игнорирайте пропуските след L2. Който
Отговор Нека времето за достъп за двупосочния набор асоциативен кеш е 1. Тогава, за двупосочния кеш:
+ ×
Средно време за достъп до паметта 2-way = време за попадение Процент на пропуски Наказание за пропуски
= 1+
0,038 15 × = 1.38
×
Средно време за достъп до паметта 4-посочен Hit time2-way = × 1,4 + Степен на пропуск Наказание за пропуск
= 1,4 0,037 10 + × = 1.77
Ясно е, че по-високата асоциативност изглежда като лош компромис; обаче, тъй като кеша
по-висока асоциативност в кешовете от първо ниво. Първо, много процесори приемат поне две
часовникови цикли за достъп до кеша и по този начин въздействието на по-дългото време на попадение може да не е така
бъди критичен. Второ, за да запазите TLB извън критичния път (закъснение, което би било
трябва да бъдат виртуално индексирани. Това ограничава размера на кеша до размера на страницата
0,5
1-посочен 2-посочен
4-посочен 8-посочен
0,45
0,4
0,35
0,3
0,25
елн
яии ен
н
етж
н
уреа
го а ч
д
в
Е
0,2
0,15
0,1
0,05
0
16 KB 32 KB 64 KB 128 KB 256 KB
Размер на кеша
Друг подход намалява пропуските на конфликти и въпреки това поддържа скоростта на попадение
на директно картографирания кеш. При предсказване на пътя допълнителните битове се съхраняват
в кеша, за да се предвиди пътя или да се блокира в рамките на набора от следващия достъп до кеша.
Това предвиждане означава, че мултиплексорът е настроен рано, за да избере желания блок, и само
едно сравнение на тагове се извършва в този тактов цикъл успоредно с четенето на данните от кеша.
Пропускът води до проверка на другите блокове за съвпадения в следващия часовников цикъл.
Към всеки блок от кеша се добавят битове за предсказване на блокове. Битовете избират кой от
блоковете да се опита при следващия достъп до кеша. Ако предикторът е правилен, забавянето на
достъпа до кеша е бързото време за попадение. Ако не, той опитва другия блок, променя
предсказателя на пътя и има латентност от един допълнителен тактов цикъл. Симулациите
предполагат, че точността на предсказване на набор е над 90% за двупосочен набор асоциативен
кеш и 80% за четирипосочен набор асоциативен кеш, с по-добра точност при I-кешове отколкото D-
кешове. Предсказването на пътя дава по-ниско средно време за достъп до паметта за двупосочен
набор от асоциативен кеш, ако е поне 10% по-бърз, което е доста вероятно. Предсказването на пътя
беше използвано за първи път в MIPS R10000 в средата на 90-те години. Той е популярен в процесори,
които използват двупосочна асоциативност и се използва в ARM Cortex-A8 с четирипосочни
асоциативни кешове. За много бързи процесори може да се окаже предизвикателство да се приложи
спирането на един цикъл, което е от решаващо значение за запазване на наказанието за
прогнозиране на пътя малко.
Machine Translated by Google
на енергия чрез използване на битовете за предсказване на пътя, за да се реши кой кеш блок действително
да се осъществи достъп (битовете за предсказване на начина са по същество допълнителни адресни битове); това
подходът, който може да се нарече избор на начин, спестява енергия, когато предсказването на пътя е
правилно, но добавя значително време за погрешно предсказване на пътя, тъй като
достъпът, а не само съвпадението на етикета и изборът, трябва да се повтори. Такава оптимизация
вероятно ще има смисъл само при процесори с ниска мощност. Иноуе, Ишихара и
Murakami [1999] изчислява, че използването на подхода за избор на начин с асоциативен кеш с
четирипосочен набор увеличава средното време за достъп до I-кеша с
1.04 и за D-кеша с 1.13 на тестовете SPEC95, но дава
средна консумация на енергия на кеша спрямо нормален четирипосочен асоциативен набор
кеш, който е 0,28 за I-cache и 0,35 за D-cache. Един съществен недостатък при избора на начин е, че
затруднява конвейерирането на достъпа до кеша.
За конвейерни компютри, които позволяват изпълнение извън ред (обсъдено в глава 3),
процесорът не трябва да спира при пропуск на кеш данни. Например, процесорът може да
продължи да извлича инструкции от кеша за инструкции, докато чака кешът за данни да върне
липсващите данни. Неблокиращ кеш или кеш без блокиране ескалира потенциалните ползи от
такава схема, като позволява на кеша за данни да продължи да предоставя попадения в кеша по
време на пропуск. Тази оптимизация „попадение под пропуск“ намалява ефективното наказание
за пропуск, като е полезна по време на пропуск, вместо да игнорира заявките на процесора. Една
фина и сложна опция е, че кешът може допълнително да намали ефективното наказание за
пропуски, ако може да припокрие множество пропуски: оптимизация „попадение под множество
пропуски“ или „пропуск под пропуск“. Вторият вариант е полезен само ако системата с памет
може да обслужва множество пропуски; повечето високопроизводителни процесори (като Intel
Core i7) обикновено поддържат и двете, докато процесорите от по-нисък клас, като ARM A8,
предоставят само ограничена неблокираща поддръжка в L2.
пропуск.
Li, Chen, Brockman и Jouppi [2011] наскоро актуализираха това проучване, за да използват
многостепенен кеш, по-модерни допускания относно наказанията за пропуски и по-големите и
по-взискателни тестове SPEC2006. Проучването е направено, като се приема модел, базиран на
едно ядро на Intel i7 (вижте раздел 2.6) , изпълняващ тестовете SPEC2006. Фигура 2.5 показва
намаляването на забавянето на достъпа до кеша за данни, когато се допускат 1, 2 и 64 попадения
при пропуск; надписът описва допълнителни подробности за системата с памет. По-големите кеш
памети и добавянето на L3 кеш след по-ранното проучване са намалили ползите с показателите
SPECINT2006, показващи средно намаление на латентността на кеша от около 9%, а показателите
SPECFP2006 около 12,5%.
Пример Кое е по-важно за програмите с плаваща запетая: асоциативността на двупосочен набор или попадение
под един пропуск за първичните кешове на данни? Какво ще кажете за целочислените програми?
Да приемем следните средни нива на пропуски за 32 KB кеш данни: 5,2% за програми с плаваща
запетая с директно преобразуван кеш, 4,9% за тези програми с двупосочен асоциативен кеш,
3,5% за цели програми с директно преобразуван кеш кеш и 3,2% за целочислени програми с
двупосочен асоциативен кеш. Да приемем, че наказанието за пропуск на L2 е 10 цикъла, а
пропуските и наказанията за L2 са еднакви.
100%
90%
80%
70%
60%
50%
ап
ен яв о
са
ъаатш
б ен
З
д
к
40%
frw
2pfcciczm
g
b
mbl
ечsеuлeмz
адзевз
отнот
pm
bjh
isl
дман
н
qe2
4n6
mutfneargu
скелпос
lurcvloapc
ръмх
xyia
3скнифс
ирги
ицамарг
pptenmo
MDAсуткак
DTDFsmeG
СПЕЦИНТ SPECFP
Като цяло процесорите, които не са в ред, са в състояние да скрият голяма част от пропуските
наказание за пропуск на L1 кеш за данни, който попада в L2 кеша, но не може да
скриване на значителна част от пропуск на кеш памет от по-ниско ниво. Вземането на решение за това
колко неуредени пропуска да се подкрепят зависи от различни фактори:
Отговор В първия случай, ако приемем, че можем да поддържаме пиковата честотна лента, системата с памет може
да поддържа (16 × 10)9 /64 = 250 милиона препратки в секунда. От
всяка референция отнема 36 ns, можем да поддържаме 250 × 106 × 36 × 10 9 = 9 референции. Ако
вероятността за сблъсък е по-голяма от 0, тогава имаме нужда от повече неизпълнени референции, тъй
като не можем да започнем работа по тези референции; на
системата с памет се нуждае от повече независими препратки не по-малко! За да сравним това, можем
просто да приемем, че половината препратки към паметта не е необходимо да бъдат
издаден на паметта. Това означава, че трябва да поддържаме два пъти повече неуредени препоръки,
или 18.
Фигура 2.6 Четиристранно подредени кеш банки, използващи блоково адресиране. Ако
приемем 64 байта на блок, всеки от тези адреси ще бъде умножен по 64, за да се получи
байтово адресиране.
Като цяло, тези техники са от полза само за проекти с големи кеш блокове, тъй като ползата
е малка, освен ако блоковете не са големи. Имайте предвид, че кешовете обикновено
продължават да задоволяват достъпите до други блокове, докато останалата част от блока се запълва.
Уви, като се има предвид пространственото местоположение, има голям шанс следващата
препратка да е към останалата част от блока. Точно както при неблокиращите кешове,
наказанието за пропуск не е лесно за изчисляване. Когато има втора заявка в критичната дума
първа, ефективното наказание за пропуск е времето без припокриване от препратката до
Machine Translated by Google
пристига второ парче. Ползите от първата критична дума и ранното рестартиране зависят
върху размера на блока и вероятността за друг достъп до частта от
Кешовете за запис разчитат на буфери за запис, тъй като всички магазини трябва да бъдат изпратени до следващия
по-ниско ниво на йерархията. Дори кешовете за обратно записване използват прост буфер, когато a
блокът е заменен. Ако буферът за запис е празен, данните и пълният адрес се записват в буфера и записът
е завършен от гледна точка на процесора; процесорът продължава да работи, докато буферът за запис се
памет. Ако буферът съдържа други модифицирани блокове, адресите могат да бъдат проверени
за да видите дали адресът на новите данни съвпада с адреса на валиден буфер за запис
влизане. Ако е така, новите данни се комбинират с този запис. Напишете обединяване е името на
тази оптимизация. Intel Core i7, наред с много други, използва сливане при запис.
Ако буферът е пълен и няма съвпадение на адреса, кешът (и процесорът)
трябва да изчака, докато буферът има празен запис. Тази оптимизация използва паметта по-ефективно,
тъй като записите на много думи обикновено са по-бързи от записите, извършвани една дума наведнъж.
Skadron и Clark [1997] установяват, че дори a
сливането на буфер за запис с четири входа генерира спирания, които водят до 5% до 10% загуба на
производителност.
Оптимизацията също така намалява спиранията поради това, че буферът за запис е пълен.
Фигура 2.7 показва буфер за запис със и без обединяване на запис. Да приемем, че имахме
четири записа в буфера за запис и всеки запис може да съдържа четири 64-битови думи.
Без тази оптимизация четири магазина към последователни адреси биха запълнили буфера с една дума на
адресно пространство. Тези входно/изходни адреси не могат да позволят сливане на запис, защото са разделени
може да изисква един адрес и дума с данни за I/O регистър, вместо да използва много думи
Досега нашите техники изискваха промяна на хардуера. Тази следваща техника намалява процента на
за да видите дали оптимизациите на времето за компилиране могат да подобрят производителността. Още веднъж, изследвания
Machine Translated by Google
Напиши адрес V V V V
Напиши адрес V V V V
0 0 0 0
0 0 0 0
0 0 0 0
Loop Interchange
Някои програми имат вложени цикли, които осъществяват достъп до данни в паметта в
непоследователен ред. Просто размяната на вложеността на циклите може да направи кода
достъп до данните в реда, в който са съхранени. Ако приемем, че масивите не се побират в
кеша, тази техника намалява пропуските чрез подобряване на пространствената локалност;
пренареждането увеличава максимално използването на данни в кеш блок, преди те да
бъдат изхвърлени. Например, ако x е двуизмерен масив с размер [5000,100], разпределен
така, че x[i,j] и x[i,j+1] да са съседни (ред, наречен основен ред, тъй като масивът е положен
по редове), тогава двете части от код по-долу показват как достъпите могат да бъдат оптимизирани:
/* Преди */ за (j
= 0; j < 100; j = j+1) за (i = 0; i < 5000; i = i+1)
x[i][j] = 2 * x[i ][j];
Machine Translated by Google
/* След */ за (i
= 0; i < 5000; i = i+1)
за (j = 0; j < 100; j = j+1) x[i][j] = 2 * x[i][j];
Блокиране
/* Преди */ за (i
= 0; i < N; i = i+1) за (j = 0; j < N; j = j+1)
{r = 0; за (k = 0; k < N; k = k + 1) r = r +
y[i][k]*z[k]
[j]; x[i][j] = r; };
Двата вътрешни цикъла четат всички N-по-N елемента от z, четат същите N елемента
в ред от y многократно и записват един ред от N елемента от x. Фигура 2.8 дава
моментна снимка на достъпите до трите масива. Тъмният нюанс показва скорошен
достъп, светлият нюанс показва по-стар достъп, а бялото означава, че все още не е
достъпен.
Броят пропуски на капацитета ясно зависи от N и размера на кеша.
Ако може да побере и трите матрици N-by-N, тогава всичко е наред, при условие че
няма конфликти в кеша. Ако кешът може да побере една N-на-N матрица и един ред
от N, тогава поне i-тият ред от y и масивът z могат да останат в кеша. По-малко от това
и пропуски могат да възникнат както за x, така и за z. В най-лошия случай ще има 2N3
+ N2 думи от паметта, достъпни за N3 операции.
Machine Translated by Google
й
к й
х г z
0 2345 1 0 2345 1 0 2345 1
0 0 0
1 1 1
2 2 2
аз аз к
3 3 3
4 4 4
5 5 5
Фигура 2.8 Моментна снимка на трите масива x, y и z, когато N = 6 и i = 1. Възрастта на достъпите до елементите на масива е
обозначена със сянка: бяло означава, че все още не е докоснато, светло означава по-стари достъпи и тъмно означава по-нов
достъп. В сравнение с Фигура 2.9, елементите на y и z се четат многократно, за да се изчислят нови елементи на x.
Променливите i, j и k са показани покрай редовете или колоните, използвани за достъп до масивите.
/* След */ за (jj =
0; jj < N; jj = jj+B) за (kk = 0; kk < N; kk = kk+B) за (i =
0; i < N; i = i +1) за (j = jj; j < min(jj+B,N); j = j+1) {r =
0; за (k = kk; k < min(kk+B,N); k = k + 1) r = r +
y[i][k]*z[k][j]; x[i][j] = x[i][j] + r; };
Фигура 2.9 илюстрира достъпите до трите масива чрез блокиране. Разглеждайки само пропуските
на капацитета, общият брой на достъпните думи в паметта е 2N3 /B + N2 .
Това общо е подобрение с около фактор B. Следователно блокирането използва комбинация от
пространствена и времева локалност, тъй като y се възползва от пространствената локалност, а z се
възползва от времевата локалност.
Въпреки че се стремим да намалим пропуските в кеша, блокирането може да се използва и за
подпомагане на разпределението на регистрите. Като вземем малък размер на блокиране, така че
блокът да може да се съхранява в регистри, можем да минимизираме броя на зарежданията и съхраняванията в
програма.
Както ще видим в Раздел 4.8 на Глава 4, блокирането на кеша е абсолютно необходимо, за да се
получи добра производителност от базирани на кеш процесори, работещи с приложения, използващи
матрици като първична структура от данни.
Machine Translated by Google
й
к й
х г z
0 2345 1 0 2345 1 0 2345 1
0 0 0
1 1 1
2 2 2
аз аз к
3 3 3
4 4 4
5 5 5
Фигура 2.9 Възрастта на достъпите до масивите x, y и z, когато B = 3. Обърнете внимание, че за разлика от Фигура 2.8 се осъществява
достъп до по-малък брой елементи.
Подобен подход може да се приложи за достъп до данни [Jouppi 1990]. Palacharla и Kessler
[1994] разглеждат набор от научни програми и разглеждат множество буфери на потока, които
могат да обработват инструкции или данни. Те открили, че осем буфера за поток могат да уловят
50% до 70% от всички пропуски от процесор с два 64 KB четирипосочни набора асоциативни
кеша, единият за инструкции, а другият за данни.
Intel Core i7 поддържа хардуерно предварително извличане както в L1, така и в L2, като най-
често срещаният случай на предварително извличане е достъп до следващия ред. Някои по-
ранни процесори на Intel използваха по-агресивно хардуерно предварително извличане, но
това доведе до намалена производителност за някои приложения, карайки някои сложни
потребители да изключат възможността.
Фигура 2.10 показва цялостното подобрение на производителността за подгрупа от програми
SPEC2000, когато хардуерното предварително извличане е включено. Обърнете внимание, че
тази фигура включва само 2 от 12 цели програми, докато включва по-голямата част от SPEC
програмите с плаваща запетая.
Machine Translated by Google
2.20
2.00 1,97
1,80
1.60
аП
р
отееннаяввяартбсоддео н
п
1.49
1.45
1.40
1.40
1.32
1.29
1.26
1.20 1.21
1.20 1.16 1.18
1,00
празнина
mcf fam3d wupwise галгел facerec плувам приложение Лукас mgrid изравнявам се
SPECint2000 SPECfp2000
Фигура 2.10 Ускоряване поради хардуерно предварително извличане на Intel Pentium 4 с включено хардуерно предварително
извличане за 2 от 12 SPECint2000 бенчмарка и 9 от 14 SPECfp2000 бенчмарка. Показани са само програмите, които имат най-голяма
полза от предварителното извличане; предварителното извличане ускорява липсващите 15 SPEC бенчмарка с по-малко от 15% [Singhal 2004].
Предварителното извличане разчита на използване на честотната лента на паметта, която иначе би била неизползвана,
Помощта от компилаторите може да намали безполезното предварително извличане. Когато предварителното извличане
работи добре, въздействието му върху мощността е незначително. Когато не се използват предварително извлечени данни
или полезните данни са изместени, предварителното извличане ще има много отрицателно въздействие върху мощността.
за да поиска данни, преди процесорът да има нужда от тях. Има два варианта на предварително извличане:
Всяко от тях може да бъде или без грешка ; това означава, че адресът причинява или не изключение за грешки на
виртуалния адрес и нарушения на защитата. Използвайки тази терминология, нормална инструкция за зареждане може да се
счита за „инструкция за предварително извличане на повреден регистър“. Предварителните извличания без грешки просто
извличане.
Предварителното извличане има смисъл само ако процесорът може да продължи, докато извлича
предварително данните; това означава, че кешовете не спират, а продължават да доставят инструкции
и данни, докато чакат предварително изтеглените данни да се върнат. Както бихте очаквали, кешът на
данни за такива компютри обикновено не блокира.
Подобно на хардуерно контролираното предварително извличане, целта е да се припокрие
изпълнението с предварителното извличане на данни. Циклите са важните цели, тъй като те се поддават
на предварително извличане на оптимизации. Ако наказанието за пропуск е малко, компилаторът просто
разгръща цикъла веднъж или два пъти и планира предварителното извличане с изпълнението. Ако
наказанието за пропуск е голямо, то използва софтуерна конвейерна обработка (вижте Приложение H)
или разгъва много пъти, за да извлече предварително данни за бъдеща итерация.
Издаването на инструкции за предварително извличане обаче води до допълнителни разходи за инструкции,
ползите. Като се концентрират върху препратки, които е вероятно да бъдат пропуски в кеша, програмите могат
да избегнат ненужните предварителни извличания, като същевременно подобряват значително средното време
за достъп до паметта.
Пример За кода по-долу определете кои достъпи е вероятно да причинят пропуски в кеша на данни. След това вмъкнете
инструкции за предварително извличане, за да намалите пропуските. Накрая изчислете броя на
изпълнените инструкции за предварително извличане и пропуските, избегнати чрез предварително извличане.
Да приемем, че имаме 8 KB директно картографиран кеш за данни с 16-байтови блокове и това е кеш за
обратно записване, който разпределя записа. Елементите на a и b са с дължина 8 байта, тъй като са
масиви с плаваща запетая с двойна точност. Има 3 реда и 100 колони за a и 101 реда и 3 колони за b.
Нека също така приемем, че те не са в кеша в началото на програмата.
Отговор Компилаторът първо ще определи кои достъпи е вероятно да причинят пропуски в кеша; в противен случай
ще губим време за издаване на инструкции за предварително извличане на данни, които биха били
попадения. Елементите на a са записани в реда, в който са съхранени в паметта, така че a ще се
възползва от пространствената локалност: четните стойности на j ще пропуснат, а нечетните стойности
ще се появят. Тъй като a има 3 реда и 100 колони, неговите достъпи ще доведат до 3 × (100/2), или 150
пропуска.
достъп до b[j][0], когато j = 0. Тъй като j преминава от 0 до 99, когато i = 0, достъпът до b води до 100
+ 1 или 101 пропуска.
Така този цикъл ще пропусне кеша за данни приблизително 150 пъти за плюс 101 пъти за b,
или 251 пропуска.
За да опростим нашата оптимизация, няма да се тревожим за предварителното извличане на
първите достъпи на цикъла. Те може вече да са в кеша или ще платим наказанието за пропуск на
първите няколко елемента от a или b. Нито ще се тревожим за потискане на предварителното
извличане в края на цикъла, което се опитва да извлече предварително отвъд края на a (a[i][100] . . .
a[i][106]) и края на b (b[ 101][0] . . . b[107][0]). Ако това бяха предварително извличане с грешки, не
бихме могли да приемем този лукс. Да приемем, че наказанието за пропуск е толкова голямо, че
трябва да започнем предварително извличане на поне, да кажем, седем итерации предварително.
(Казано алтернативно, приемаме, че предварителното извличане няма полза до осмата итерация.)
Подчертаваме промените в кода по-горе, необходими за добавяне на предварително извличане.
Този преработен код предварително извлича a[i][7] до a[i][99] и b[7][0] до b[100][0], намалявайки броя
на пропуските без предварително извличане до
или общо 19 неочаквани пропуска. Цената за избягване на 232 пропуска в кеша е изпълнението на
400 инструкции за предварително извличане, вероятно добър компромис.
Пример Изчислете спестеното време в горния пример. Игнорирайте пропуските в кеша на инструкциите и приемете,
че няма конфликт или пропуски в капацитета в кеша за данни. Да приемем, че предварителното
извличане може да се припокрива едно с друго и по този начин с пропуски в кеша
Machine Translated by Google
прехвърляне при максимална честотна лента на паметта. Ето времената на ключовите цикли,
игнориращи пропуските в кеша: Оригиналният цикъл отнема 7 тактови цикъла на итерация, първият
цикъл с предварително извличане отнема 9 тактови цикъла на итерация, а вторият цикъл с
предварително извличане отнема 8 тактови цикъла на итерация (включително режийните разходи на външния за ц
За пропуск са необходими 100 тактови цикъла.
Отговор Оригиналният двойно вложен цикъл изпълнява умножението 3 × 100 или 300 пъти.
Тъй като цикълът отнема 7 тактови цикъла на итерация, общата сума е 300 × 7 или 2100 тактови цикъла
плюс пропуски в кеша. Пропуските в кеша добавят 251 × 100 или 25 100 тактови цикъла, което дава общо
27 200 тактови цикъла. Първият цикъл за предварително извличане се повтаря 100 пъти; при 9 тактови
цикъла на итерация общото е 900 тактови цикъла плюс пропуски в кеша. Сега добавете 11 × 100 или
1100 тактови цикъла за пропуски в кеша, което дава общо 2000. Вторият цикъл се изпълнява 2 × 100 или
200 пъти, а при 8 тактови цикъла на итерация са необходими 1600 тактови цикъла плюс 8 × 100 или 800
тактови цикъла за пропуски в кеша. Това дава общо 2400 тактови цикъла. От предишния пример знаем,
че този код изпълнява 400 инструкции за предварително извличане по време на 2000 + 2400 или 4400
тактови цикъла, за да изпълни тези два цикъла. Ако приемем, че предварителното извличане е напълно
припокрито с останалата част от изпълнението, тогава кодът за предварително извличане е 27
200/4400, или 6,2 пъти по-бърз.
+ – + 0
Малки и прости кешове Тривиално; широко използван
– + 1
Конвейерен достъп до кеша Широко използван
Cortex-A8
и ранно рестартиране
Фигура 2.11 Обобщение на 10 разширени оптимизации на кеша, показващи въздействието върху производителността на кеша, консумацията на
енергия и сложността. Въпреки че като цяло техниката помага само на един фактор, предварителното извличане може да намали пропуските, ако
направено достатъчно рано; ако не, може да намали наказанието за пропуск. + означава, че техниката подобрява фактора, – означава го
вреди на този фактор, а празното означава, че няма влияние. Мярката за сложност е субективна, като 0 е най-лесният и
3 е предизвикателство.
засяга наказанието за пропуск на кеша) е основната грижа на кеша, докато честотната лента на
основната памет е основната грижа на мултипроцесорите и I/O.
Въпреки че кешовете се възползват от паметта с ниска латентност, обикновено е по-лесно да
се подобри честотната лента на паметта с нови организации, отколкото да се намали латентността.
Популярността на многостепенните кешове и техните по-големи размери на блокове правят
честотната лента на основната памет важна и за кешовете. Всъщност дизайнерите на кеша
увеличават размера на блока, за да се възползват от високата честотна лента на паметта.
Предишните раздели описват какво може да се направи с организацията на кеша, за да се
намали тази разлика в производителността на процесора и DRAM, но простото увеличаване на
кешовете или добавянето на повече нива на кеш паметта не може да премахне разликата.
Необходими са и иновации в основната памет.
В миналото иновацията беше как да се организират множеството DRAM чипове, съставляващи
основната памет, като например множество банки памет. По-висока честотна лента е достъпна при
използване на банки с памет, чрез разширяване на паметта и нейната шина или чрез и двете. По
ирония на съдбата, тъй като капацитетът на чип с памет се увеличава, има по-малко чипове в една
и съща по размер система с памет, което намалява възможностите за по-широки системи с памет
със същия капацитет.
За да позволят на системите с памет да се справят с изискванията за честотна лента на
съвременните процесори, иновациите в паметта започнаха да се случват вътре в самите DRAM
чипове. Този раздел описва технологията вътре в чиповете памет и тези иновативни вътрешни
организации. Преди да опишем технологиите и опциите, нека прегледаме показателите за
ефективност.
С въвеждането на памети за пакетен трансфер, които сега се използват широко както във Flash,
така и в DRAM, латентността на паметта се цитира с помощта на две мерки – време за достъп и
време на цикъл. Времето за достъп е времето между заявката за четене и пристигането на желаната
дума, а времето за цикъл е минималното време между несвързаните заявки към паметта.
На практика всички компютри от 1975 г. насам са използвали DRAM за основна памет и SRAM
за кеш, с едно до три нива, интегрирани в процесорния чип с CPU. В PMDs технологията на паметта
често балансира мощност и скорост, като системите от по-висок клас използват бърза технология
за памет с висока честотна лента.
Технология SRAM
Първата буква на SRAM означава статичен. Динамичният характер на веригите в DRAM изисква
данните да бъдат записани обратно, след като бъдат прочетени - оттук и разликата между времето
за достъп и времето на цикъла, както и необходимостта от опресняване. SRAM не се нуждаят от
опресняване, така че времето за достъп е много близо до времето на цикъла. SRAM обикновено
използват шест транзистора на бит, за да предотвратят нарушаване на информацията при четене.
SRAM се нуждае само от минимална мощност, за да поддържа заряда в режим на готовност.
16 GB DRAM. Времената за достъп за големи кешове от трето ниво в чипа обикновено са два
до четири пъти по-големи от тези за кеш от второ ниво, което все пак е три до пет пъти по-
бързо от достъпа до DRAM памет.
DRAM технология
Тъй като капацитетът на ранните DRAM памети нарастваше, цената на пакет с всички
необходими адресни линии беше проблем. Решението беше да се мултиплексират адресните
линии, като по този начин се намали наполовина броят на адресните пинове. Фигура 2.12
показва основната организация на DRAM. Половината от адреса се изпраща първи по време на
светкавицата за достъп до ред (RAS). Другата половина от адреса, изпратена по време на
светкавицата за достъп до колона (CAS), го следва. Тези имена идват от вътрешната организация
на чипа, тъй като паметта е организирана като правоъгълна матрица, адресирана от редове и колони.
Допълнително изискване на DRAM произтича от свойството, обозначено с първата буква,
D, за динамичен. За да опаковат повече битове на чип, DRAM използват само един транзистор
за съхраняване на малко. Четенето на този бит унищожава информацията, така че тя трябва да
бъде възстановена. Това е една от причините, поради които времето за цикъл на DRAM
традиционно е по-дълго от времето за достъп; напоследък DRAM въведоха множество банки,
които позволяват частта от цикъла за пренаписване да бъде скрита. В допълнение, за да се
предотврати загуба на информация, когато битът не се чете или записва, битът трябва
периодично да се „опреснява“. За щастие, всички битове в един ред могат да бъдат опреснени
едновременно само чрез четене на този ред. Следователно всяка DRAM в системата с памет
трябва да има достъп до всеки ред в рамките на определен времеви прозорец, като например
8 ms. Контролерите на паметта включват хардуер за периодично опресняване на DRAM.
Това изискване означава, че системата с памет понякога е недостъпна, защото изпраща
сигнал, който казва на всеки чип да се опресни. Времето за опресняване обикновено е пълен
достъп до паметта (RAS и CAS) за всеки ред на DRAM.
Тъй като матрицата на паметта в DRAM концептуално е квадратна, броят на стъпките
банка
Колона
Rd/Wr
действайте
Пред
Редете
Досега сме представяли основната памет така, сякаш работи като швейцарски влак,
последователна доставка на стоките точно по график. Опресняване опровергава
тази аналогия, тъй като някои достъпи отнемат много повече време от други. Така освежете
е друга причина за променливостта на латентността на паметта и следователно наказанието за пропуск на кеша.
Amdahl предложи като основно правило, че капацитетът на паметта трябва да нараства линейно
със скоростта на процесора, за да се поддържа балансирана система, така че процесор от 1000 MIPS
трябва да има 1000 MB памет. Дизайнерите на процесори разчитат на DRAM за
задоволява това търсене. В миналото те очакваха четирикратно подобрение на капацитета на всеки три
години, или 55% на година. За съжаление изпълнението на
DRAM паметта расте с много по-бавна скорост. Фигура 2.13 показва изпълнение
подобрение във времето за достъп до ред, което е свързано със закъснението, от около 5% на
година. CAS или времето за пренос на данни, което е свързано с честотната лента, нараства с
повече от два пъти този процент.
Въпреки че говорихме за отделни чипове, DRAM се продават обикновено на малки платки, наречени
двойни вградени модули памет (DIMM).
DIMM модулите обикновено съдържат от 4 до 16 DRAM и обикновено са организирани така
Ширина 8 байта (+ ECC) за настолни и сървърни системи.
Фигура 2.13 Времената на бързи и бавни DRAM варират с всяко поколение. (Времето на цикъла е определено на страница 97.)
Подобряването на производителността на времето за достъп до ред е около 5% на година. Подобрението с фактор 2 в достъпа до колони в
1986 г. придружава преминаването от NMOS DRAM към CMOS DRAM. Въвеждането на различни пакетни трансфери
режими в средата на 1990-те и SDRAM в края на 1990-те значително усложниха изчисляването на времето за достъп
за блокове от данни; обсъждаме това по-късно в този раздел, когато говорим за време за достъп и мощност на SDRAM. DDR4
дизайните трябва да бъдат представени в средата до края на 2012 г. Обсъждаме тези различни форми на DRAM в следващите няколко страници.
Machine Translated by Google
Тъй като законът на Мур продължава да доставя повече транзистори и тъй като празнината между
процесор и памет увеличава натиска върху производителността на паметта, идеите от предишния
раздел са си проправили път вътре в DRAM чипа. Като цяло иновациите са довели до по-голяма честотна
лента, понякога с цената на по-голямо забавяне. Този подраздел представя техники, които се възползват
от естеството на DRAM.
Както бе споменато по-рано, достъпът до DRAM се разделя на достъп до редове и достъп до колони.
DRAM трябва да буферира ред от битове вътре в DRAM за достъп до колоната и този ред обикновено е
Първо, DRAM добавя времеви сигнали, които позволяват повтарящи се достъпи до буфера на реда
без друго време за достъп до ред. Такъв буфер идва естествено, тъй като всеки масив ще буферира 1024
до 4096 бита за всеки достъп. Първоначално трябваше да се изпращат отделни адреси на колони за
всяко прехвърляне със закъснение след всеки нов набор от адреси на колони.
Първоначално DRAM имаха асинхронен интерфейс към контролера на паметта, така че всяко
прехвърляне включваше допълнителни разходи за синхронизиране с контролера. Втората основна
промяна беше да се добави часовников сигнал към интерфейса на DRAM, така че повтарящите се
трансфери да не носят това натоварване. Синхронна DRAM (SDRAM) е името на тази оптимизация.
SDRAM обикновено също имат програмируем регистър за задържане на заявения брой байтове и
следователно могат да изпращат много байтове за няколко цикъла на заявка. Обикновено 8 или повече
16-битови трансфера могат да се осъществят без изпращане на нови адреси чрез поставяне на DRAM в
пакетен режим; този режим, който поддържа прехвърляне на критична дума първа, е единственият
начин, по който могат да бъдат постигнати пиковите честотни ленти, показани на Фигура 2.14 .
Стандартен Тактова честота (MHz) M трансфера за секунда DRAM име MB/sec /DIMM DIMM име
Фигура 2.14 Тактови честоти, честотна лента и имена на DDR DRAM и DIMM през 2010 г. Обърнете внимание на числената
връзка между колоните. Третата колона е два пъти по-голяма от втората, а четвъртата използва числото от третата колона в
името на DRAM чипа. Петата колона е осем пъти третата колона и е заоблена версия на това
номер се използва в името на DIMM. Въпреки че не са показани на тази фигура, DDR също определят латентност в тактови цикли
като четири числа, които са определени от стандарта DDR. Например DDR3-2000 CL 9 има закъснения от 9-9-9-28.
Какво означава това? С часовник от 1 ns (тактовият цикъл е половината от скоростта на трансфер), това показва 9 ns за адрес от
ред към колона (RAS време), 9 ns за достъп до данни на колона (CAS време) и минимално време за четене от 28 ns. Затваряне на
редът отнема 9 ns за предварително зареждане, но се случва само когато четенията от този ред са завършени. В пакетен режим, прехвърляния
се появяват на всеки часовник на двата края, когато първите RAS и CAS времена са изтекли. Освен това предварителната такса е
не е необходимо, докато не бъде прочетен целият ред. DDR4 ще бъде произведен през 2012 г. и се очаква да достигне тактова честота от 1600
MHz през 2014 г., когато се очаква DDR5 да поеме. Упражненията изследват допълнително тези подробности.
GDRAM или GSDRAM (графични или графични синхронни DRAM) са специален клас DRAM, базиран
на дизайн на SDRAM, но пригоден за справяне с по-високите изисквания за честотна лента на
графичните процесори. GDDR5 е базиран на DDR3 с по-ранни GDDR, базирани на DDR2. Тъй като
графичните процесори (GPU; вижте Глава 4) изискват по-голяма честотна лента за DRAM чип,
отколкото CPU, GDDR имат няколко важни разлики: 1. GDDR имат по-широки интерфейси: 32-бита
срещу 4, 8 или 16 в настоящите дизайни.
2. GDDR имат по-висока максимална тактова честота на щифтовете за данни. За да се позволи по-
висока скорост на трансфер, без да възникват проблеми със сигнализирането, GDRAMs
обикновено се свързват директно към GPU и се прикрепят чрез запояване към платката, за
разлика от DRAM, които обикновено са подредени в разширяем масив от DIMM.
Като цяло, тези характеристики позволяват на GDDR да работят с два до пет пъти по-голяма
честотна лента на DRAM спрямо DDR3 DRAM, което е значително предимство при поддръжката
на GPU. Поради по-ниската локализация на заявките за памет в GPU, burst режимът обикновено
е по-малко полезен за GPU, но поддържането на отворени множество банки памет и управлението
на тяхното използване подобрява ефективната честотна лента.
Флаш памет
Флаш паметта е вид EEPROM (електронно изтриваема програмируема памет само за четене),
която обикновено е само за четене, но може да бъде изтрита. Другото ключово свойство на флаш
паметта е, че тя държи съдържанието си без никакво захранване.
Machine Translated by Google
600
500
400
Четете, пишете, прекратете
300 захранването
оm
тсонщW М
в
200 Активирайте захранването
Фоново захранване
100
0
ниско Типична Напълно
захранване
Фигура 2.15 Консумация на енергия за DDR3 SDRAM, работеща при три условия: режим на
ниска мощност (изключване), типичен системен режим (DRAM е активна 30% от времето за
четене и 15% за запис) и напълно активен режим, където DRAM непрекъснато чете или
записва, когато не е в предварително зареждане. Четенето и записването предполагат
поредици от 8 трансфера. Тези данни са базирани на Micron 1.5V 2Gb DDR3-1066.
да бъде изтрита (оттук и името Flash за процеса на изтриване на „flash“), преди да бъде
презаписана, и се изтрива на блокове (във Flash с висока плътност, наречена NAND
Flash, което е се използва в повечето компютърни приложения), а не отделни байтове
или думи. Това означава, че когато данните трябва да бъдат записани във Flash, трябва
да се сглоби цял блок, или като нови данни, или чрез сливане на данните, които трябва
да бъдат записани, и останалото съдържание на блока.
3. Флаш паметта има ограничен брой цикли на запис за всеки блок, обикновено най-малко
100 000. Чрез осигуряване на равномерно разпределение на записаните блокове в
паметта, системата може да увеличи максимално живота на система с флаш памет.
разликата е значително по-голяма, като SDRAM е поне 10 и дори 100 пъти по-бърз от Flash в
зависимост от обстоятелствата.
Бързите подобрения във Flash с висока плътност през последното десетилетие направиха
технологията жизнеспособна част от йерархиите на паметта в мобилни устройства и като
заместители на твърди дискове. Тъй като скоростта на увеличаване на плътността на DRAM
продължава да намалява, Flash може да играе все по-голяма роля в бъдещите системи с памет,
действайки едновременно като заместител на твърдите дискове и като междинно хранилище
между DRAM и диска.
Само паритет—около 90 000, или една невъзстановима (или неоткрита) повреда всеки
17 минути
Само ECC—около 3500 или около една неоткрита или непоправима повреда на всеки
7,5 часа
Chipkill—6, или около една неоткрита или непоправима повреда на всеки 2 месеца
Machine Translated by Google
Друг начин да разгледате това е да намерите максималния брой сървъри (всеки с 4 GB),
които могат да бъдат защитени, като същевременно се постигне същият процент грешки,
както е показано за Chipkill. За паритет, дори сървър само с един процесор ще има процент
непоправими грешки, по-висок от система, защитена от 10 000 сървъра Chipkill. За ECC
система със 17 сървъра би имала приблизително същия процент на отказ като система
Chipkill с 10 000 сървъра. Следователно Chipkill е изискване за 50 000 до 100 000 сървъра в
компютри от складов мащаб (вижте раздел 6.8 от глава 6).
1. Осигурете поне два режима, като посочите дали изпълняваният процес е потребителски процес или
процес на операционна система. Последният процес понякога се нарича процес на ядрото или процес
на надзорник .
3. Осигурете механизми, чрез които процесорът може да премине от потребителски режим в режим на
супервизьор и обратно. Първата посока обикновено се изпълнява чрез системно повикване,
реализирано като специална инструкция, която прехвърля контрола към специално място в
пространството на кода на надзорника. Компютърът се запазва от точката на системното повикване
и процесорът се поставя в режим на надзорник. Връщането към потребителски режим е като връщане
на подпрограма, която възстановява предишния потребителски/супервизор режим.
Записът в TLB е като запис в кеша, където етикетът съдържа части от виртуалния адрес, а частта с
данни съдържа физически адрес на страница, поле за защита, валиден бит и обикновено бит за
използване и бит за мръсен. Операционната система променя тези битове, като променя стойността в
таблицата на страниците и след това обезсилва съответния TLB запис. Когато записът се презареди от
таблицата на страниците, TLB получава точно копие на битовете.
Този проблем и възможността, че неналагането на защита може да бъде много по-скъпо, отколкото
в миналото, накара някои да търсят модел на защита с много по-малка кодова база от пълната
операционна система, като виртуални машини.
Една идея, свързана с виртуалната памет, която е почти толкова стара, са виртуалните машини (VM). Те
са разработени за първи път в края на 60-те години и остават важна част от мейнфрейм компютрите
през годините. Макар и до голяма степен игнорирани в областта на еднопотребителските компютри през
80-те и 90-те години на миналия век, те напоследък придобиха популярност поради
включително копие на операционната система. Един компютър работи с множество виртуални машини
и може да поддържа редица различни операционни системи (ОС). На конвенционална платформа една
ОС „притежава“ всички хардуерни ресурси, но с VM
множество ОС споделят хардуерните ресурси.
Софтуерът, който поддържа виртуални машини, се нарича монитор на виртуална машина (VMM)
или хипервизор; VMM е сърцето на технологията за виртуална машина. Основната хардуерна платформа
се нарича хост и нейните ресурси се споделят между
виртуални машини за гости . VMM определя как да картографирате виртуални ресурси към физически
ресурси: Физическият ресурс може да бъде споделен във времето, разделен или дори емулиран
в софтуера. VMM е много по-малък от традиционната ОС; изолиращата част на VMM е може би само 10
000 реда код.
Като цяло цената на виртуализацията на процесора зависи от натоварването.
Програмите, обвързани с процесор на потребителско ниво, като SPEC CPU2006, имат нула
режийни разходи за виртуализация, защото ОС рядко се извиква, така че всичко работи
нативни скорости. Обратно, I/O-интензивните работни натоварвания обикновено са също и OS-
интензивни и изпълняват много системни повиквания (които I/O изисква) и привилегировани
инструкции, които могат да доведат до високи разходи за виртуализация. Режийните разходи са
определен от броя инструкции, които трябва да бъдат емулирани от VMM
и колко бавно се емулират. Следователно, когато виртуалните машини за гости работят по същия начин
ISA като хост, както предполагаме тук, целта на архитектурата и VMM е
за изпълнение на почти всички инструкции директно на родния хардуер. От друга страна,
ако I/O-интензивното работно натоварване също е свързано с I/O, цената на виртуализацията на
процесора може да бъде напълно скрита от ниското използване на процесора, тъй като често се чака за
I/O.
Въпреки че интересът ни тук е към виртуалните машини за подобряване на защитата, виртуалните машини предоставят
1. Софтуер за управление – виртуалните машини предоставят абстракция, която може да работи напълно
софтуерен стек, включително стари операционни системи като DOS. Типичен
разгръщането може да бъде някои виртуални машини, работещи с наследени операционни системи, много с текущата стабилна
версия на операционната система и няколко, които тестват следващата версия на операционната система.
Тези две причини са защо базираните в облак сървъри, като този на Amazon, разчитат на виртуални
машини.
Какво трябва да прави VM монитор? Той представя софтуерен интерфейс към софтуера за гости, it
трябва да изолира състоянието на гостите един от друг и трябва да се защити от
софтуер за гости (включително операционни системи за гости). Качествените изисквания са
Machine Translated by Google
ресурси директно.
въпреки че изпълняваната в момента виртуална машина за гости и операционна система временно се използват
тях.
Например, в случай на прекъсване на таймера, VMM ще спре работещата в момента виртуална машина за
VM да стартира следващата и след това да зареди нейното състояние. Виртуалните машини за гости, които разчитат на прекъсване на таймера, са
VM, която обикновено работи в потребителски режим; това също така гарантира, че изпълнението на
на системните виртуални машини са почти идентични с тези за странирана виртуална памет, изброени по-горе:
което води до прихващане, ако се изпълни в потребителски режим. Всички системни ресурси трябва да бъдат
директно върху хардуера печели титлата виртуализируема, а архитектурата на IBM 370 гордо носи този етикет.
Уви, тъй като виртуалните машини се разглеждат като десктоп и компютърно базиран сървър
приложения съвсем наскоро, повечето набори от инструкции бяха създадени без виртуализация в ума. Тези
Тъй като VMM трябва да гарантира, че системата за гости взаимодейства само с виртуални ресурси,
VMM. След това, ако операционна система за гости се опита да получи достъп или да промени информация, свързана с
към хардуерни ресурси чрез привилегирована инструкция - например четене или запис на указателя на
таблицата на страницата - той ще прихване към VMM. След това VMM може да въздейства
Следователно, ако има инструкция, която се опитва да прочете или напише такава чувствителна информация
traps, когато се изпълнява в потребителски режим, VMM може да го прихване и да поддържа виртуален
При липса на такава подкрепа трябва да се вземат други мерки. VMM трябва да вземе специални
предпазни мерки, за да открие всички проблемни инструкции и да гарантира, че те се държат
правилно, когато се изпълняват от гост OS, като по този начин увеличава сложността на VMM и
намалява производителността при изпълнение на VM.
Раздели 2.5 и 2.7 дават конкретни примери за проблемни инструкции в архитектурата 80x86.
Друго предизвикателство е виртуализацията на виртуалната памет, тъй като всяка гост OS във всяка
VM управлява свой собствен набор от таблици на страници. За да направи тази работа, VMM разделя
понятията за реална и физическа памет (които често се третират като синоними) и прави реалната
памет отделно, междинно ниво между виртуалната памет и физическата памет. (Някои използват
термините виртуална памет, физическа памет и машинна памет , за да назоват едни и същи три
нива.) OS за гости картографира виртуалната памет към реалната памет чрез своите таблици на
страници, а таблиците на VMM страници картографират реалната памет на гостите към физическата
памет . Архитектурата на виртуалната памет се определя или чрез таблици на страници, както в IBM
VM/370 и 80x86, или чрез TLB структура, както в много RISC архитектури.
Вместо да плаща допълнително ниво на ненасочване при всеки достъп до паметта, VMM
поддържа таблица със сенчести страници , която се преобразува директно от виртуалното адресно
пространство на гост към физическото адресно пространство на хардуера. Чрез откриване на всички
модификации в таблицата на страниците на госта, VMM може да гарантира, че записите в таблицата
на страниците в сянка, използвани от хардуера за преводи, съответстват на тези на средата на OS на
госта, с изключение на правилните физически страници, заместени за реални страници в таблиците
за гости. Следователно VMM трябва да улавя всеки опит на гост OS да промени своята таблица на
страници или да получи достъп до указателя на таблицата на страниците. Това обикновено се прави
чрез защита от запис на таблиците на страниците за гости и прихващане на всеки достъп до указателя
на таблицата на страниците от ОС за гости. Както беше отбелязано по-горе, последното се случва
естествено, ако достъпът до указателя на таблицата на страницата е привилегирована операция.
Архитектурата на IBM 370 реши проблема с таблицата на страниците през 70-те години с
допълнително ниво на индиректност, което се управлява от VMM. Гост ОС запазва своите таблици на
страници както преди, така че страниците в сянка са ненужни. AMD предложи подобна схема за
тяхната ревизия Pacifica на 80x86.
За виртуализиране на TLB в много RISC компютри, VMM управлява истинския TLB и има копие на
съдържанието на TLB на всяка гост VM. За да направите това, всички инструкции, които имат достъп
до TLB, трябва да прихванат. TLB с етикети за идентификатор на процес могат да поддържат
комбинация от записи от различни VM и VMM, като по този начин се избягва изтриването на TLB на
VM комутатор. Междувременно във фонов режим VMM поддържа съпоставяне между виртуалните
идентификатори на процеси на виртуалните машини и истинските идентификатори на процеси.
особено ако различни операционни системи за гости се поддържат на една и съща VM система. VM
илюзията може да се поддържа, като на всяка виртуална машина се предоставят общи версии на всеки тип I/O
създава виртуални дискове за виртуални машини за гости, а VMM поддържа картографирането на виртуални пътеки
Например, операционна система за гости управлява своята виртуална към реална страница, но това картографиране
поддържайте операционната система за гости щастлива. За да намалят тази неефективност, разработчиците на VMM
реши, че може да си струва да позволи на ОС за гости да знае, че работи на VM. Например, операционна система за
неговата виртуална памет, така че не се изисква управление на паметта от операционната система за гости.
наричана паравиртуализация, а Xen VMM с отворен код е добър пример. Xen VMM, който се използва в центровете
за данни на уеб услугите на Amazon, предоставя на ОС за гости абстракция на виртуална машина, подобна на
физическата
всяка VM. Тя позволява на операционната система за гости да разпределя страници, като просто проверява дали го прави
80х86. Xen VMM работи на най-високото ниво на привилегия (0), операционната система за гости
(3). Повечето операционни системи за 80x86 поддържат всичко на ниво на привилегия 0 или 3.
променя около 3000 реда или около 1% от специфичния за 80x86 код. Тези
машини към всяко хардуерно I/O устройство. Тези специални виртуални машини се наричат драйвер
домейни. (Xen нарича своите виртуални машини „домейни“.) Домейните на драйверите управляват физическото устройство
драйвери, въпреки че прекъсванията все още се обработват от VMM, преди да бъдат изпратени до
подходящ домейн на драйвер. Редовните виртуални машини, наречени домейни за гости, изпълняват прости
домейни на драйвери през канал за достъп до физически I/O хардуер. Данните се изпращат
Този раздел описва три теми, обсъждани в други глави, които са фундаментални за йерархиите на
паметта.
Например инструкцията 80x86 POPF зарежда регистрите на флаговете от върха на стека в паметта.
Един от флаговете е флагът за разрешаване на прекъсване (IE).
До последните промени за поддържане на виртуализация, изпълнението на инструкцията POPF в
потребителски режим, вместо да я прихване, просто промени всички флагове, с изключение на IE. В
системен режим той променя флага на IE. Тъй като ОС за гости работи в потребителски режим във
виртуална машина, това беше проблем, тъй като би очаквало да види променен IE.
Разширенията на архитектурата 80x86 за поддръжка на виртуализация елиминираха този проблем.
3. Намалете разходите за прекъсване, като насочвате прекъсванията към правилната VM без извикване
ing VMM.
IBM все още е златният стандарт на технологията за виртуални машини. Например мейнфреймът на IBM
работи с хиляди Linux VM през 2000 г., докато Xen управлява 25 VM през 2004 г. [Clark et al. 2004].
Данните могат да бъдат намерени в паметта и в кеша. Докато процесорът е единственият компонент,
който променя или чете данните и кешът стои между процесора и паметта, няма голяма опасност
процесорът да види старото или остаряло копие. Както ще видим, множество процесори и I/O устройства
увеличават възможността копията да бъдат непоследователни и да четат грешното копие.
2.6 Обединяване на всичко: йерархии на паметта в ARM Cortex-A8 и Intel Core i7 113
Целта на I/O системата в компютър с кеш е да предотврати проблема със застояли данни,
като същевременно се намесва възможно най-малко. Поради това много системи предпочитат
I/O да става директно в основната памет, като основната памет действа като I/O буфер. Ако се
използва кеш за запис, тогава паметта ще има актуално копие на информацията и няма да има
проблем с остарели данни за извеждане. (Това предимство е причината използваните процесори
да записват.) Уви, записът обикновено се среща днес само в кешове за данни от първо ниво,
поддържани от L2 кеш, който използва обратен запис.
Този раздел разкрива йерархиите на паметта на ARM Cortex-A8 (наричан по-долу Cortex-A8) и
Intel Core i7 (наричан по-нататък i7) и показва производителността на техните компоненти на
набор от еднонишкови бенчмаркове. Първо изследваме Cortex-A8, защото има по-проста
система за памет; навлизаме в повече подробности за i7, проследявайки подробно препратка
към паметта. Този раздел предполага, че читателите са запознати с организацията на
двустепенна кеш йерархия, използваща виртуално индексирани кешове. Основите на такава
система с памет са обяснени подробно в Приложение B и читателите, които не са сигурни в
организацията на такава система, силно се съветват да прегледат примера на Opteron в
Приложение B. След като разберат организацията на Opteron, краткото обяснението на
системата Cortex-A8, която е подобна, ще бъде лесно за следване.
Machine Translated by Google
ARM Cortex-A8
Cortex-A8 е конфигурируемо ядро, което поддържа набора от инструкции ARMv7
архитектура. Доставя се като IP (интелектуална собственост) ядро. IP ядрата са
доминираща форма на доставка на технологии на вградените, PMD и свързаните с тях пазари; милиарди
ARM и MIPS процесори са създадени от тези IP
ядра. Имайте предвид, че IP ядрата са различни от ядрата в многоядрените Intel i7 или AMD Ath-lon.
Едно IP ядро (което само по себе си може да бъде многоядрено) е проектирано да бъде
вграден с друга логика (следователно е ядрото на чип), включително специфични за приложението
процесори (като енкодер или декодер за видео), I/O интерфейси,
и интерфейси на паметта и след това произведени, за да се получи процесор, оптимизиран за a
специално приложение. Например, ядрото Cortex-A8 IP се използва в Apple
iPad и смартфони от няколко производителя, включително Motorola и Sam-sung. Въпреки че ядрото на
процесора е почти идентично, получените чипове имат
много разлики.
Обикновено IP ядрата се предлагат в два варианта. Твърдите ядра са оптимизирани за конкретен
производител на полупроводници и са черни кутии с външни (но все още в чип)
интерфейси. Твърдите ядра обикновено позволяват параметризация само на логиката извън
ядрото, като размерите на L2 кеша, и IP ядрото не могат да бъдат модифицирани. Меките ядра са
обикновено се доставя във форма, която използва стандартна библиотека от логически елементи. Мек
ядрото може да се компилира за различни доставчици на полупроводници и може също така да се
модифицира, въпреки че обширните модификации са много трудни поради сложността на
съвременни IP ядра. Като цяло твърдите ядра осигуряват по-висока производителност и
по-малка площ на матрицата, докато меките ядра позволяват пренасочване към други доставчици и могат да бъдат
по-лесно модифицирани.
Cortex-A8 може да издава две инструкции на такт при тактова честота до
1GHz. Може да поддържа кеш йерархия на две нива, като първото ниво е двойка
от кешове (за I & D), всеки 16 KB или 32 KB, организиран като четирипосочен набор асоциативен
и използване на предсказване на пътя и случайно заместване. Целта е да има латентност за достъп с
един цикъл за кеш паметта, което позволява на Cortex-A8 да поддържа забавяне при зареждане за
използване от един цикъл, по-просто извличане на инструкции и по-ниско наказание за извличане на
правилната инструкция, когато клон пропуска причинява грешна инструкция
предварително избрани. Допълнителният кеш от второ ниво, когато е наличен, е асоциативен с осем
начина и може да бъде конфигуриран от 128 KB до 1 MB; тя е организирана в едно към
четири банки, за да позволят няколко прехвърляния от паметта да се извършват едновременно. Ан
външната шина от 64 до 128 бита обработва заявки за памет. Кешът от първо ниво е
виртуално индексиран и физически маркиран, а кешът от второ ниво е физически
индексирани и маркирани; и двете нива използват 64-байтов размер на блока. За D-кеша от 32
KB и размер на страницата от 4 KB, всяка физическа страница може да се съпостави с два различни кеша
адреси; подобни псевдоними се избягват чрез хардуерно откриване при пропуск, както в Раздел
Б.3 от Приложение Б.
Управлението на паметта се управлява от чифт TLB (I и D), всеки от които
са напълно асоциативни с 32 записа и променлив размер на страницата (4 KB, 16 KB, 64
KB, 1 MB и 16 MB); подмяната в TLB се извършва чрез кръгов алгоритъм. TLB пропуските се обработват
в хардуер, който влиза в структурата на таблицата на страниците
Machine Translated by Google
2.6 Обединяване на всичко: йерархии на паметта в ARM Cortex-A8 и Intel Core i7 115
Към процесора
Към процесора
=?
Адрес за сравнение на L2 етикет <15> Индекс на L2 кеш <11> Отместване на блок <6>
Към процесора
=?
Към L1 кеш или CPU
Фигура 2.16 Виртуалният адрес, физическият адрес, индексите, таговете и блоковете с данни за ARM Cortex-A8 кешове за
данни и TLB за данни. Тъй като йерархиите на инструкциите и данните са симетрични, ние показваме само един. TLB
(инструкция или данни) е напълно асоциативен с 32 записа. Кешът L1 е четирипосочен асоциативен с 64-байтови блокове и
32 KB капацитет. Кешът L2 е асоциативен с осемпосочен набор с 64-байтови блокове и 1 MB капацитет. Тази фигура не показва
валидните битове и битовете за защита за кешовете и TLB, нито използването на битовете за предсказване на пътя, които
биха диктували прогнозираната банка на L1 кеша.
Machine Translated by Google
25%
Процент на пропускане на L1 данни
20%
15%
уп
о
енактси ро
н кн
нр
а С
п
д
10%
5%
0%
gzip vpr gcc mcf коварен парсер eon perlbmk празнина вихър bzip2
2.6 Обединяване на всичко: йерархии на паметта в ARM Cortex-A8 и Intel Core i7 117
3.5
2.5
кн
ааи
оте сауи
тна ам
н
рзпп кр
н
ое ааП
ъ
р н
п
д
кз
1.5
0,5
0
gzip vpr gcc mcf коварен парсер eon perlbmk празнина вихър bzip2
Фигура 2.18 Средното наказание за достъп до паметта за препратка към памет за данни, идваща от L1 и
L2, е показана за ARM процесора, когато се изпълнява Minnispec.
Въпреки че процентите на пропуски за L1 са значително по-високи, наказанието за пропуски на L2,
което е повече от пет пъти по-високо, означава, че пропуските на L2 могат да допринесат значително.
Наказанието за пропуск на L2 е 60 тактови цикъла, като се използва DDR SDRAM за основна памет.
Използвайки тези пропуски, Фигура 2.18 показва средното наказание за достъп до данни. В
следващата глава ще разгледаме влиянието на пропуските в кеша върху общия CPI.
Intel Core i7
i7 поддържа архитектурата на набора от инструкции x86-64, 64-битово разширение на
архитектурата 80x86. i7 е процесор за изпълнение извън ред, който включва четири ядра. В тази
глава се фокусираме върху дизайна на системата с памет и производителността от гледна точка
на едно ядро. Системната производителност на многопроцесорните дизайни, включително
многоядрения i7, е разгледана подробно в Глава 5.
Всяко ядро в i7 може да изпълни до четири 80x86 инструкции на тактов цикъл, използвайки
динамично планиран 16-етапен тръбопровод с множество издания, който описваме подробно в
глава 3. i7 може също така да поддържа до две едновременни нишки на процесор , използвайки
техника, наречена едновременна многопоточност,
Machine Translated by Google
описано в глава 4. През 2010 г. най-бързият i7 имаше тактова честота от 3,3 GHz, което
дава пикова скорост на изпълнение на инструкции от 13,2 милиарда инструкции в секунда, или
над 50 милиарда инструкции в секунда за четириядрения дизайн.
i7 може да поддържа до три канала на паметта, всеки от които се състои от отделен набор
от DIMM модули и всеки от които може да прехвърля паралелно. Използване на DDR3-1066
(DIMM PC8500), i7 има пикова честотна лента на паметта от малко над 25 GB/sec.
i7 използва 48-битови виртуални адреси и 36-битови физически адреси, което дава
максимална физическа памет от 36 GB. Управлението на паметта се обработва с TLB на две
нива (вижте Приложение B, Раздел B.4), обобщено на Фигура 2.19.
Фигура 2.20 обобщава тристепенната йерархия на кеша на i7. Първото ниво
кешовете са виртуално индексирани и физически маркирани (вижте Приложение B, Раздел B.3),
докато L2 и L3 кешовете са физически индексирани. Фигура 2.21 е обозначена с
Фигура 2.19 Характеристики на TLB структурата на i7, която има отделно първо ниво
инструкции и данни TLB, и двете подкрепени от съвместно второ ниво TLB. Първото ниво
TLB поддържат стандартния размер на страницата от 4 KB, както и ограничен брой записи
на големи страници от 2 до 4 MB; само 4 KB страници се поддържат в TLB от второ ниво.
Характеристика L1 L2 L3
2.6 Обединяване на всичко: йерархии на паметта в ARM Cortex-A8 и Intel Core i7 119
Данни в <64>
настолен компютър
2
1
<4> <1> <31> <24> <4> <1> <31> <24>
Прот V Етикет Физически адрес Прот V Етикет Физически адрес
аз
д
T T
Л 3 Л
б б
(128 PTE в 4 банки) 4
(64 PTE в 4 банки) <28>
4:1 мултиплексор 4:1 мултиплексор
<24> <128> <64>
<7> <7>
T
Л
б
4 (512 PTE =? в 4:1 мултиплексор
банки)
аз
V D 16 д V D
°С <1> <1> <23> Данни <128x4> °С <1> <1> Етикет <21> Данни <128×4>
А 5 А
°С 5 °С
з з
д д
6
=? =?
4:1 мултиплексор 4:1 мултиплексор
7
(512 блока в 8 банки)
(512 блока в 4 банки)
2:1 мултиплексор
<30>
V д
8 <21> Данни <512>
<9> Маркирайте <1> <1> <21>
L2
Етикет Индекс
°С
9
А
°С
з
д 10 8:1 мултиплексор
=?
DIMM
<64>
14
М М
V D А д Интерфейс на паметта
11 <17> 16
<13> <1> <1> Етикет <17> Данни <512> М
L3 аз
з
д 13 16:1 мултиплексор
=?
Фигура 2.21 Йерархията на паметта на Intel i7 и стъпките както в инструкциите, така и в достъпа до данни. Показваме само четения за
данни. Записите са подобни, тъй като започват с четене (тъй като кешовете се записват обратно). Пропуските се обработват чрез
просто поставяне на данните в буфер за запис, тъй като L1 кешът не е разпределен за запис.
Machine Translated by Google
или 7 бита. Страничната рамка на адреса на инструкцията (36 = 48 – 12 бита) се изпраща към TLB на
инструкцията (стъпка 1). В същото време 7-битовият индекс (плюс допълнителни 2 бита от отместването
на блока за избор на подходящите 16 байта, количеството за извличане на инструкцията) от виртуалния
адрес се изпраща към кеша на инструкциите (стъпка 2).
Забележете, че за четирипосочния асоциативен кеш с инструкции са необходими 13 бита за адреса на
кеша: 7 бита за индексиране на кеша плюс 6 бита блоково отместване за 64-байтовия блок, но размерът
на страницата е 4 KB = 212 , което означава, че 1 бит от
индексът на кеша трябва да идва от виртуалния адрес. Това използване на 1 бит виртуален адрес
означава, че съответният блок може действително да бъде на две различни места в кеша, тъй като
съответният физически адрес може да има 0 или 1 на това място. За инструкциите това не представлява
проблем, тъй като дори ако една инструкция се появи в кеша на две различни места, двете версии трябва
да са еднакви. Ако такова дублиране или псевдоним на данни е разрешено, кешът трябва да се
проверява, когато картата на страницата се променя, което е рядко събитие.
Обърнете внимание, че едно много просто използване на оцветяване на страници (вижте Приложение
B, Раздел B.3) може да елиминира възможността за тези псевдоними. Ако виртуални страници с четен
адрес се съпоставят с физически страници с четен адрес (и същото за нечетните страници), тогава тези
псевдоними никога не могат да възникнат, тъй като битът от нисък ред във виртуалния и физическия
номер на страница ще бъде идентичен.
Осъществява се достъп до инструкцията TLB, за да се намери съвпадение между адреса и валиден
запис в таблицата на страниците (PTE) (стъпки 3 и 4). В допълнение към превода на адреса, TLB проверява
дали PTE изисква този достъп да доведе до изключение поради нарушение на достъпа.
Пропуснат TLB на инструкция първо отива към L2 TLB, който съдържа 512 PTE с размер на страницата
4 KB и е четирипосочен асоциативен набор. Необходими са два тактови цикъла, за да се зареди L1 TLB
от L2 TLB. Ако L2 TLB пропусне, се използва хардуерен алгоритъм за обхождане на таблицата на
страниците и актуализиране на TLB записа. В най-лошия случай страницата не е в паметта и
операционната система получава страницата от диска. Тъй като милиони инструкции могат да се
изпълнят по време на грешка на страницата, операционната система ще замени друг процес, ако някой
чака да се изпълни. В противен случай, ако няма TLB изключение, достъпът до кеша на инструкции
продължава.
Индексното поле на адреса се изпраща до четирите банки на кеша за инструкции (стъпка 5). Тагът
за кеша на инструкциите е 36 – 7 бита (индекс) – 6 бита (отместване на блок) или 23 бита. Четирите
етикета и валидните битове се сравняват с рамката на физическата страница от инструкцията TLB (стъпка
6). Тъй като i7 очаква 16 байта за всяко извличане на инструкция, се използват допълнителни 2 бита от 6-
битовото отместване на блока, за да се изберат подходящите 16 байта. Следователно, 7 + 2 или 9 бита
се използват за изпращане на 16 байта инструкции към процесора. L1 кеш паметта е конвейерна и
латентността на попадението е 4 тактови цикъла (стъпка 7). Пропускът отива в кеша от второ ниво.
2.6 Обединяване на всичко: йерархии на паметта в ARM Cortex-A8 и Intel Core i7 121
така че 30-битовият блоков адрес (36-битов физически адрес – 6-битово блоково отместване) е
разделен на 21-битов етикет и 9-битов индекс (стъпка 8). Още веднъж, индексът и етикетът
се изпращат до всичките осем банки на унифицирания L2 кеш (стъпка 9), които се сравняват в
паралелен. Ако едно съвпада и е валидно (стъпка 10), той връща блока последователно
ред след първоначалната латентност от 10 цикъла при скорост от 8 байта на тактов цикъл.
Ако L2 кеша пропусне, има достъп до L3 кеша. За четириядрен i7, който
има 8 MB L3, размерът на индекса е
13-битовият индекс (стъпка 11) се изпраща до всичките 16 банки на L3 (стъпка 12). Етикетът L3,
което е 36 (13 + 6) = 17 бита, се сравнява с физическия адрес от
TLB (стъпка 13). Ако възникне попадение, блокът се връща след първоначално забавяне при a
скорост от 16 байта на часовник и поставени както в L1, така и в L3. Ако L3 пропусне, се инициира достъп
до паметта.
Ако инструкцията не е намерена в L3 кеша, контролерът на паметта в чипа
трябва да вземе блока от основната памет. i7 има три 64-битови канала на паметта
който може да действа като един 192-битов канал, тъй като има само един контролер на паметта и
един и същ адрес се изпраща и на двата канала (стъпка 14). Широките трансфери се случват, когато
и двата канала имат идентични DIMM модули. Всеки канал поддържа до четири DDR
DIMM модули (стъпка 15). Когато данните се върнат, те се поставят в L3 и L1 (стъпка 16)
тъй като L3 е включен.
Ако тази първоначална инструкция е зареждане, адресът на данните се изпраща до кеша за данни и
данни TLB, действащи много като достъп до кеша на инструкции с една ключова разлика. Кешът за
данни от първо ниво е асоциативен с осем начина, което означава, че индексът
е 6 бита (срещу 7 за кеша на инструкциите) и адресът, използван за достъп до кеша
1. Тъй като L1 кешът за данни не е разпределен за запис, записите могат да улучат, но никога не
пропускат, в смисъл, че запис, който не уцелва, просто поставя данните си в буфера за запис и
не се записва като пропуск.
2. Тъй като спекулациите понякога може да са грешни (вижте Глава 3 за обширна дискусия), има
препратки към L1 кеша за данни, които не съответстват на зареждания или запаметявания,
които в крайна сметка завършват изпълнението. Как трябва да се третират такива пропуски?
2.6 Обединяване на всичко: йерархии на паметта в ARM Cortex-A8 и Intel Core i7 123
50%
L1 D пропуски/L1 D препратки към кеша
40%
35%
30%
25%
20%
15%
10%
5%
0%
Фигура 2.22 Показана е степента на пропуски в кеша за данни L1 за 17 теста за сравнение на SPECCPU2006
по отношение на всички препратки към L1, което също включва предварително извличане, спекулативни натоварвания
пропуски. Тези данни, както и останалите в този раздел, са събрани от професор Lu Peng и
Доцент доктор. студент Ying Zhang, и двамата от Луизианския държавен университет, въз основа на по-ранни проучвания на
PERLBENCH 2% 1%
BZIP2 5% 3%
GCC 14% 6%
MCF 46% 24%
ГОБМК 3% 2%
ХММЪР 4% 3%
SJENG 2% 1%
Фигура 2.23 Пропуските на основния кеш данни са показани спрямо всички зареждания, които са завършили
16%
L2 пропуска/всички препратки към D кеш
L3 пропуска/всички препратки към D кеш
14%
12%
10%
8%
6%
4%
2%
0%
GCC MCF МЛЯКО LBM
NAMD DEALII SOPLEX POVRAY СПИНКС3
PERLBENCH BZIP2 GOBMK HMMER SJENG LIBQUANTUM H264REF OMNETPP ASTAR XALANCBMK
PERLBENCH 1% 0%
BZIP2 2% 0%
GCC 6% 1%
MCF 15% 5%
ГОБМК 1% 0%
ХММЪР 2% 0%
SJENG 0% 0%
LIBQUANTUM 3% 0%
H264REF 1% 0%
OMNETPP 7% 3%
ЗВЕЗДА 3% 1%
XALANCBMK 4% 1%
МЛЯКО 6% 1%
NAMD 0% 0%
СДЕЛКИ 4% 0%
СОПЛЕКС 9% 1%
ПОВРАЙ 0% 0%
LBM 4% 4%
СПИНКС3 7% 0%
Фигура 2.25 Процентите на пропуски L2 и L3, показани в таблична форма спрямо броя на данните
заявки.
160
Д: Лукас D: gcc Аз: gcc
140 D: празнина Аз: празнина
Аз: Лукас
120
100
80
0П
а
н
тос0р
ииицкксуурп0 и
н
1
60
40
20
0
4 16 64 256 1024 4096
Размер на кеша (KB)
Фигура 2.26 Инструкции и пропуски на данни на 1000 инструкции, тъй като размерът на кеша варира
от 4 KB до 4096 KB. Пропуските на инструкции за gcc са 30 000 до 40 000 пъти по-големи от
lucas и, обратно, пропуските на данни за lucas са 2 до 60 пъти по-големи от gcc. Програмите gap, gcc
и lucas са от комплекта за сравнение SPEC2000.
числа и с плаваща запетая могат да бъдат погрешни, както ни напомнят mcf и sphnix3!
йерархия на паметта.
Тук наистина има три клопки. Човек се опитва да предвиди ефективността на голям
Клопка Не осигурява висока честотна лента на паметта в система, базирана на кеш памет.
Кешовете помагат при средна латентност на кеш паметта, но може да не осигурят висока честотна лента на
проектирайте памет с висока честотна лента зад кеша за такива приложения. Ние ще
Клопка Внедряване на монитор на виртуална машина върху архитектура на набор от инструкции, която
Много архитекти през 70-те и 80-те години на миналия век не бяха внимателни, за да се уверят, че всички
инструкции за четене или писане на информация, свързана с информация за хардуерни ресурси, бяха
6
1
5
2, 3, 4, 5
такцн
ии сууррпп0
тка 0П
р
а
н
с0р
тое и
н
п
1
4
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9
Инструкции (милиарди)
9
5
8
3
7
4 2
6
5
такцн
ии сууррпп0
тка 0П
р
а
н
с0р
тое и
н
п
1
3
1
2
0
0 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42
Инструкции (милиарди)
Фигура 2.27 Пропуски на инструкции за 1000 препратки за пет входа към perl бенчмарк от
SPEC2000. Има малко вариации в пропуските и малка разлика между тях
петте входа за първите 1,9 милиарда инструкции. Изпълнението до завършване показва
как пропуските варират през живота на програмата и как зависят от входа. Горната графика
показва текущите средни пропуски за първите 1,9 милиарда инструкции, които започват
от около 2,5 и завършват с около 4,7 пропуска на 1000 препратки за всичките пет входа.
Долната графика показва текущите средни пропуски за изпълнение до завършване, което
отнема от 16 до 41 милиарда инструкции в зависимост от входа. След първите 1,9
милиарда инструкции, пропуските на 1000 препратки варират от 2,4 до 7,9 в зависимост от
входа. Симулациите бяха за процесора Alpha, използващ отделни L1 кешове за инструкции
и данни, всеки двупосочен 64 KB с LRU и унифициран 1 MB директно картографиран L2 кеш.
Machine Translated by Google
Достъп до чувствителни регистри без прихващане, Регистър на глобална дескрипторна таблица за съхранение (SGDT)
При достъп до механизми за виртуална памет в Зареждане на права за достъп от сегментен дескриптор (LAR)
потребителски режим инструкциите не Ограничение за зареждане на сегмент от дескриптор на сегмент (LSL)
успяват да преминат проверките за Проверете дали дескрипторът на сегмента е четим (VERR)
Фигура 2.28 Резюме на 18 инструкции 80x86, които причиняват проблеми при виртуализацията [Robin and Irvine 2000]. Първите пет
инструкции от горната група позволяват на програма в потребителски режим да чете контролен регистър, като регистър на
причинявайки капан. Инструкцията за поп флагове модифицира контролен регистър с чувствителна информация, но се проваля
архитектурата на 80x86 е провалът на долната група, тъй като всяка от тези инструкции проверява имплицитно нивото на привилегия
ниво, което не е случаят с виртуалните машини за гости. Само регистърът MOVE to segment се опитва
След включване на режима, който позволява поддръжка на VT-x (чрез новата инструкция
VMXON), VT-x предлага четири нива на привилегия за OS за гости, които са с по-нисък приоритет от
първоначалните четири (и коригира проблеми като проблема с POPF инструкцията споменато по-
рано). VT-x улавя всички състояния на виртуална машина в състоянието на управление на виртуална
машина (VMCS) и след това предоставя атомарни инструкции за запазване и възстановяване на
VMCS. В допълнение към критичното състояние, VMCS включва конфигурационна информация, за
да определи кога да се извика VMM и след това конкретно какво е причинило извикването на VMM.
За да се намали броят на извикванията на VMM, този режим добавя сенчести версии на някои
чувствителни регистри и добавя маски, които проверяват дали критичните битове на чувствителен
регистър ще бъдат променени преди прихващане. За да се намалят разходите за виртуализиране
на виртуалната памет, SVM на AMD добавя допълнително ниво на индиректност, наречено вложени
таблици на страници. Това прави таблиците със сенчести страници ненужни.
През последните тридесет години имаше няколко прогнози за изтъкнато [sic] прекратяване на
скоростта на подобряване на компютърната производителност. Всяка такава прогноза беше
погрешна. Те грешаха, защото се основаваха на неизявени предположения, които бяха преобърнати
от последващи събития. Така например неуспехът да се предвиди преминаването от дискретни
компоненти към интегрални схеми доведе до предсказанието, че скоростта на светлината ще
ограничи скоростите на компютрите до няколко порядъка по-бавни от сегашните. Нашата прогноза
за стената на паметта вероятно също е погрешна, но предполага, че трябва да започнем да мислим
„извън кутията“.
паралелизмът направи тази крачка напред, като предостави повече паралелизъм и следователно повече
Една идея, която периодично възниква, е използването на управлявана от програмист скречпад или
GPU (вижте Глава 4), където локалните памети на scratchpad се използват силно, the
идея, която вероятно ще ни позволи да продължим да създаваме по-бързи компютри и да гарантираме това
В раздел L.3 (достъпен онлайн) разглеждаме историята на кеш паметта, виртуалната памет и виртуалните
Неблокиращи кешове
за (i = 0; i < 3; i++) {
[j]; }
Да приемем, че както входната, така и изходната матрица се съхраняват в основния ред на реда
(главният ред на реда означава, че индексът на реда се променя най-бързо). Да приемем, че
изпълнявате транспониране с двойна точност 256 × 256 на процесор с 16 KB напълно асоциативен
(не се притеснявайте за конфликти в кеша) най-скоро използван (LRU) заместващ L1 кеш за данни с
64 байтови блокове. Да приемем, че пропуските или предварителното извличане на L1 кеша изискват
16 цикъла и винаги попадат в L2 кеша и че L2 кешът може да обработва заявка на всеки два цикъла
на процесора. Да приемем, че всяка итерация на вътрешния цикъл по-горе изисква четири цикъла,
ако данните присъстват в L1 кеша.
Да приемем, че кешът има политика за извличане при запис за разпределяне на запис за пропуски при запис.
2.1 [10/15/15/12/20] <2.2> За простото изпълнение, дадено по-горе, този ред на изпълнение би бил неидеален
за входната матрица; въпреки това, прилагането на оптимизация на обмен на цикъл би създало
неидеален ред за изходната матрица. Тъй като обменът на контури не е достатъчен за подобряване
на неговата производителност, вместо това той трябва да бъде блокиран.
а. [10] <2.2> Какъв трябва да бъде минималният размер на кеша, за да се възползвате от блокираното
изпълнение?
b. [15] <2.2> Как се сравнява относителният брой пропуски в блокираните и неблокираните версии в
кеша с минимален размер по-горе? ° С. [15] <2.2> Напишете код за извършване
д. [20] <2.2> Изпробвайте блокирани и неблокирани 256 × 256 матрични транспозиции на компютър. До каква
степен резултатите отговарят на вашите очаквания въз основа на това, което знаете за системата с памет
2.2 [10] <2.2> Да приемем, че проектирате хардуерен инструмент за предварително извличане за деблокирания матричен
предварително извлича само последователни кеш блокове след пропуск. По-сложните хардуерни програми за
предварително извличане на „non-unit stride“ могат да анализират пропуснат референтен поток и да откриват и
извличат предварително не-unit strides. За разлика от това, софтуерното предварително извличане може да
определи крачките, които не са единици, толкова лесно, колкото може да определи крачките на единиците. Да
данни, които трябва да се използват преди данните, които се извличат предварително). За най-добро
представяне при предварително избиране на крачка без единица, в стабилно състояние на вътрешния цикъл
2.3 [15/20] <2.2> При софтуерното предварително извличане е важно да внимавате предварителното извличане да се
замърсяването на кеша. Това се усложнява от факта, че различните процесори имат различни възможности и
предварително извличане.
Програмата на фигура 2.29 може да се използва за оценка на поведението на система с памет. Ключът е да
имате точно време и след това програмата да премине през паметта, за да извика различни нива на йерархията.
Фигура 2.29 показва кода в C. Първата част е процедура, която използва стандартна помощна програма, за да
получи точна мярка за процесорното време на потребителя; тази процедура може да се наложи да бъде
променена, за да работи на някои системи. Втората част е вложен цикъл за четене и запис на памет с различни
крачки и размери на кеша. За да получите точно време на кеша, този код се повтаря много пъти. Третата част
умножава само режийните разходи за вложен цикъл, за да може да се извади от общото измерено време, за да
се види колко дълги са били достъпите. Резултатите се извеждат във файлов формат .csv за улесняване на
Изпълнението на програмата в режим за един потребител или поне без други активни приложения ще даде по-
последователни резултати. Кодът на фигура 2.29 е извлечен от програма, написана от Андреа Дюсо от
#include "stdafx.h"
#include <stdio.h>
#include <time.h>
#define ARRAY_MIN (1024) /* 1/4 най-малък кеш */ #define
ARRAY_MAX (4096*4096) /* 1/4 най-голям кеш */ int x[ARRAY_MAX]; /*
масивът ще премине през */
/* Инициализиране на изхода
*/ printf(" ,"); за
(крачка=1; крачка <= ARRAY_MAX/2; крачка=крачка*2)
етикет (крачка*sizeof(int));
printf("\n");
1000
8K
16K
32K
64K
128K
256K
512K
100
1M
2M
4M
8M
ететечо)sрnП(
16M
32M
64M
128M
10
256M
512M
1
4B 16B 64B 256B 4K1K 16K 64K 256K 4M1M 16M 64M 256M
Крачка
2.4 [12/12/12/10/12] <2.6> Използването на примерната програма води до резултати на Фигура 2.30:
2.5 [12/15/15/20] <2.6> Ако е необходимо, променете кода на Фигура 2.29 , за да измерите следните
характеристики на системата. Начертайте резултатите от експеримента с изминалото време по
оста y и стъпката на паметта по оста x. Използвайте логаритмични скали за двете оси и
начертайте линия за всеки размер на кеша.
2.6 [20/20] <2.6> В многопроцесорни системи с памет по-ниските нива на йерархията на паметта може
да не могат да бъдат наситени от един процесор, но трябва да могат да бъдат наситени от
множество процесори, работещи заедно. Променете кода на Фигура 2.29 и стартирайте няколко
копия едновременно. Можете ли да определите: а. [20] <2.6> Колко реални процесора
има във вашата компютърна система и колко системни процесора са само допълнителни
многонишкови контексти?
2.7 [20] <2.6> Можете ли да измислите начин да тествате някои от характеристиките на кеша на
инструкции с помощта на програма? Съвет: Компилаторът може да генерира голям брой
неочевидни инструкции от част от кода. Опитайте се да използвате прости аритметични
инструкции с известна дължина във вашата архитектура на набор от инструкции (ISA).
Упражнения
2.8 [12/12/15] <2.2> Следните въпроси изследват въздействието на малки и прости кешове, използващи
CACTI и предполагат 65 nm (0,065 μm) технология.
(CACTI се предлага в онлайн формуляр на http://quid.hpl.hp.com:9081/cacti/.) а. [12] <2.2>
асоциативен кеш с осемпосочен набор. Като цяло има 0,3 препратки към данни на инструкция. Да
приемем, че пропуските в кеша отнемат 10 ns във всички модели. За да изчислите времето за
попадение в цикли, приемете изходното време за цикъл с помощта на CACTI, което съответства
на максималната честота, която кешът може да работи без никакви мехурчета в конвейера.
2.9 [12/15/15/10] <2.2> Вие проучвате възможните ползи от L1 кеш с предсказване на пътя. Да приемем, че 64
KB четирипосочен асоциативен еднобанкиран L1 кеш за данни е ограничителят на времевия цикъл в
системата. Като алтернативна организация на кеша обмисляте кеш с прогнозиране на пътя, моделиран
като 64 KB директно картографиран кеш с 80% точност на прогнозиране. Освен ако не е посочено
друго, приемете, че погрешно предвиден достъп до кеша отнема още един цикъл. Да приемем
процентите на пропуски и наказанията за пропуски във въпрос 2.8 част (c). а. [12] <2.2> Какво е средното
време за достъп до паметта на текущия кеш (in
b. [15] <2.2> Ако всички останали компоненти можеха да работят с по-бързо предвиденото време на
цикъла на кеша (включително основната памет), какво би било въздействието върху
производителността от използването на предвидения по начин кеш?
° С. [15] <2.2> Предсказаните по пътя кешове обикновено се използват само за кешове на инструкции,
които захранват опашка с инструкции или буфер. Представете си, че искате да изпробвате
предсказване на пътя в кеш данни. Да приемем, че имате 80% точност на прогнозиране и че
последващите операции (напр. достъп до кеша на данни на други инструкции, зависими операции)
се издават при предположение за правилно прогнозиране на пътя. По този начин погрешното
предсказване налага необходимостта от промиване на канала и прихващане за повторно
възпроизвеждане, което изисква 15 цикъла. Положителна или отрицателна ли е промяната в
средното време за достъп до паметта на инструкция за зареждане с прогнозиране на пътя на кеша на данни и
д. [10] <2.2> Като алтернатива на предсказването на пътя, много големи асоциативни L2 кешове
сериализират етикети и достъп до данни, така че трябва да се активира само необходимият масив
от данни. Това спестява енергия, но увеличава времето за достъп. Използвайте подробния уеб
интерфейс на CACTI за 0,065 μm процес 1 MB четирипосочен асоциативен кеш с 64 байтови
блокове, 144 бита за четене, 1 банка, само 1 порт за четене/запис, 30 битови тагове и ITRS-HP
технология с глобални проводници . Какво е съотношението на времената за достъп за
сериализиране на етикет и достъп до данни в сравнение с паралелния достъп?
2.10 [10/12] <2.2> Бяхте помолени да проучите относителната производителност на банковия спрямо конвейерния
L1 кеш за данни за нов микропроцесор. Да приемем 64 KB двупосочен асоциативен кеш с 64 байтови
блокове. Конвейерният кеш ще се състои от три тръбопроводни етапа, подобни по капацитет на кеша
за данни Alpha 21264. Банкираното внедряване ще се състои от две асоциативни банки с двупосочен
набор от 32 KB. Използвайте CACTI и приемете 65 nm (0,065 μm) технология, за да отговорите на
следните въпроси. Изходното време на цикъла в уеб версията показва на каква честота кешът може да
работи без никакви мехурчета в конвейера. а. [10] <2.2> Какво е времето за цикъл на кеша в сравнение
с времето му за достъп и колко етапа на канала ще заеме кешът (до два знака след
десетичната запетая)?
Machine Translated by Google
2.11 [12/15] <2.2> Помислете за използването на критична дума първа и ранно рестартиране при
пропуски в L2 кеша. Да приемем 1 MB L2 кеш с 64 байтови блокове и път за презареждане,
който е широк 16 байта. Да приемем, че L2 може да бъде записан с 16 байта на всеки 4
цикъла на процесора, времето за получаване на първия 16-байтов блок от контролера
на паметта е 120 цикъла, всеки допълнителен 16-байтов блок от основната памет изисква
16 цикъла и данните могат да бъдат прескочен директно в порта за четене на L2 кеша.
Игнорирайте всички цикли за прехвърляне на заявката за пропуск в L2 кеша и исканите
данни в L1 кеша.
b. [15] <2.2> Смятате ли, че първата критична дума и ранното рестартиране биха били
по-важни за кеш L1 или L2 и какви фактори биха допринесли за относителната им
важност?
2.12 [12/12] <2.2> Вие проектирате буфер за запис между L1 кеш за запис и L2 кеш за обратно
записване. L2 кеш шината за запис на данни е широка 16 B и може да извършва запис
към независим кеш адрес на всеки 4 цикъла на процесора. а. [12] <2.2> Колко
байта трябва да е широк всеки запис в буфера за запис? b. [15] <2.2> Какво
[15] <2.2> Какъв би бил ефектът от възможни пропуски на L1 върху броя на необходимите
записи в буфер за запис за системи с блокиращи и неблокиращи кешове?
2.13 [10/10/10] <2.3> Помислете за настолна система с процесор, свързан към 2 GB DRAM с код за
коригиране на грешки (ECC). Да приемем, че има само един канал на паметта с ширина
от 72 бита до 64 бита за данни и 8 бита за ECC. а. [10] <2.3> Колко DRAM чипа
има на DIMM, ако се използват 1 GB DRAM чипове и колко I/O данни трябва да има всяка
DRAM, ако само една DRAM се свързва към всеки щифт за данни на DIMM?
блока? ° С. [10] <2.3> Изчислете пиковата честотна лента за DDR2-667 и DDR2-533 DIMM
модули за четене от активна страница, с изключение на ECC overhead.
2.14 [10/10] <2.3> Примерна времева диаграма на DDR2 SDRAM е показана на Фигура 2.31. tRCD е
времето, необходимо за активиране на ред в банка, а латентността (CL) на адрес на
колона (CAS) е броят цикли, необходими за прочитане на колона в ред. Да приемем, че
RAM е на стандартен DDR2 DIMM с ECC , като има 72 линии за данни. Също така приемете
дължини на пакет от 8, които четат 8 бита или общо 64 B от
Machine Translated by Google
Часовник
CMD/ ДЕЙСТВАЙ RD
ДОБАВЯНЕ B0, Rx B0, Cx
T
RCD CAS латентност Изход на данни Изход на данни
Данни
b. [10] <2.3> Каква е относителната латентност при използване на DDR2-667 DIMM на четене,
изискващо активиране на банка, спрямо едно към вече отворена страница, включително
времето, необходимо за обработка на пропуска вътре в процесора?
2.15 [15] <2.3> Да приемем, че DDR2-667 2 GB DIMM с CL = 5 е наличен за $130, а DDR2-533 2 GB DIMM с
CL = 4 е наличен за $100. Да приемем, че в една система се използват два DIMM модула, а
останалата част от системата струва $800.
Помислете за производителността на системата, използваща DDR2-667 и DDR2-533 DIMM
модули при работно натоварване с 3,33 L2 пропуска на 1K инструкции и приемете, че 80% от
всички четения на DRAM изискват активиране. Каква е производителността на разходите на
цялата система при използване на различните DIMM модули, ако приемем, че само един L2
пропуск е неизпълнен в даден момент и ядро в ред с CPI от 1,5, без да включва L2 кеш пропуск
време за достъп до паметта?
2.16 [12] <2.3> Осигурявате сървър с осемядрен 3 GHz CMP, който може да изпълни работно
натоварване с общ CPI от 2.0 (ако приемем, че не се забавят попълванията на L2 кеш паметта).
Размерът на L2 кеша е 32 байта. Ако приемем, че системата използва DDR2-667 DIMM, колко
независими канала за памет трябва да бъдат осигурени, така че системата да не е ограничена
от честотната лента на паметта, ако изискваната честотна лента понякога е два пъти по-
висока от средната? Работните натоварвания предизвикват средно 6,67 L2 пропуска на 1K
инструкции.
2.17 [12/12] <2.3> Голямо количество (повече от една трета) DRAM мощност може да се дължи на
активиране на страница (вижте http://download.micron.com/pdf/technotes/ddr2/TN4704.pdf и
www.micron.com/systemcalc). Да приемем, че изграждате система с 2 GB памет, като използвате
или 8-банкови 2 GB x8 DDR2 DRAM, или 8-банкови 1 GB x8 DRAM, и двете с еднаква скорост. И
двете използват размер на страницата от 1 KB, а
Machine Translated by Google
активно не е значително. а. [12] <2.3> Кой тип DRAM се очаква да осигури по-висока
производителност на системата? Обясни защо.
b. [12] <2.3> Как 2 GB DIMM, направен от 1 GB x8 DDR2 DRAM, се сравнява с DIMM с подобен
капацитет, направен от 1 Gb x4 DDR2 DRAM по отношение на мощност?
2.18 [20/15/12] <2.3> За достъп до данни от типична DRAM, първо трябва да активираме съответния ред.
Да приемем, че това носи цяла страница с размер 8 KB в буфера на реда. След това избираме
определена колона от буфера на редовете. Ако следващите достъпи до DRAM са към същата
страница, тогава можем да пропуснем стъпката за активиране; в противен случай трябва да
затворим текущата страница и да заредим предварително битовите линии за следващото
активиране. Друга популярна политика на DRAM е проактивно затваряне на страница и
предварително зареждане на битови линии веднага щом достъпът приключи. Да приемем, че
всяко четене или запис в DRAM е с размер 64 байта и латентността на DDR шината (данните на
Фигура 2.30) за изпращане
на 512 бита е Tddr. а. [20] <2.3> Ако приемем, че DDR2-667, ако са необходими пет цикъла за
предварително зареждане, пет цикъла за активиране и четири цикъла за четене на колона,
за каква стойност на скоростта на попадение на буфера на реда (r) ще изберете една политика
вместо друг, за да получите най-доброто време за достъп? Да приемем, че всеки достъп до
DRAM е разделен от достатъчно време, за да завърши произволен нов достъп.
b. [15] <2.3> Ако 10% от общите достъпи до DRAM се случват един след друг или непрекъснато без
никакво времево прекъсване, как ще се промени решението ви?
° С. [12] <2.3> Изчислете разликата в средната DRAM енергия за достъп между двете политики,
като използвате изчисления по-горе процент на попадения в буфера на редовете.
Да приемем, че предварителното зареждане изисква 2 nJ, а активирането изисква 4 nJ и че
са необходими 100 pJ/bit за четене или запис от буфера на реда.
2.19 [15] <2.3> Когато компютърът е неактивен, можем или да го поставим в режим на готовност (където
DRAM все още е активен), или можем да го оставим да хибернира. Да приемем, че за хибернация
трябва да копираме само съдържанието на DRAM на енергонезависима среда като Flash.
Ако четенето или записването на кеш линия с размер 64 байта във Flash изисква 2,56 μJ, а DRAM
изисква 0,5 nJ, и ако консумацията на енергия в неактивен режим за DRAM е 1,6 W (за 8 GB), колко
време трябва да е неактивна системата, за да се възползва от хибернация? Да предположим, че
основната памет е с размер 8 GB.
2.20 [10/10/10/10/10] <2.4> Виртуалните машини (VM) имат потенциала да добавят много полезни
възможности към компютърните системи, като например подобрена обща цена на притежание
(TCO) или наличност. Могат ли VM да се използват за предоставяне на следните възможности?
Ако е така, как биха могли да улеснят това? а. [10] <2.4>
b. [10] <2.4> Бързо повторно разполагане на приложения в случай на бедствие или повреда?
Machine Translated by Google
д. [10] <2.4> Изолиране на грешки между различни приложения, което води до по-високи
наличност за услуги?
програми се очаква да имат по-малко забавяне, когато работят под виртуални машини?
b. [10] <2.4> Ако забавянията бяха линейни като функция на системното време, като се има предвид
забавяне по-горе, колко по-бавно би програма, изразходваща 20% от своите
изпълнение в системно време се очаква да се изпълнява?
Фигура 2.32 Ранна производителност на различни системни повиквания при естествено изпълнение, чисто
виртуализация и паравиртуализация.
Machine Translated by Google
2.22 [12] <2.4> Дефиницията на Попек и Голдбърг за виртуална машина казва, че тя няма да бъде разграничена
от реална машина, освен по нейната производителност. В този въпрос ще използваме тази
дефиниция, за да разберем дали имаме достъп до естествено изпълнение на процесор или работим
на виртуална машина. Технологията Intel VT-x ефективно осигурява втори набор от нива на
привилегии за използване на виртуалната машина. Какво би трябвало да прави виртуална машина,
работеща върху друга виртуална машина, ако приемем технологията VT-x?
2.23 [20/25] <2.4> С приемането на поддръжка за виртуализация на x86 архитектурата, виртуалните машини
активно се развиват и стават масови. Сравнете и контрастирайте технологиите за виртуализация
Intel VT-x и AMD-V на AMD. (Информация за AMD-V може да бъде намерена на http://sites.amd.com/
us/business/it-solutions/ virtualization/Pages/resources.aspx.) а. [20] <2.4> Кое от тях би могло да осигури
по-висока производителност за приложения,
b. [25] <2.4> Информация за поддръжката на IOMMU на AMD за виртуализиран I/O може да бъде
намерена на http://developer.amd.com/documentation/articles/pages/892006101.aspx.
Какво правят технологията за виртуализация и модулът за управление на входно/изходната
памет (IOMMU) за подобряване на виртуализираната I/O производителност?
2.24 [30] <2.2, 2.3> Тъй като паралелизмът на ниво инструкция може също така да бъде ефективно използван
при суперскаларни процесори в ред и процесори с много дълги командни думи (VLIW) със спекулации,
една важна причина за изграждане на извънредно (OOO ) суперскаларният процесор е способността
да толерира непредвидима латентност на паметта, причинена от пропуски в кеша. Следователно
можете да мислите за хардуера, поддържащ проблема с OOO, като част от системата за памет!
Погледнете етажния план на Alpha 21264 на Фигура 2.33 , за да намерите относителната площ на
опашките за проблеми с цели числа и с плаваща запетая и съпоставителите спрямо кешовете.
Опашките планират инструкции за издаване, а съпоставителите преименуват спецификаторите на
регистъра. Следователно това са необходими допълнения в подкрепа на издаването на OOO. 21264
има само L1 кешове за данни и инструкции на чип и и двата са 64 KB двупосочен набор асоциативни.
Използвайте суперскаларен симулатор на OOO като SimpleScalar (www.cs.wisc.edu/~mscalar/
simplescalar.html) върху бенчмаркове с интензивно използване на паметта, за да разберете колко
производителност се губи, ако областта на опашките за проблеми и съпоставителите се използва за
допълнителна L1 област на кеша за данни в суперскаларен процесор в ред, вместо проблем с OOO
в модел на 21264 Уверете се, че другите аспекти на машината са възможно най-сходни, за да бъде
сравнението справедливо. Игнорирайте всяко увеличаване на достъпа или времето за цикъл от по-
големи кешове и ефектите от по-големия кеш на данни върху етажния план на чипа. (Имайте
предвид, че това сравнение няма да е напълно справедливо, тъй като кодът няма да е планиран за
процесора по ред от компилатора.)
2.25 [20/20/20] <2.6> Анализаторът на производителността на Intel VTune може да се използва за извършване
на много измервания на поведението на кеша. Безплатна пробна версия на VTune за Windows и
Linux може да бъде изтеглена от http://software.intel.com/en-us/articles/intel-vtune-amplifier-xe/ .
Програмата (aca_ch2_cs2.c), използвана в Казус 2, е модифицирана, така че да може да работи с VTune
от кутията на Microsoft Visual C++. Програмата може да бъде изтеглена от www.hpl.hp.com/
Machine Translated by Google
автобус
ретсъл)к1(
ретсъл)к0(
дЦ
ч
е
дЦ
ч
е
и
и
ся
ся
лли
лли
н
н
аацвиоо
аацвиоо
опашка
памет
Цяло число
контролер
опашка
щ
ия
а цаиатн дап
апл
веи Езс
Шини за данни и управление
Контролер на паметта
мачилвзи
яицкуртснИ
Данни
UIB
кеш памет
кеша за данни L1, L2 и L3. а. [20] <2.6> Избройте броя пропуски на 1K инструкция на кеш
данни L1, L2 и L3 за всеки размер на набор от данни и модел и скорост на вашия
процесор. Въз основа на резултатите, какво можете да кажете за размерите на кеша за
данни L1, L2 и L3 на вашия процесор? Обяснете вашите наблюдения.
b. [20] <2.6> Избройте инструкциите за такт (IPC) за всеки размер на набора от данни и вашия
модел и скорост на процесора. Въз основа на резултатите, какво можете да кажете за
наказанията за пропуски на L1, L2 и L3 на вашия процесор? Обяснете вашите наблюдения.
Machine Translated by Google
° С. [20] <2.6> Стартирайте програмата във VTune с размер на входния набор от данни
от 8 KB и 128 KB на процесор Intel OOO. Посочете броя на пропуските на L1 кеш
данни и L2 кеш за 1K инструкции и CPI за двете конфигурации. Какво можете да
кажете за ефективността на техниките за скриване на латентността на паметта във
високопроизводителните OOO процесори? Подсказка: Трябва да намерите L1
латентността на кеша за данни за вашия процесор. За последните процесори Intel
i7 това е приблизително 11 цикъла.
Machine Translated by Google
3
Ниво на инструкция
Паралелизъм и неговите
Експлоатация 1
„Кой е първи?“
"Америка."
„Кой е вторият?“
състезанието по ветроходство,
наречено по-късно „Купата на
Америка“ и провеждащо
се на всеки няколко години –
вдъхновението за именуването на
Джон Коке на изследователския
= +
CPI на тръбопровода Идеален CPI на тръбопровода +
Структурни блокировки Опасност от данни + Контролни сергии
Machine Translated by Google
Основно динамично планиране (табло с резултати) Опасността от данни спира от истинските зависимости C.7
антизависимости
Анализ на зависимостта на компилатора, конвейер Идеален CPI, опасност от данни спира З.2, З.3
на софтуера, планиране на трасиране
Хардуерна поддръжка за компилаторни спекулации Идеален CPI, опасност от данни спира, опасност от клон се спира З.4, З.5
Фигура 3.1 Основните техники, разгледани в Приложение C, Глава 3 и Приложение H, са показани заедно с
компонентът на уравнението на CPI, върху който техниката влияе.
Всяка итерация на цикъла може да се припокрива с всяка друга итерация, въпреки че в рамките на
всяка итерация на цикъла има малка или никаква възможност за припокриване.
Ще разгледаме редица техники за преобразуване на такъв паралелизъм на ниво цикъл в
паралелизъм на ниво инструкция. По принцип такива техники работят чрез разгръщане на цикъла
или статично от компилатора (както в следващия раздел), или динамично от хардуера (както в раздели
3.5 и 3.6).
Важен алтернативен метод за използване на паралелизъм на ниво цикъл е използването на
SIMD както във векторни процесори, така и в графични процесори (GPU), като и двата са обхванати в
глава 4. Инструкцията SIMD използва паралелизъм на ниво данни, като работи върху малък до умерен
брой елементи от данни в паралел (обикновено два до осем). Векторната инструкция използва
паралелизма на ниво данни, като работи с много елементи от данни паралелно, като използва както
паралелни изпълнителни единици, така и дълбок конвейер. Например горната кодова
последователност, която в проста форма изисква седем инструкции на итерация (две зареждания,
добавяне, съхраняване, две актуализации на адреси и разклоняване) за общо 7000 инструкции, може
да се изпълни за една четвърт толкова много инструкции в някои SIMD архитектури, където четири
елемента данни се обработват на инструкция. При някои векторни процесори тази последователност
може да отнеме само четири инструкции: две инструкции за зареждане на векторите x и y от паметта,
една инструкция за добавяне на двата вектора и инструкция за съхраняване обратно на резултатния
вектор. Разбира се, тези инструкции ще бъдат конвейерни и ще имат относително дълги закъснения,
Определянето как една инструкция зависи от друга е от решаващо значение за определяне колко
паралелизъм съществува в една програма и как този паралелизъм може да бъде използван. По-
специално, за да използваме паралелизма на ниво инструкция, трябва да определим кои инструкции
могат да се изпълняват паралелно. Ако две инструкции са паралелни, те могат да се изпълняват
едновременно в конвейер с произволна дълбочина, без да причиняват спирания, ако приемем, че
конвейерът разполага с достатъчно ресурси (и следователно не съществуват структурни опасности).
Ако две инструкции са зависими, те не са успоредни и трябва да се изпълняват в ред, въпреки че
често могат да бъдат частично припокриващи се. Ключът и в двата случая е да се определи дали
дадена инструкция зависи от друга инструкция.
Зависимости от данни
Има три различни типа зависимости: зависимости от данни (наричани още истински зависимости от
данни), зависимости от име и зависимости от управление. Инструкция j е данни, зависими от
инструкция i , ако е валидно някое от следните:
Зависимостите на данните в тази кодова последователност включват както данни с плаваща запетая:
и цели данни:
DW)
И в двете горни зависими последователности, както е показано със стрелките, всяка инструкция
зависи от предходната. Стрелките тук и в следващите примери
покажете реда, който трябва да се запази за правилно изпълнение. Стрелката сочи
от инструкция, която трябва да предшества инструкцията, към която сочи стрелката.
Ако две инструкции са зависими от данни, те трябва да се изпълнят в ред и не могат
да се изпълняват едновременно или да се припокриват напълно. Зависимостта предполага
че ще има верига от една или повече опасности за данни между двете
Зависимости от имена
се пренарежда, ако името (регистров номер или място в паметта), използвано в инструкциите, се промени,
наречено преименуване на регистър. Преименуването на регистър може да се извърши или статично чрез a
Опасности за данни
Опасност съществува винаги, когато има зависимост между име или данни
зависимостта, ние трябва да запазим това, което се нарича програмен ред - т.е
както е определено от оригиналната програма с изходен код. Целта както на нашия софтуер, така и на
RAW (четене след запис)—j се опитва да прочете източник, преди i да го запише, така че j неправилно
получава старата стойност. Тази опасност е най-често срещаният вид и съответства на истинска
WAW (запис след запис)—j се опитва да запише операнд, преди да бъде записан от i.
Записите в крайна сметка се извършват в грешен ред, оставяйки стойността, записана от i , вместо
които пишат в повече от един етап на канал или позволяват на инструкция да продължи дори
WAR (запис след четене)—j се опитва да запише дестинация, преди да бъде прочетена от i, така че i
зависимост от името). Опасностите от WAR не могат да възникнат в повечето статични тръбопроводи за проблеми—
още по-дълбоки тръбопроводи или тръбопроводи с плаваща запетая - защото всички четения са ранни
Machine Translated by Google
Контролни зависимости
if p1 {
S1;
};
if p2 {
S2;
}
1. Инструкция, която е контролно зависима от клон, не може да бъде преместена преди това
клона, така че неговото изпълнение вече не се контролира от клона. За
Например, не можем да вземем инструкция от then частта на оператор if и да я преместим
преди оператора if.
В този пример стойността на R1, използвана от инструкцията ИЛИ, зависи от това дали
клонът е взет или не. Само зависимостта от данни не е достатъчна за запазване
коректност. Инструкцията OR е данни, зависими както от DADDU, така и от
DSUBU инструкции, но само запазването на този ред е недостатъчно за правилно
екзекуция.
Вместо това, когато инструкциите се изпълняват, потокът от данни трябва да се запази: Ако
клонът не е взет, тогава стойността на R1, изчислена от DSUBU, трябва да бъде
използвана от OR, и, ако се вземе разклонението, стойността на R1, изчислена от
DADDU трябва да се използва от ИЛИ. При запазване на контролната зависимост на ОР
на клона, предотвратяваме незаконна промяна на потока от данни. По подобни причини,
Machine Translated by Google
засягат или поведението на изключението, или потока от данни. Разгледайте следния код
последователност:
тъй като R4 ще бъде мъртъв (а не жив) в областта на кода след пропускане. По този начин, ако
също форма на спекулация, често наричана софтуерна спекулация, тъй като компилаторът залага на
спекулации.”
което води до спиране на управлението. Контролните сергии могат да бъдат елиминирани или намалени чрез разнообразие
използвайте статичен проблем или статично планиране. Въоръжени с тази технология за компилиране, ние
инструкции.
Machine Translated by Google
Можем да видим, че този цикъл е паралелен, като забележим, че тялото на всяка итерация е такова
независима. Формализираме това понятие в Приложение H и описваме как можем
тествайте дали итерациите на цикъла са независими по време на компилиране. Първо, нека да разгледаме
производителността на този цикъл, показвайки как можем да използваме паралелизма за подобряване
неговата производителност за MIPS тръбопровод с показаните по-горе закъснения.
Първата стъпка е да преведете горния сегмент на MIPS асемблер.
В следващия кодов сегмент R1 първоначално е адресът на елемента в
масив с най-висок адрес, а F2 съдържа скаларната стойност s. Регистър R2 е
предварително изчислен, така че 8(R2) е адресът на последния елемент, върху който да се работи.
Нека започнем, като видим колко добре ще работи този цикъл, когато е планиран на a
прост тръбопровод за MIPS със закъсненията от Фигура 3.2.
Пример Покажете как ще изглежда цикълът на MIPS, както планиран, така и непланиран,
включително всякакви застой или неактивни часовникови цикли. График за закъснения от плаваща запетая
операции, но не забравяйте, че игнорираме забавени разклонения.
Отговор Без никакво планиране, цикълът ще се изпълни както следва, като ще отнеме девет цикъла:
цикъл: LD F0,0(R1) 1
сергия 2
ADD.D F4, F0, F2 3
сергия 4
сергия 5
SD F4,0(R1) 6
DADDUI R1,R1,#-8 7
сергия 8
BNE R1, R2, цикъл 9
Можем да планираме цикъла, за да получим само две сергии и да намалим времето до седем
цикли:
Цикъл: LD F0,0(R1)
DADDUI R1,R1,#-8
ДОБАВЯНЕ F4,F0,F2
сергия
сергия
SD F4,8(R1)
BNE R1, R2, цикъл
Пример. Покажете нашия цикъл разгънат, така че да има четири копия на тялото на цикъла, ако приемем
R1 – R2 (т.е. размерът на масива) първоначално е кратно на 32, което означава
че броят на повторенията на цикъла е кратен на 4. Елиминирайте всички очевидно
излишни изчисления и не използвайте повторно нито един от регистрите.
Отговор Ето резултата след обединяването на инструкциите DADDUI и премахването на ненужните BNE
операции, които се дублират по време на разгръщане. Имайте предвид, че R2 трябва сега
бъде зададен така, че 32(R2) да е началният адрес на последните четири елемента.
цикъл: LD F0,0(R1)
ADD.D F4, F0, F2
SD F4,0(R1) ;пуснете DADDUI & BNE
LD F6,-8(R1)
ADD.D F8, F6, F2
SD F8,-8(R1) ;пуснете DADDUI & BNE
LD F10,-16(R1)
ADD.D F12, F10, F2
SD F12,-16(R1) ;пуснете DADDUI & BNE
LD F14,-24(R1)
ADD.D F16, F14, F2
SD F16,-24(R1)
DADDUI R1,R1,#-32
BNE R1, R2, цикъл
Пример Показване на разгънатия цикъл в предишния пример, след като е планиран за него
тръбопровода със закъсненията от Фигура 3.2.
които могат да бъдат планирани за минимизиране на сергиите; кодът по-горе няма сергии.
Използвайте различни регистри, за да избегнете ненужни ограничения, които биха били наложени
използване на едни и същи регистри за различни изчисления (напр. зависимости на имена).
цикли, нарастването на размера на кода може да бъде проблем, особено ако причинява увеличение
в скоростта на пропуски в кеша на инструкциите.
ефектът, който е резултат от планирането на инструкции в големи кодови сегменти, се нарича налягане
на регистъра. Това възниква, защото програмирането на код за увеличаване на ILP води до увеличаване
на броя на живите стойности. След агресивно планиране на инструкции може да не е възможно да се
разпределят всички живи стойности към регистрите. Трансформираният код, макар и теоретично по-
бърз, може да загуби част или цялото си предимство, защото генерира недостиг на регистри. Без
разгръщане, агресивното планиране е достатъчно ограничено от клонове, така че натискът върху
регистъра рядко е проблем. Комбинацията от разгръщане и агресивно планиране обаче може да
причини този проблем. Проблемът става особено предизвикателен при процесори с множество
издания, които изискват излагане на повече независими последователности от инструкции, чието
изпълнение може да се припокрива. Като цяло, използването на сложни трансформации на високо
ниво, чиито потенциални подобрения са трудни за измерване преди генерирането на подробен код,
доведе до значително увеличаване на сложността на съвременните компилатори.
Схемите за 2-битови предиктори използват само скорошното поведение на един клон, за да предскажат
бъдещото поведение на този клон. Може да е възможно да подобрим точността на предсказването,
ако разгледаме и скорошното поведение на други клонове, а не само клона, който се опитваме да
предвидим. Помислете за малък кодов фрагмент от бенчмарка eqntott, член на ранните пакети за
бенчмаркове на SPEC, които показват особено лошо поведение при прогнозиране на разклонения:
ако (aa==2)
aa=0; ако
(bb==2) bb=0; if
(aa!=bb)
{
Machine Translated by Google
ДАДДИУ R3,R1,#–2
БНЕЗ R3, L1 ;клон b1 ;aa=0 (аа!=2)
ТАТО R1, R0, R0
L1: ДАДДИУ R3,R2,#–2
БНЕЗ R3, L2 ;клон b2 ;bb=0 (bb!=2)
ТАТО R2, R0, R0
L2: ДСУБУ R3, R1, R2 ;R3=aa-bb
BEQZ R3, L3 ;клон b3 (aa==bb)
Нека обозначим тези клонове с b1, b2 и b3. Ключовото наблюдение е, че поведението на клон
b3 е свързано с поведението на клонове b1 и b2. Очевидно, ако
клонове b1 и b2 не се вземат (т.е. ако и двете условия се оценяват като true
и на aa и bb са присвоени 0), тогава b3 ще бъде взето, тъй като aa и bb са
ясно равни. Предсказател, който използва само поведението на един клон за прогнозиране
резултатът от този клон никога не може да улови това поведение.
Предсказателите на клонове, които използват поведението на други клонове, за да
направят прогноза, се наричат корелиращи предиктори или предиктори на две нива.
Съществуващите корелиращи предиктори добавят информация за поведението на най-новите
клонове, за да решите как да предвидите даден клон. Например (1,2) предиктор използва
поведението на последния клон, за да избира измежду двойка 2-битови
предсказатели на клонове при прогнозиране на определен клон. В общия случай ан
(m,n) предикторът използва поведението на последните m клона, за да избира от 2m
предиктори на клонове, всеки от които е n-битов предиктор за един клон. The
привлекателността на този тип корелиращ предсказател на разклонения е, че може да дава по-високи резултати
20 × 2 × 4K = 8K бита
Колко избрани от клонове записи има в (2,2) предиктор, който има общо 8K
битове в буфера за прогнозиране? Ние знаем това
1% 4096 записа: 2
nASA7 0% бита на запис
1%
Неограничени
0%
0% записи: 2 бита на запис
матрица300
0% 1024 записа:
1% (2,2)
tomcatv 0%
1%
5%
додук 5%
5%
9%
подправка 9%
5%
Eе
Cн Pб
S
9%
8ч
евокра9м 9%
fpppp
5%
12%
gcc 11%
11%
5%
еспресо 5%
4%
18%
eqntott 18%
6%
10%
ли 10%
5%
брой битове, използвайки SPEC89 като еталон. Както видяхме по-рано, способността за
прогнозиране на локалния предиктор не се подобрява отвъд определен размер. Корелиращият
предиктор показва значително подобрение, а предикторът на турнира генерира малко по-
добро представяне. За по-нови версии на SPEC, резултатите ще бъдат подобни, но
асимптотичното поведение няма да бъде достигнато до малко по-големи размери на
предиктора.
Локалният предиктор се състои от предиктор на две нива. Най-горното ниво е таблица с
местна история, състояща се от 1024 10-битови записи; всеки 10-битов запис съответства на
последните 10 резултата от разклонения за записа. Тоест, ако разклонението е взето 10 или
повече пъти подред, записът в таблицата с местна история ще бъде само 1. Ако клонът е
последователно взет и невзет, записът в историята се състои от редуващи се 0 и 1. Тази 10-
битова история позволява да се откриват и прогнозират модели от до 10 разклонения.
Избраният запис от таблицата с местна история се използва за
Machine Translated by Google
8%
7%
Локални 2-битови предиктори
6%
5%
4%
оиен
тнн
енадж д
еввц лр
е
нооео
ш сП
р
ал
р н
пк
уг
Корелиращи предиктори
3%
Турнирни прогнози
2%
1%
0%
2241921601289664320 288256 384352320 448416 480 512
Общ размер на предиктора
Фигура 3.4 Степента на неправилно предвиждане за три различни предиктора на SPEC89, тъй като общият брой битове се
увеличава. Предсказателите са локален 2-битов предиктор, корелиращ предиктор, който е оптимално структуриран при
използването на глобална и локална информация във всяка точка от графиката, и турнирен предиктор. Въпреки че тези данни
са за по-стара версия на SPEC, данните за по-нови сравнителни тестове на SPEC ще покажат подобно поведение, може би сходно
към асимптотичната граница при малко по-големи размери на предиктора.
10%
9%
8%
7%
6%
5%
ш
тан
озн
енав аП
р
о
кесецдроегр н
п
4%
3%
2%
1%
0%
Gcc Mcf Milc Lbm
Bzip2 Sjeng
Gobmk Hmmer
Звезда Намд СделкаСоплекс
II Поврей
H264ref Сфинкс 3
Perlbench Omnetpp
Libquantum Xalancbmk
Фигура 3.5 Степента на погрешни прогнози за 19 от бенчмарковете SPECCPU2006 спрямо броя на успешно
оттеглените клонове е малко по-висока средно за целочислените бенчмаркове, отколкото за FP (4% срещу 3%).
По-важното е, че е много по-високо за няколко показателя.
Обикновен статично планиран конвейер извлича инструкция и я издава, освен ако няма
зависимост от данни между инструкция, която вече е в конвейера, и извлечената
инструкция, която не може да бъде скрита с прескачане или препращане. (Логиката за
пренасочване намалява ефективната латентност на конвейера, така че определени
зависимости да не водят до опасности.) Ако има зависимост от данни, която не може да бъде
Machine Translated by Google
зависимостта се изчиства.
В този раздел изследваме динамичното планиране, при което хардуерът пренасочва изпълнението
на инструкциите, за да намали спиранията, като същевременно поддържа потока от данни
и поведение при изключение. Динамичното планиране предлага няколко предимства. Първо, то
позволява на код, който е компилиран с един тръбопровод, да работи ефективно на a
различен тръбопровод, елиминирайки необходимостта от множество двоични файлове и повторно компилиране
В класическия петстепенен тръбопровод могат да съществуват както структурни, така и информационни опасности
проверено по време на декодиране на инструкции (ID): Когато дадена инструкция може да се изпълни
без опасности, тя е издадена от ID, като се знае, че всички опасности за данни са били
разрешено.
Завършването извън ред също създава големи усложнения при обработката на изключения.
Динамичното планиране със завършване извън реда трябва да запази изключение
поведение в смисъл, че точно онези изключения, които биха възникнали, ако програмата се изпълни
в строг програмен ред, действително възникват. Динамично
планираните процесори запазват поведението на изключение, като забавят известяването на
свързано изключение, докато процесорът разбере, че инструкцията трябва да бъде
следващият завършен.
Въпреки че поведението при изключение трябва да се запази, динамично планираните
процесори могат да генерират неточни изключения. Изключение е неточно , ако
състоянието на процесора, когато е повдигнато изключение, не изглежда точно така, сякаш
инструкциите са били изпълнени последователно в строг програмен ред. Непрецизни изключения
може да възникне поради две възможности:
предоставя точни изключения в контекста на процесор със спекулации в раздел 3.6. За изключения с плаваща
За да позволим изпълнение извън реда, ние по същество разделяме етапа на ID тръба на нашия
2. Четене на операнди—Изчакайте , докато няма опасност от данни, след което прочетете операндите.
етап, точно както в петстепенния тръбопровод. Изпълнението може да отнеме няколко цикъла,
в зависимост от операцията.
функционални единици или и двете. Тъй като тези две възможности—тръбопроводни функционални единици
етап в ред (in-order issue); те обаче могат да бъдат блокирани или да се заобикалят взаимно
във втория етап (четене на операнди) и по този начин влиза в изпълнение извън ред. Score-boarding е
6600 табло, което разработи тази възможност. Тук се фокусираме върху още
ефективно динамично преименуване на регистрите. Освен това, алгоритъмът на Tomasulo може да бъде
Устройството с плаваща запетая на IBM 360/91 използва усъвършенствана схема, за да позволи изпълнение
извън реда. Тази схема, изобретена от Робърт Томасуло, проследява кога са налични оператори и инструкции
за минимизиране на опасностите от RAW и въвежда
Тези три зависимости на имена могат да бъдат елиминирани чрез преименуване на регистъра.
всякакви употреби на F8, които са по-късно в кода, изисква или сложен компилатор
анализ или хардуерна поддръжка, тъй като може да има междинни клонове между тях
горния кодов сегмент и по-късно използване на F8. Както ще видим, алгоритъмът на Tomasulo може да се
на регистъра.
Тъй като може да има повече резервационни станции, отколкото реални регистри, техниката
може дори да елиминира опасностите, произтичащи от зависимостите на имената, които не биха могли да бъдат
ще се върнем към темата за преименуването на регистъра и ще видим как точно става преименуването
възниква и как елиминира опасностите от WAR и WAW.
Използването на резервационни станции, а не централизиран регистрационен файл, води до
единица определя кога дадена инструкция може да започне изпълнение в тази единица. Второ,
с обща шина за резултати, която позволява на всички единици, чакащи операнд, да бъдат
заредени едновременно (при 360/91 това се нарича обща шина за данни или
Фигура 3.6 показва основната структура на процесор, базиран на Tomasulo, включващ модула с
От единица за обучение
Инструкция
FP регистри
опашка
Операции за
зареждане/съхраняване
Операции с Операнд
Адресна единица плаваща запетая автобуси
Буфери за съхранение
Заредете буфери
Операция автобус
3 2
2 Резервационни 1
1 станции
Данни Адрес
Фигура 3.6 Основната структура на MIPS единица с плаваща запетая, използваща алгоритъма на Tomasulo. Инструкциите се изпращат
от модула за инструкции в опашката с инструкции, от която се издават в ред първи влязъл, първи излязъл (FIFO). Станциите за
резервиране включват операцията и действителните операнди, както и информация, използвана за откриване и разрешаване на
опасности. Буферите за зареждане имат три функции: (1) задържат компонентите на ефективния адрес, докато не бъде изчислен, (2)
проследяват неизпълнени зареждания, които чакат в паметта, и (3) задържат резултатите от завършени зареждания, които чакат за
CDB. По подобен начин буферите за съхранение имат три функции: (1) съхраняват компонентите на ефективния адрес, докато не
бъде изчислен, (2) съхраняват адресите на паметта на дестинацията на неизпълнени магазини, които чакат стойността на данните
за съхранение, и (3) съхраняват адрес и стойност за съхраняване, докато модулът за памет стане наличен. Всички резултати или от
FP единиците, или от единицата за зареждане се поставят в CDB, която отива във файла на FP регистъра, както и до резервационните
станции и буферите за съхранение. FP суматорите изпълняват събиране и изваждане, а FP умножителите извършват умножение и деление.
Тази стъпка преименува регистрите, елиминирайки опасностите от WAR и WAW. (Този етап
стане наличен, той се поставя във всяка резервационна станция, която го очаква. Кога
процесорите наричат тази стъпка „проблем“, но ние използваме името „изпълни“, което беше
изборът може да бъде направен произволно; товарите и складовете обаче представляват допълнително
усложнение.
след това адресът се поставя в буфера за зареждане или съхраняване. Зарежданията в буфера за
зареждане се изпълняват веднага щом паметта е налична. Магазини в буфера на магазина чакат
стойността, която трябва да бъде съхранена, преди да бъде изпратена към паметта. Зарежда и съхранява
използвайки предвиждане на разклонения (както правят всички динамично планирани процесори), това
преди да позволи на инструкция след разклонението да започне изпълнение. Ако процесорът запише
регистри, други подходи биха могли да използват набор от регистри с допълнителни регистри или a
структура като буфера за пренареждане, който ще видим в раздел 3.6.
В схемата на Tomasulo, както и следващите методи, които търсим
в подкрепа на спекулациите, резултатите се излъчват в автобус (CDB), който е
наблюдавани от резервационните станции. Комбинацията от общия резултат
автобус и извличането на резултати от автобуса от станциите за резервации прилага механизмите
за препращане и заобикаляне, използвани в статично планиран
тръбопровод. При това обаче динамично планирана схема въвежда такъв
цикъл на латентност между източник и резултат, тъй като съвпадението на резултат и
използването му не може да се извърши до етапа на запис на резултата. По този начин, в динамично
планиран тръбопровод, ефективната латентност между генерираща инструкция и a
консумиращата инструкция е поне един цикъл по-дълъг от латентността на функционалната
единица, произвеждаща резултата.
Важно е да запомните, че етикетите в схемата Tomasulo се отнасят до
буфер или единица, която ще произведе резултат; имената на регистъра се отхвърлят, когато an
издаване на инструкции за резервационна станция. (Това е ключова разлика между
Схема на Томасуло и табло: При таблото операндите остават в
регистри и се четат само след като инструкцията за производство завърши и инструкцията за
потребление е готова за изпълнение.)
Machine Translated by Google
единица са заети.
резултатът трябва да се съхранява в този регистър. Ако стойността на Qi е празна (или 0), не
текущо активната инструкция изчислява резултат, предназначен за този регистър,
което означава, че стойността е просто съдържанието на регистъра.
1. LD F6,32(R2)
2. LD F2,44(R3)
3. MUL.D F0, F2, F4
4. SUB.D F8, F2, F6
5. DIV.D F10, F0, F6
6. ADD.D F6, F8, F2
Отговор Фигура 3.7 показва резултата в три таблици. Числата, добавени към имената
Add, Mult и Load означават етикета за тази резервационна станция - Add1 е
етикет за резултата от първата добавена единица. Освен това сме включили
Machine Translated by Google
Състояние на инструкцията
LD F6,32(R2)
LD F2,44(R3)
MUL.D F0,F2,F4
SUB.D F8,F2,F6
DIV.D F10,F0,F6
ДОБАВЯНЕ F6,F8,F2
Резервационни станции
Име Зает оп Vj Вк Qj Qk А
Натоварване1 Не
Добавяне3 Не
Статус на регистрация
Фигура 3.7 Станции за резервация и регистрационни етикети, показани, когато всички инструкции са издадени, но само
първата инструкция за зареждане е завършила и е записала резултата си в CDB. Второто зареждане е ефективно
изчисление на адрес, но чака на паметта. Ние използваме масива Regs[], за да препращаме към регистрационния файл и
масив Mem[ ] за препратка към паметта. Не забравяйте, че операндът се определя или от Q поле, или от V поле по всяко време
време. Забележете, че инструкцията ADD.D, която има опасност от WAR на етап WB, е издадена и може да завърши
преди DIV.D да започне.
Пример Използвайки същия кодов сегмент като в предишния пример (страница 176), покажете как изглеждат
таблиците за състояние, когато MUL.D е готов да запише своя резултат.
Отговор Резултатът е показан в трите таблици на Фигура 3.8. Забележете, че ADD.D е завършен, тъй като
операндите на DIV.D са копирани, като по този начин се преодолява опасността от WAR.
Забележете, че дори ако зареждането на F6 е било забавено, добавянето към F6 може да бъде
изпълнено, без да задейства опасност от WAW.
Фигура 3.9 определя проверките и стъпките, през които трябва да премине всяка инструкция.
Както бе споменато по-рано, зарежданията и запаметяванията преминават през функционална
единица за ефективно изчисляване на адреса, преди да се пристъпи към независимо зареждане
или съхраняване на буфери. Зарежданията предприемат втора стъпка на изпълнение за достъп
до паметта и след това преминават към запис на резултата, за да изпратят стойността от паметта
към регистрационния файл и/или всички чакащи резервационни станции. Магазините завършват
своето изпълнение в етапа на запис на резултата, който записва резултата в паметта. Забележете,
че всички записи се случват в резултат от запис, независимо дали дестинацията е регистър или
памет. Това ограничение опростява алгоритъма на Tomasulo и е критично за разширяването му
със спекулации в раздел 3.6.
Machine Translated by Google
Състояние на инструкцията
LD F6,32(R2)
LD F2,44(R3)
MUL.D F0,F2,F4
SUB.D F8,F2,F6
DIV.D F10,F0,F6
ДОБАВЯНЕ F6,F8,F2
Резервационни станции
Име Busy Op Vj Вк Qj Qk A
Зареждане1 №
Зареждане 2 №
Add1 No
Add2 No
Add3 No
Статус на регистрация
Qi Множество1 Мулт2
цикъл: LD F0,0(R1)
MUL.D F4, F0, F2
SD F4,0(R1)
DADDIU R1,R1,-8
BNE R1, R2, цикъл; разклонения, ако R1¦R2
Само натоварване
Зареждане/съхранение
RS[r].Qj = 0 & r е главата на опашката за RS[r].A RS[r].Vj + RS[r].A;
етап 1 зареждане-запаметяване
Фигура 3.9 Стъпки в алгоритъма и какво се изисква за всяка стъпка. За инструкцията за издаване rd е местоназначението, rs и rt са номерата на
регистъра източник, imm е разширеното със знак непосредствено поле и r е резервацията
станция или буфер, към който е присвоена инструкцията. RS е структурата на данните за резервационната станция. Стойността, върната от
FP единица или от товарната единица се нарича резултат. RegisterStat е структурата на данните за състоянието на регистъра (не регистърния файл,
което е Regs []). Когато е издадена инструкция, полето Qi на регистъра на местоназначението е зададено на номера на буфера или резервационната
станция, към която е издадена инструкцията. Ако операндите са налични в регистрите, те са
съхранявани в полетата V. В противен случай полетата Q са настроени да посочват резервационната станция, която ще генерира стойностите
необходими като изходни операнди. Инструкцията чака в резервационната станция, докато и двата й операнда са налични,
обозначени с нула в полетата Q. Полетата Q са зададени на нула или когато тази инструкция е издадена, или когато инструкция, от която зависи
тази инструкция, завърши и извърши обратния запис. Когато дадена инструкция приключи изпълнението и CDB е достъпна, тя може да извърши
обратно запис. Всички буфери, регистри и резервационни станции, чиито стойности
на Qj или Qk са същите като завършващата резервационна станция, актуализира своите стойности от CDB и маркира Q
полета, за да укажете, че са получени стойности. По този начин CDB може да излъчи резултата си до много дестинации в един тактов цикъл и ако
чакащите инструкции имат своите операнди, всички те могат да започнат изпълнение на следващия часовник
цикъл. Зарежданията преминават през две стъпки при изпълнение, а съхраняванията се представят малко по-различно по време на запис на резултата, където те
може да се наложи да изчака стойността да се съхрани. Не забравяйте, че за да запазите поведението на изключения, инструкциите не трябва да бъдат
разрешено за изпълнение, ако разклонение, което е по-рано в програмния ред, все още не е завършено. Тъй като каквато и да е концепция за
програмен ред не се поддържа след етапа на издаване, това ограничение обикновено се прилага чрез предотвратяване на напускане на каквато и
да е инструкция от етапа на издаване, ако вече има чакащо разклонение в конвейера. В раздел 3.6 ще видим как
поддръжката на спекулации премахва това ограничение.
Machine Translated by Google
завършило. Фигура 3.10 показва станции за резервация, таблици за състоянието на регистъра и натоварване и
предполага се, че клонът е предвиден като взет.) След като системата достигне това състояние,
две копия на цикъла могат да бъдат поддържани с CPI близо до 1.0, при условие че
умноженията могат да завършат за четири тактови цикъла. При латентност от шест цикъла ще трябва да
Това изисква повече станции за резервация, които да държат инструкции, които са в процес на изпълнение.
Състояние на инструкцията
LD F0,0(R1) 1
MUL.D F4,F0,F2 1
SD F4,0(R1) 1
LD F0,0(R1) 2
MUL.D F4,F0,F2 2
SD F4,0(R1) 2
Резервационни станции
Име Зает оп Vj Вк Qj Qk А
Добавяне2 Не
Добавяне3 Не
Статус на регистрация
Qi Натоварване2 Мулт2
Фигура 3.10 Две активни итерации на цикъла без все още завършена инструкция. Записите в станциите за резервиране на
множителя показват, че неплатените товари са източниците. Станциите за резервация на магазина показват, че
multiply дестинацията е източникът на стойността за съхраняване.
Machine Translated by Google
Товарът и магазинът могат безопасно да бъдат направени извън ред, при условие че имат достъп до различни
различни адреси. Ако товар и магазин имат достъп до един и същи адрес, тогава и двете
По същия начин размяната на два магазина на един и същи адрес води до опасност от WAW.
Следователно, за да се определи дали даден товар може да бъде изпълнен в даден момент, процесорът
може да провери дали някой незавършен магазин, който предхожда зареждането в програмния ред
споделя същия адрес на паметта за данни като товара. По същия начин магазинът трябва да чака
докато няма неизпълнени зареждания или съхранява, които са по-ранни в реда на програмата и
споделят един и същ адрес на паметта за данни. Ние разглеждаме метод за премахване на това
ограничение в раздел 3.9.
изчисления на ефективни адреси в програмен ред. (Ние наистина трябва само да запазим
относителен ред между магазини и други препратки към паметта; тоест натоварванията могат да бъдат
пренарежда се свободно.)
Нека първо разгледаме ситуацията с товар. Ако извършим изчисляване на ефективен адрес в програмен ред,
тогава, когато товарът е завършил изчисляването на ефективен адрес, можем да проверим дали има конфликт на
от всички активни буфери на магазина. Ако адресът за зареждане съвпада с адреса на всеки активен
записи в буфера за съхранение, тази инструкция за зареждане не се изпраща до буфера за зареждане, докато
Магазините работят по подобен начин, с изключение на това, че процесорът трябва да проверява за конфликти
както буферите за зареждане, така и буферите за съхранение, тъй като конфликтните магазини не могат да бъдат
Динамично планираният тръбопровод може да доведе до много висока производителност, при условие
трябва да съдържа асоциативен буфер, който трябва да работи с висока скорост, както и сложна контролна логика.
Въпреки че могат да се добавят допълнителни CDB, всеки CDB трябва да взаимодейства с всяка станция за
които възникват, когато операндът е наличен в регистрите. Както ще видим по-късно, така е
Machine Translated by Google
3. Може да постигне висока производителност, без да изисква компилаторът да насочва кода към
специфична тръбопроводна структура, което е ценно свойство в ерата на масовия пазарен
софтуер.
Хардуерно базираната спекулация съчетава три ключови идеи: (1) динамично предсказване
на разклоненията, за да се избере кои инструкции да се изпълнят, (2) спекулация, позволяваща
изпълнението на инструкции, преди контролните зависимости да бъдат разрешени (с възможност
за отмяна на ефектите от неправилно спекулирана последователност) и (3) динамично планиране
за справяне с планирането на различни комбинации от
Machine Translated by Google
основни блокове. (За сравнение, динамичното планиране без спекулации само частично припокрива
по същество изпълнение на поток от данни: Операциите се изпълняват веднага щом техните операнди
са налични.
Използването на прескочена стойност е като извършване на спекулативно четене на регистър, тъй като
неотменимо действие (като актуализиране на състояние или предприемане на изключение), докато дадена
операнди в алгоритъма на Tomasulo. Ключовата разлика е, че в алгоритъма на Tomasulo, след като дадена
Всеки запис в ROB съдържа четири полета: тип инструкция, поле за дестинация, поле за стойност и
има местоназначение на адреса на паметта) или регистърна операция (ALU операция или
зареждане, която има местоназначения на регистър). Полето дестинация предоставя
номера на регистъра (за зареждания и ALU операции) или адреса на паметта (за магазини),
където трябва да бъде записан резултатът от инструкцията. Полето за стойност се използва
за задържане на стойността на резултата от инструкцията, докато инструкцията се ангажира.
Скоро ще видим пример за ROB записи. И накрая, полето за готовност показва, че
инструкцията е завършила изпълнението и стойността е готова.
Фигура 3.11 показва хардуерната структура на процесора, включително ROB. ROB
включва буферите за съхранение. Магазините все още се изпълняват на две стъпки, но
втората стъпка се извършва чрез ангажимент на инструкция. Въпреки че преименуването
Пренареждане на буфер
От единица за обучение
Рег. № Данни
Инструкция
опашка
FP регистри
Операции за
зареждане/съхраняване
Операнд
Адресна единица Операции с автобуси
плаваща запетая
Заредете буфери
Операция автобус
Адрес 3 2
на магазина 2 Резервация 1
1 станции
Заредете
Обща шина за данни (CDB)
данни
Фигура 3.11 Основната структура на FP единица, използваща алгоритъма на Tomasulo и разширена за справяне със спекулации.
Сравнявайки това с Фигура 3.6 на страница 173, която имплементира алгоритъма на Tomasulo, основната промяна е добавянето
на ROB и елиминирането на буфера за съхранение, чиято функция е интегрирана в ROB. Този механизъм може да бъде
разширен до множество издания, като направи CDB по-широк, за да позволи множество завършвания на такт.
Machine Translated by Google
функцията на резервационните станции е заменена от ROB, все още имаме нужда от място
за буфериране на операции (и операнди) между времето, когато издават, и времето, в което те
започнете изпълнението. Тази функция все още се предоставя от резервационните станции. От
всяка инструкция има позиция в ROB, докато не се ангажира, ние маркираме резултат с помощта на
входния номер на ROB, вместо да използвате номера на резервационната станция. Това
маркирането изисква ROB, зададен за дадена инструкция, да бъде проследен в
резервационна станция. По-късно в този раздел ще проучим алтернативна реализация, която
използва допълнителни регистри за преименуване и опашка, която замества
ROB, за да реши кога инструкциите могат да се ангажират.
След като дадена инструкция се ангажира, нейният запис в ROB се възстановява и регистърът
или местоназначението на паметта се актуализират, елиминирайки необходимостта от ROB запис. Ако
ROB попълва, ние просто спираме да издаваме инструкции, докато входът не стане безплатен.
Сега нека разгледаме как ще работи тази схема със същия пример, който използвахме
за алгоритъма на Томасуло.
Пример Да приемем същите закъснения за функционалните единици с плаваща запетая, както в по-ранните
примери: събиране е 2 тактови цикъла, умножение е 6 тактови цикъла и деление е 12 тактови цикъла.
Използвайки кодовия сегмент по-долу, същият, който използвахме за генериране на Фигура 3.8, показва
как изглеждат таблиците за състоянието, когато MUL.D е готов да премине към ангажимент.
LD F6,32(R2)
LD F2,44(R3)
MUL.D F0, F2, F4
SUB.D F8, F2, F6
DIV.D F10, F0, F6
ADD.D F6, F8, F2
Отговор Фигура 3.12 показва резултата в трите таблици. Забележете, че въпреки че SUB.D
инструкцията е завършила изпълнението, тя не се ангажира, докато MUL.D не се ангажира.
Станциите за резервация и полето за статус на регистъра съдържат същата основна информация,
която направиха за алгоритъма на Tomasulo (вижте страница 176 за описание на
тези полета). Разликата е, че номерата на станциите за резервации се сменят
с ROB входни номера в полетата Qj и Qk, както и в статуса на регистъра
полета и добавихме полето Dest към резервационните станции. Полето Dest
обозначава ROB записа, който е дестинацията за резултата, получен от това
влизане в резервационна станция.
Горният пример илюстрира ключовата важна разлика между процесор със спекулация и
процесор с динамично планиране. Сравнете съдържанието на Фигура 3.12 с това на Фигура 3.8 на
страница 179, което показва същото
кодова последователност при работа на процесор с алгоритъма на Tomasulo. Ключът
разликата е, че в примера по-горе не е позволено да завърши нито една инструкция след най-
ранната незавършена инструкция (MUL.D по-горе). За разлика от това, на фигура 3.8
инструкциите SUB.D и ADD.D също са завършени.
Едно следствие от тази разлика е, че процесорът с ROB може
динамично изпълнение на код, като същевременно поддържа прецизен модел на прекъсване. За
например, ако инструкцията MUL.D предизвика прекъсване, можем просто да изчакаме, докато
той достигна до главата на ROB и взе прекъсването, изчиствайки всички останали чакащи
инструкции от ROB. Тъй като ангажиментът на инструкция се случва по ред, това
дава точно изключение.
За разлика от това, в примера, използващ алгоритъма на Tomasulo, SUB.D и
Инструкциите ADD.D можеха и двете да бъдат изпълнени, преди MUL.D да повдигне изключението.
Machine Translated by Google
Пренареждане на буфер
Резервационни станции
Зареждане1 №
Зареждане 2 №
Добавяне1 Не
Добавяне2 Не
Добавяне3 Не
Множество 1 № МУЛ.Д Mem[44 + Regs[R3]] Regs[F4] #3
Мулт2 да DIV.D Mem[32 + Regs[R2]] #3 #5
Състояние на FP регистър
Поле F0 F1 F2 F3 F4 F5 F6 F7 F8 F10
Пренареждане # 3 6 4 5
Зает да Не Не Не Не Не да ... да да
Фигура 3.12 По времето, когато MUL.D е готов за ангажиране, само двете LD инструкции са ангажирани, въпреки че
няколко други са завършили изпълнението. MUL.D е начело на ROB, а двете LD инструкции са
там само за улесняване на разбирането. Инструкциите SUB.D и ADD.D няма да се ангажират до инструкцията MUL.D
ангажира, въпреки че резултатите от инструкциите са налични и могат да се използват като източници за други инструкции.
DIV.D е в изпълнение, но не е завършен единствено поради по-голямото си забавяне от MUL.D. Колоната Стойност
показва държаната стойност; форматът #X се използва за препратка към поле със стойност на ROB запис X. Пренареждане на буфери 1 и
2 са действително завършени, но са показани с информационна цел. Не показваме записите за товар/склад
опашка, но тези записи се поддържат в ред.
цикъл: LD F0,0(R1)
MUL.D F4, F0, F2
SD F4,0(R1)
DADDIU R1,R1,#-8
BNE R1, R2, цикъл ; разклонения, ако R1¦R2
Да приемем, че сме издали всички инструкции в цикъла два пъти. Нека също
приемем, че LD и MUL.D от първата итерация са ангажирани и всичко
други инструкции са изпълнени. Обикновено магазинът чакаше
ROB както за ефективния адресен операнд (R1 в този пример), така и за стойността
(F4 в този пример). Тъй като разглеждаме само тръбопровода с плаваща запетая,
приемете, че ефективният адрес за магазина е изчислен към момента на изпълнение на инструкцията
е издадена.
Пренареждане на буфер
Състояние на FP регистър
Поле F0 F1 F2 F3 F4 F5 F6 F7 F8
Пренареждане # 6 7
Зает да Не Не Не да Не Не ... Н
о
Фигура 3.13 Само инструкциите LD и MUL.D са ангажирани, въпреки че всички останали са завършили
екзекуция. Следователно нито една станция за резервации не е заета и нито една не се показва. Останалите инструкции ще бъдат ангажирани
възможно най-бързо. Първите два буфера за пренареждане са празни, но са показани за пълнота.
Machine Translated by Google
Тъй като нито стойностите на регистъра, нито стойностите на паметта всъщност се записват,
докато дадена инструкция не се ангажира, процесорът може лесно да отмени своите спекулативни
действия, когато се установи, че разклонението е неправилно предвидено. Да предположим, че
клонът BNE не е взет за първи път на Фигура 3.13. Инструкциите преди разклонението просто ще
се ангажират, когато достигнат главата на ROB; когато клонът достигне главата на този буфер,
буферът просто се изчиства и процесорът започва да извлича инструкции от другия път.
Фигура 3.14 Стъпки в алгоритъма и какво се изисква за всяка стъпка. За инструкцията за издаване, rd е дестинацията, rs и rt са
източниците, r е резервираната станция, b е присвоеният ROB запис и h е главният запис
на РОБ. RS е структурата на данните на резервационната станция. Стойността, върната от резервационна станция, се нарича резултат.
RegisterStat е структурата на регистърните данни, Regs представлява действителните регистри, а ROB е данните за буфера за пренареждане
структура.
Machine Translated by Google
влизане и търсене в ROB при всяко завършване на инструкция за търсене на зависими магазини.
1. Не позволява на натоварване да инициира втората стъпка от изпълнението си, ако има такова
Записът в ROB, зает от магазин, има поле Дестинация, което съответства на стойността
на полето А на товара.
Заедно тези две ограничения гарантират, че всяко зареждане, което има достъп до място в паметта,
записано от по-ранен магазин, не може да извърши достъп до паметта, докато
магазинът е написал данните. Някои спекулативни процесори всъщност ще заобиколят
стойност от магазина към зареждането директно, когато възникне такава опасност от RAW.
Друг подход е да се предвидят потенциални сблъсъци, като се използва форма на прогнозиране на
стойността; разглеждаме това в раздел 3.9.
3.7 Използване на ILP чрез използване на множество проблеми и статично планиране 193
процесори.
Machine Translated by Google
Суперскаларен Динамичен Хардуерна динамика със спекулации Извънредно изпълнение със Intel Core i3, i5, i7;
(спекулативен) спекулация AMD Phenom; IBM
Мощност 7
Фигура 3.15 Петте основни подхода, използвани за многобройни процесори и основните характеристики
които ги отличават. Тази глава се фокусира върху хардуерно интензивните техники, които са някаква форма на
суперскаларен. Приложение H се фокусира върху подходи, базирани на компилатор. Подходът EPIC, въплътен в архитектурата IA-64, разширява много
от концепциите на ранните VLIW подходи, осигурявайки смес от статично и динамично
подходи.
Нека разгледаме VLIW процесор с инструкции, които съдържат пет операции, включително
една целочислена операция (която също може да бъде разклонение), две
операции с плаваща запетая и две препратки към паметта. Инструкцията би
имат набор от полета за всяка функционална единица - може би 16 до 24 бита на единица, което
води до дължина на инструкцията между 80 и 120 бита. За сравнение, Intel
Itanium 1 и 2 съдържат шест операции на пакет инструкции (т.е. те позволяват
едновременно издаване на два пакета с три инструкции, както е описано в Приложение H).
За да поддържате функционалните звена заети, трябва да има достатъчно паралелизъм в кода
последователност за запълване на наличните работни слотове. Този паралелизъм се разкрива от
развиване на цикли и планиране на кода в едно по-голямо тяло на цикъл. Ако
разгръщането генерира праволинеен код, след това техники за локално планиране , които
работят върху един основен блок, могат да се използват. Ако намирането и използването на
паралелизма изисква код за планиране между клонове, значително по-сложен глобален
трябва да се използва алгоритъм за планиране . Глобалните алгоритми за планиране не са само
по-сложни по структура, но те също трябва да се справят със значително по-сложни компромиси
при оптимизацията, тъй като преместването на код между клоновете е скъпо.
В Приложение H ще обсъдим планирането на проследяване, една от тези техники за глобално
планиране, разработена специално за VLIW; ние също ще проучим специални
хардуерна поддръжка, която позволява някои условни разклонения да бъдат елиминирани,
разширяване на полезността на локалното планиране и подобряване на производителността на
глобално планиране.
Machine Translated by Google
3.7 Използване на ILP чрез използване на множество проблеми и статично планиране 195
Пример Да предположим, че имаме VLIW, който може да издаде две препратки към паметта, две FP операции и една
разгъната версия на цикъла x[i] = x[i] + s (вижте страница 158 за MIPS кода)
за такъв процесор. Развийте толкова пъти, колкото е необходимо, за да премахнете всички сергии.
Отговор Фигура 3.16 показва кода. Примката е развита, за да се направят седем копия
тялото, което елиминира всички сергии (т.е. напълно празни цикли на издаване), и
протича в 9 цикъла. Този код дава скорост на движение от седем резултата в 9 цикъла, или
1,29 цикъла на резултат, почти два пъти по-бързо от двупроблемния суперскалар на Section
3.2 , който използва разгънат и планиран код.
За оригиналния модел VLIW имаше както технически, така и логистични проблеми, които правят
развиване на цикли (както в по-ранните примери), като по този начин увеличава размера на кода. Второ,
когато инструкциите не са пълни, неизползваните функционални единици се превеждат като пропилени
LD F0,0(R1) LD F6,-8(R1)
LD F10,-16(R1) LD F14,-24(R1)
SD F20,24(R1) SD F24,16(R1)
Фигура 3.16 VLIW инструкции, които заемат вътрешния цикъл и заместват разгънатата последователност. Този код отнема 9
цикли, при които се приема, че няма забавяне на разклонението; обикновено забавянето на клона също трябва да бъде планирано. Процентът
на издаване е 23 операции в 9 тактови цикъла или 2,5 операции на цикъл. Ефективността, процентът на наличните слотове, които съдържат
операция, е около 60%. За да се постигне този процент на издаване, са необходими по-голям брой регистри, отколкото MIPS би използвал обикновено
този цикъл. VLIW кодовата последователност по-горе изисква поне осем FP регистъра, докато същата кодова последователност е за основата
MIPS процесорът може да използва най-малко два FP регистъра или до пет, когато е разгънат и планиран.
Machine Translated by Google
подходи, като софтуерен конвейер, които могат да постигнат предимствата на разгръщането без толкова
например, може да има само едно голямо непосредствено поле за използване от всяка функционалност
всичко. Тази структура диктува, че трябва да причини спиране във всеки тръбопровод на функционална единица
целият процесор да спре, тъй като всички функционални единици трябва да се поддържат синхронизирани.
единици за предотвратяване на спирания, предвиждайки при кои достъпи до данни ще се натъкне на спиране на кеша
да доведе до спиране на всички функционални единици. Като процент на издаване и брой памет
компилаторът се използва за избягване на опасности по време на проблем, докато хардуерните проверки позволяват
съвместимост.
процесор (описан в следващата глава). Не е ясно дали многоемисионният процесор е предпочитан пред
подобни и векторният процесор обикновено е със същата скорост или по-бърз. Потенциалните предимства
лесно кеширане на всички форми на данни. Поради тези причини подходите за множество проблеми имат
3.8 Използване на ILP чрез динамично планиране, множество проблеми и спекулации 197
което води до микроархитектура, доста подобна на тази в съвременните микропроцесори. За простота, ние
инструкции на часовник.
единици (както FP умножение, така и FP добавяне), всяка от които може да инициира операция върху
ред, тъй като това може да доведе до нарушаване на семантиката на програмата. За да спечелите
действително присвоява операции на целите числа и единиците с плаваща запетая. Тъй като
взаимодействието на целите числа и инструкциите с плаваща запетая е от решаващо значение, ние също разширяваме
с едно издаване на часовник, с изключение на това, че логиката за издаване и завършване трябва да бъде
(със или без спекулации) е много сложно поради простата причина, че множеството инструкции могат да
Един подход е да изпълните тази стъпка на половин часовников цикъл, така че две инструкции да могат
да се обработват в един такт; този подход не може лесно да бъде разширен, за да обработва четири инструкции
на такт, за съжаление.
проблемите с инструкциите отнемат няколко часовника, тъй като нови инструкции се издават на всеки такт,
Пренареждане на буфер
От единица за обучение
Рег. № Данни
Инструкция
опашка
Целочислени и FP регистри
Операции за
зареждане/съхраняване
Операнд
Адресна единица Операции с автобуси
плаваща запетая
Заредете буфери
Операция автобус
Адрес 3 2 2
на магазина 2 Резервация 1 1
1 станции
Заредете
Обща шина за данни (CDB)
данни
Фигура 3.17 Основната организация на процесор с множество проблеми със спекулации. В този случай организацията може да позволи FP
умножение, FP добавяне, цяло число и зареждане/съхраняване за всички проблеми едновременно (приемайки, че един проблем на часовник на
функционална единица). Обърнете внимание, че няколко пътеки на данни трябва да бъдат разширени, за да поддържат множество проблеми:
CDB, операндните шини и, което е критично, логиката на издаване на инструкции, която не е показана на тази фигура. Последното е труден
проблем, както обсъждаме в текста.
3.8 Използване на ILP чрез динамично планиране, множество проблеми и спекулации 199
RS[r2].Qj b1;} /* изчакайте инструкция за зареждане */ Тъй като знаем, че първият операнд на FP операцията
е от натоварването, тази стъпка просто
актуализира резервационната станция, за да сочи
към товара. Забележете, че зависимостта
трябва да се анализира в движение и ROB записите
трябва да бъдат разпределени по време на тази
стъпка на проблем, така че таблиците за
Тъй като
резервации да могат да бъдат правилно актуализирани. if (RegisterStat[rt2].Busy) /*in-flight предположихме,
instr записва rt*/ че вторият операнд на
{h RegisterStat[rt2].Reorder; if (ROB[h].Ready)/ FP инструкцията е от пакет от предишни издания,
* Instr вече е завършен */ тази стъпка изглежда така, както би изглеждала в
{RS[r2].Vk ROB[h].Стойност; RS[r2].Qk 0;} случая с единичен проблем. Разбира се,
else {RS[r2].Qk h;} /* изчакайте инструкция */ ако тази инструкция зависи от нещо в същия
} else {RS[r2].Vk Regs[rt2]; RS[r2].Qk 0;}; RegisterStat[rd2].Reorder пакет от проблеми, таблиците ще трябва да се
b2; RegisterStat[rd2].Busy да; актуализират с помощта на присвоения резервен буфер.
ROB[b2].Dest rd2;
RS[r2].Зает да; RS[r2].Dest b2; ROB[b2].Инструкция Този раздел просто актуализира таблиците за FP
FP операция; ROB[b2].Dest rd2; операцията и е независим от натоварването.
ROB[b2].Готов не; Разбира се, ако по-нататъшните инструкции в
този пакет с проблеми зависят от FP операцията
(както може да се случи със суперскалар с
четири издания), актуализациите на таблиците
за резервации за тези инструкции ще бъдат повлияни от тази инс
Фигура 3.18 Проблемните стъпки за двойка зависими инструкции (наречени 1 и 2), където инструкция 1 е FP зареждане
и инструкция 2 е FP операция, чийто първи операнд е резултатът от инструкцията за зареждане; r1 и r2 са
определени резервационни станции за инструкциите; и b1 и b2 са присвоените записи в буфера за пренареждане. За
издаване на инструкции, rd1 и rd2 са дестинациите; rs1, rs2 и rt2 са източниците (зареждането има само един
източник); r1 и r2 са резервираните станции; и b1 и b2 са присвоените ROB записи. RS е структурата на данните за станцията за
резервации. RegisterStat е структурата на данните на регистъра, Regs представлява действителните регистри,
и ROB е структурата на данните на буфера за пренареждане. Забележете, че за това трябва да сме присвоили записи в буфера за пренареждане
логика за правилно функциониране и припомнете си, че всички тези актуализации се случват в един часовник паралелно, а не
последователно!
може да бъде издаден в следващия пакет от издания. Тази задача може да бъде направена преди
брой инструкции от даден клас (да речем, един FP, едно цяло число, едно зареждане,
Machine Translated by Google
Разбира се, това, което прави горното много сложно, е, че всичко се прави паралелно
в един такт!
В задния край на тръбопровода трябва да можем да завършим и да се ангажираме
множество инструкции на часовник. Тези стъпки са малко по-лесни от проблема
проблеми, тъй като множество инструкции, които всъщност могат да се ангажират в един и същи часовник
цикъл трябва вече да е разгледал и разрешил всякакви зависимости. Както щем
Вижте, дизайнерите са измислили как да се справят с тази сложност: Intel i7,
който разглеждаме в раздел 3.13, използва по същество схемата, която имаме
описан за спекулативна множествена емисия, включително голям брой резервации
станции, буфер за пренареждане и буфер за зареждане и съхраняване, който също се използва за обработка
Отговор Фигури 3.19 и 3.20 показват производителността за двуемисионен процесор с динамично планиране,
без и със спекулации. В този случай, където може да бъде клон
критичен ограничител на производителността, спекулациите помагат значително. Третият клон в
Machine Translated by Google
3.8 Използване на ILP чрез динамично планиране, множество проблеми и спекулации 201
Достъп до
Проблеми при Изпълнява се паметта при Запишете CDB на
Повторение номер на при номер на номер на номер на
номер Инструкции тактовия цикъл тактовия цикъл тактовия цикъл часовников цикъл Коментирайте
Фигура 3.19 Времето на издаване, изпълнение и резултатът от писане за двойна версия на нашия конвейер без
спекулация. Имайте предвид, че LD след BNE не може да започне изпълнение по-рано, защото трябва да изчака до разклонението
резултатът се определя. Този тип програма, със зависещи от данни разклонения, които не могат да бъдат разрешени по-рано, показва
силата на спекулацията. Отделни функционални единици за изчисляване на адреси, ALU операции и разклонение
оценката позволява множество инструкции за изпълнение в един и същи цикъл. Фигура 3.20 показва този пример със спекулации.
Този пример ясно показва как спекулациите могат да бъдат изгодни, когато са налице
са зависими от данни клонове, които иначе биха ограничили производителността. Това
предимството обаче зависи от точното прогнозиране на клона. Неправилната спекулация не
подобрява производителността; всъщност това обикновено вреди на производителността и,
както ще видим, драматично намалява енергийната ефективност.
Machine Translated by Google
Пишете
Проблеми Изпълнява Достъп за четене CDB на
Номер на с номера на се на на
итерация Инструкции часовника часовников номер часовников номерчасовник номер
Ангажименти на часовник номер Коментар
Фигура 3.20 Времето на издаване, изпълнение и резултат от писане за двойна версия на нашия конвейер със спекулация. Обърнете
внимание, че LD след BNE може да започне изпълнение по-рано, защото е спекулативен.
Разбира се, извличането на тези инструкции изисква достатъчно широки пътища до инструкцията
кеш, но най-трудният аспект е обработката на клонове. В този раздел разглеждаме
Machine Translated by Google
два метода за работа с разклонения и след това обсъдете как съвременните процесори
интегрират функциите за предсказване на инструкции и предварително извличане.
Разклонение-целеви буфери
За да намалим наказанието за разклоняване за нашия прост конвейер с пет етапа, както и за по-
дълбоки конвейери, трябва да знаем дали все още недекодираната инструкция е разклонение и
ако е така, какъв трябва да бъде следващият програмен брояч (PC). Ако инструкцията е
разклонение и знаем какъв трябва да бъде следващият компютър, можем да имаме наказание за
разклоняване от нула. Кеш за предвиждане на разклонения, който съхранява предвидения адрес
за следващата инструкция след разклонение, се нарича буфер за цел за разклоняване или кеш за
цел за разклоняване. Фигура 3.21 показва буфер за разклонение-цель.
Тъй като буферът за цел на разклонение предвижда адреса на следващата инструкция и ще
го изпрати преди декодирането на инструкцията, трябва да знаем дали изтеглената инструкция
е предвидена като взето разклонение. Ако компютърът на извлечената инструкция съответства
на адрес в буфера за прогнозиране, тогава съответният прогнозиран компютър се използва като
следващ компютър. Хардуерът за този буфер за разклоняване е по същество идентичен с
хардуера за кеш.
PC с инструкции за извличане
Погледни нагоре
Предвиден компютър
Брой записи
в буфера
за целта
на
клона
Не: инструкцията е
= не се предвижда да Клон,
Фигура 3.21 Буфер за цел на клон. PC на извличаната инструкция се съпоставя с набор от адреси на инструкции, съхранени
в първата колона; те представляват адресите на известни клонове. Ако PC съответства на един от тези записи, тогава
извличаната инструкция е взето разклонение, а второто поле, прогнозиран PC, съдържа прогнозата за следващия PC след
разклонението. Извличането започва веднага на този адрес. Третото поле, което не е задължително, може да се използва
за допълнителни битове на състояние на прогнозиране.
Machine Translated by Google
Ако съвпадащ запис бъде намерен в буфера за цел на клон, извличането започва незабавно
на предвидения компютър. Обърнете внимание, че за разлика от буфера за предвиждане на
разклонения, предсказуемият запис трябва да бъде съпоставен с тази инструкция, тъй като
прогнозираният компютър ще бъде изпратен, преди да се знае дали тази инструкция е дори
разклонение. Ако процесорът не провери дали записът съответства на този компютър, тогава
грешният компютър ще бъде изпратен за инструкции, които не са разклонения, което води до
по-лоша производителност. Трябва само да съхраним предвидените взети разклонения в
целевия буфер за разклонения, тъй като непоетият разклонение трябва просто да извлече
следващата последователна инструкция, сякаш не е разклонение.
Фигура 3.22 показва стъпките при използване на клон-целеви буфер за обикновен
петстепенен конвейер. От тази фигура можем да видим, че няма да има забавяне на клона
АКО
Не Намерен е запис да
в буфера за цел
на клон?
Изпратете
предвидено
настолен компютър
Не Инструкцията да
взет клон
ли е?
документ за самоличност
Не Взет да
Нормално
клон?
изпълнение на
инструкциите
да Взета Взета 0
да Взета Не е взето 2
Не Взета 2
Не Не е взето 0
за спиране на извличането на инструкции, докато пренаписваме записа в буфера. По този начин бихме искали да
За да оценим колко добре работи буферът за целта на клона, първо трябва да определим
наказанията във всички възможни случаи. Фигура 3.23 съдържа тази информация за прост петстепенен
тръбопровод.
Пример Определете общото наказание за разклоняване за буфер за цел на разклонение, като приемете циклите на наказание
=
Вероятност (разклонение в буфера, но всъщност не е заето) Процент × Процент неправилни прогнози
на попадение в буфера
= 90% 10% × = 0,09
имат закъснения при погрешно предвиждане на разклонения от порядъка на 15 тактови цикъла; ясно е, че
инструкции вместо или в допълнение към предвидения целеви адрес. Тази вариация има две потенциални
функцията на безусловния клон е да промени компютъра. По този начин, когато буферът за разклонение-
варира по време на изпълнение. Въпреки че езиковите програми на високо ниво ще генерират такива
скокове за индиректни извиквания на процедури, оператори select или case и изчислени с FORTRAN gotos,
Въпреки че връщанията на процедурата могат да бъдат предвидени с буфер за цел на разклонение, the
точността на такава техника за прогнозиране може да бъде ниска, ако процедурата се извика от
60% за такива клонове за връщане. За да преодолеят този проблем, някои дизайни използват малък
буфер от адреси за връщане, работещи като стек. Тази структура кешира най-много
скорошни адреси за връщане: натискане на адрес за връщане в стека при повикване и изскачане
еднократно при връщане. Ако кешът е достатъчно голям (т.е. толкова голям, колкото максимумът
дълбочина на повикване), той ще предвиди перфектно възвръщаемостта. Фигура 3.24 показва производителността
на такъв буфер за връщане с 0 до 16 елемента за номер на SPEC CPU95
70%
Отивам
m88ksim
cc1
60%
Компресирайте
Xlisp
Ijpeg
50% Perl
Вихър
40%
ктсе
ознаш
енав аЧ
р
о
сге
те
одр н
п
30%
20%
10%
0%
0 124 8 16
Записи в буфера на адреса за връщане
Фигура 3.24 Точност на предсказване за буфер на адрес за връщане, работещ като стек на редица
тестове за сравнение на SPEC CPU95. Точността е частта от адресите за връщане, предвидени
правилно. Буфер от 0 записа означава, че се използва стандартното предсказване на разклоненията.
Тъй като дълбочините на повикванията обикновено не са големи, с някои изключения, скромният
буфер работи добре. Тези данни идват от Skadron et al. [1999] и използвайте механизъм за
коригиране, за да предотвратите повреда на кешираните адреси за връщане.
ILP в раздел 3.10. Както процесорите Intel Core, така и процесорите AMD Phenom имат предсказващи
адреси за връщане.
3. Достъп до паметта на инструкциите и буфериране – При извличане на множество инструкции на цикъл се срещат
линии. Модулът за извличане на инструкции капсулира тази сложност, използвайки предварително извличане
за да се опитате да скриете разходите за пресичане на кеш блокове. Модулът за извличане на инструкции също
осигурява буфериране, като по същество действа като единица при поискване за предоставяне
На практика всички процесори от висок клас сега използват отделен модул за извличане на инструкции, свързан с
В този раздел ние изследваме четири въпроса, които включват компромисите на дизайна в спекулациите,
вместо буфер за пренареждане. След това обсъждаме едно важно възможно разширение на
R31 и F0, …, F31) се съдържат във всяка точка на изпълнение в някаква комбинация от регистрационен набор и
станции за резервация. С добавянето на спекулации стойностите на регистъра също могат временно да пребивават
По този начин разширените регистри заместват по-голямата част от функцията на ROB и станциите за резервации;
архитектурните регистри към номерата на физическите регистри в разширения набор от регистри, разпределяйки
2. Логиката на проблема определя какви зависимости съществуват в пакета. Ако в пакета не съществува
зависимост, структурата за преименуване на регистър се използва за определяне на физическия
регистър, който съдържа или ще съдържа резултата, от чиято инструкция зависи. Когато в пакета не
съществува зависимост, резултатът е от по-ранен пакет с проблеми и таблицата за преименуване на
регистър ще има правилния номер на регистъра.
3. Ако дадена инструкция зависи от инструкция, която е по-ранна в пакета, тогава предварително
запазеният физически регистър, в който ще бъде поставен резултатът, се използва за актуализиране
на информацията за издаващата инструкция.
Обърнете внимание, че точно както в случая на буфера за пренареждане, логиката на проблема трябва
както да определя зависимости в рамките на пакета, така и да актуализира таблиците за преименуване в
един часовник и, както преди, сложността на това за по-голям брой инструкции на часовник става главно
ограничение в ширината на проблема.
Колко да спекулираме
други, особено тези, които страдат от висока честота на такива съчетани събития
През 90-те години потенциалните недостатъци на спекулациите бяха по-малко очевидни. Като
висока честота на разклоненията, (2) значително групиране на разклонения и (3) големи закъснения
във функционални единици. В първите два случая постигането на висока производителност може да означава
един клон на часовник. Програми за бази данни и други по-малко структурирани цели числа
клонове важни. По същия начин, дългите закъснения във функционалните единици могат да повишат
закъснения на тръбопровода.
малко вероятно е разходите за това да бъдат оправдани от гледна точка на производителност спрямо
сложност и мощност.
може да се твърди, че използването на спекулации винаги намалява енергийната ефективност, тъй като
45%
40%
35%
30%
25%
пГс
нушкер
яицал
20%
15%
10%
5%
0%
181.mcf
168.wupwise 171.swim 173.applu 177.mesa172.mgrid 164.gzip 175.vpr 176.gcc 186.crafty
Фигура 3.25 Делът на инструкциите, които се изпълняват в резултат на грешна спекулация, обикновено е много по-висок за
целочислени програми (първите пет) в сравнение с FP програми (последните пет).
Прогноза за стойността
когато една инструкция произвежда стойност, избрана от малък набор от потенциални стойности,
програма.
ILP. Тази възможност е най-вероятна, когато дадена стойност се използва като източник на верига
Въпреки че много изследователи са се фокусирали върху прогнозирането на стойността през последните десет
реални процесори. Вместо това е използвана по-проста и по-стара идея, свързана с предсказване на
проста техника, която предвижда дали два магазина или товар и магазин се отнасят за
същия адрес на паметта. Ако две такива препратки не се отнасят за един и същи адрес,
тогава те могат да бъдат безопасно разменени. В противен случай трябва да изчакаме паметта
едновременно по-стабилни и по-прости. Тази ограничена форма на спекулация на стойността на адреса има
през 60-те години. През 80-те и 90-те години на миналия век тези техники бяха ключови за постигането
от решаващо значение за нашата дългосрочна способност да подобряваме производителността със скорост, която надвишава
критичният въпрос какво е необходимо, за да се използва повече ILP, е от решаващо значение както за
компютърните дизайнери, така и за авторите на компилатори. Данните в този раздел също ни предоставят
В този раздел разглеждаме част от едно от изследванията, направени по тези въпроси (въз основа на
това прави най-малко предположения; всъщност крайният хардуерен модел е вероятно неосъществим.
Както ще видим, за хардуерни модели, които имат разумна цена, това е малко вероятно
мощността и употребата на силиций са просто твърде високи. Докато мнозина в изследователската общност
Моделът на хардуера
За да видим какви могат да бъдат границите на ILP, първо трябва да дефинираме идеален процесор.
Идеален процесор е този, при който всички ограничения на ILP са премахнати. Единственият
точно и товарът може да бъде преместен преди магазин, при условие че адресите
цикъл! По този начин този набор от предположения включва както контрола, така и спекулациите с адреси
модели процесори, които изследваме, няма ограничения за това какви типове инструкции могат да се
да бъде неограничен брой зареждания или съхранява, издавани в един тактов цикъл. В допълнение,
всички закъснения на функционалните единици се приемат за един цикъл, така че всяка последователност от
зависимите инструкции могат да се издават при последователни цикли. Латенции, по-дълги от едно
инструкции в процес на изпълнение във всяка точка. (Инструкциите в изпълнение по всяко време
gcc 55
еспресо 63
ли 18
Cн Pб
Eе S
75
евокрамч
fpppp
додук 119
tomcatv 150
Фигура 3.27 показва резултата за тази конфигурация, докато променяме размера на прозореца.
Тази конфигурация е по-сложна и скъпа от всички съществуващи реализации, особено по отношение
на броя проблеми с инструкциите, който е повече от 10 пъти по-голям от най-големия брой проблеми,
налични на който и да е процесор през 2011 г. Въпреки това, тя дава полезна обвързани с това какво
могат да доведат до бъдещи внедрявания. Данните в тези цифри вероятно са много оптимистични по
друга причина. Няма ограничения за проблеми сред 64-те инструкции: всички те могат да бъдат
препратки към паметта. Никой дори не би обмислял тази възможност в процесор в близко бъдеще. За
съжаление е доста трудно да се обвърже производителността на процесор с разумни ограничения за
проблеми; не само че пространството от възможности е доста голямо, но съществуването на
ограничения на проблемите изисква паралелността да бъде оценена с точен планировчик на
инструкции, което прави разходите за изучаване на процесори с голям брой проблеми много скъпи.
Освен това не забравяйте, че при тълкуването на тези резултати пропуските в кеша и закъсненията,
различни от модулите, не са взети под внимание и тези два ефекта ще имат значително въздействие!
Machine Translated by Google
Размер на прозореца
10
10 Безкрайно
gcc 10 256
9 128
8 64
32
15
15
еспресо 13
10
8
12
12
ли 11
11
9
евокрамчнеБ
52
47
fpppp 35
22
14
17
16
додук 15
12
9
56
45
tomcatv 34
22
14
0 10 20 30 40 50 60
Фигура 3.27 Размерът на наличния паралелизъм спрямо размера на прозореца за различни цели
числа и програми с плаваща запетая с до 64 произволни инструкции за такт. Въпреки че има по-
малко регистри за преименуване от размера на прозореца, фактът, че всички операции имат
латентност от един цикъл и броят на регистрите за преименуване е равен на ширината на
проблема, позволява на процесора да използва паралелизма в рамките на целия прозорец. В
реална реализация размерът на прозореца и броят на регистрите за преименуване трябва да бъдат
балансирани, за да се предотврати прекомерното ограничаване на броя на проблемите на един от тези фактор
Този процесор има най-малкия кеш, което води до 0,01 пропуска на инструкция, но скрива 25% от
наказанието за пропуск при всяко пропуск чрез динамично планиране. Този процесор има тактова
честота от 2,5 GHz.
Да приемем, че времето на основната памет (което определя наказанието за пропуск) е 50 ns. Определете
относителната производителност на тези три процесора.
Отговор Първо, ние използваме информацията за наказанието за пропуски и процента на пропуски, за да изчислим
приноса към CPI от пропуските в кеша за всяка конфигурация. Правим това със следната формула:
= ×
Кеширане на пропуски на CPI на инструкция Наказание за пропуски
Времената на тактовия цикъл за процесорите са съответно 250 ps, 200 ps и 400 ps. Следователно
наказанията за пропуски са
50 ns
=
Пропусната дузпа1 = --------------- 200 цикъла 250
ps
50 ns
=
Пропусната дузпа 2 = --------------- 250 цикъла 200
ps 0,75
5 × 0 ns
Пропусната дузпа3 = ----------------------------- 94 цикъла =
400 к.с
Знаем приноса на конвейера за CPI за всичко, освен за процесор 3; неговият конвейерен CPI се дава от:
1 1 1
= ---------------------- = ---------------- = ------- 0,22 =
Тръбопровод CPI3
Процент на издаване 9 0,5 × 4,5
Сега можем да намерим CPI за всеки процесор, като добавим конвейера и кеша
Принос на CPI:
Тъй като това е една и съща архитектура, можем да сравним скоростите на изпълнение на инструкциите
милиони инструкции в секунда (MIPS) за определяне на относителната производителност:
CR
Скорост на изпълнение на инструкциите = --------
CPI
4000 MHz
= = ------------------------ 2222 MIPS
Скорост на изпълнение на инструкциите1
1.8
5000 MHz
= = ------------------------ 2083 MIPS
Скорост на изпълнение на инструкциите2
2.4
2500 MHz
= = ------------------------ 2155 MIPS
Скорост на изпълнение на инструкциите3
1.16
В този пример простият статичен суперскалар с две издания изглежда най-добре. На практика,
производителността зависи както от предположенията за CPI, така и от тактовата честота.
Като всяко изследване на границите, изследването, което разгледахме в този раздел, има свои собствени
ограничения. Ние ги разделяме на два класа: ограничения, които възникват дори за
Machine Translated by Google
За не толкова перфектен процесор бяха предложени няколко идеи, които биха могли да
разкрият повече ILP. Един пример е да се спекулира по множество пътища. Тази идея беше
обсъдена от Lam и Wilson [1992] и изследвана в изследването, обхванато в този раздел. Чрез
спекулиране на множество пътища цената на неправилното възстановяване се намалява и
може да се разкрие повече паралелизъм. Има смисъл да се оценява тази схема само за
ограничен брой клонове, тъй като необходимите хардуерни ресурси нарастват експоненциално.
Wall [1993] предоставя данни за спекулации в двете посоки на до осем клона. Като се имат
предвид разходите за преследване на двата пътя, знаейки, че единият ще бъде изхвърлен (и
нарастващото количество безполезни изчисления, тъй като такъв процес се следва през
множество клонове), всеки търговски дизайн вместо това е отделил допълнителен хардуер за
по-добро спекулиране на правилния път.
Machine Translated by Google
Опитите за пробиване на тези граници през първите пет години на този век
срещнах разочарование. Някои техники водят до малки подобрения, но често при
значително увеличаване на сложността, увеличаване на тактовия цикъл и непропорционално увеличаване
Хардуерно интензивните подходи към спекулациите в тази глава и софтуерните подходи в Приложение H
предоставят алтернативни подходи за използване
ILP. Изброени са някои от компромисите и ограниченията за тези подходи
По-долу:
За да спекулираме широко, трябва да можем да разграничим препратките към паметта. Тази възможност
е трудна за изпълнение по време на компилиране за цели програми
които съдържат указатели. В хардуерно базирана схема, динамичното раздвояване на адресите на
паметта по време на изпълнение се извършва с помощта на техниките, които видяхме по-рано
за алгоритъма на Томасуло. Тази недвусмисленост ни позволява да преместваме товари
минали магазини по време на изпълнение. Поддръжката на спекулативни препратки към паметта може да помогне
3.12 Многопоточност: Използване на паралелизъм на ниво нишка за подобряване на пропускателната способност на еднопроцесор 223
Темата, която разглеждаме в този раздел, многонишковостта, е наистина междусекторна тема, тъй като
има отношение към конвейерната обработка и суперскаларите, към графичните процесори (Глава 4) и
мултипроцесорите (Глава 5). Представяме темата тук и изследваме използването на многопоточност за
увеличаване на пропускателната способност на еднопроцесор чрез използване на множество нишки за
скриване на закъсненията на конвейера и паметта. В следващата глава ще видим как многонишковостта
предоставя същите предимства в графичните процесори и накрая, глава 5 ще изследва комбинацията
от многонишковост и многопроцесорност.
Тези теми са тясно преплетени, тъй като многонишковостта е основна техника за излагане на повече
паралелизъм на хардуера. В тесен смисъл, многонишковостта използва паралелизъм на ниво нишка и
следователно е правилно предмет на Глава 5, но ролята му както в подобряването на използването на
конвейера, така и в графичните процесори ни мотивира да представим концепцията тук.
регистрационен файл, отделен компютър и отделна таблица на страниците за всяка нишка. Самата памет
стотици до хиляди процесорни цикли. Разбира се, за да може многонишковият хардуер да постигне
Тези нишки се идентифицират или от компилатор (обикновено от език с паралелни конструкции), или от
програмист.
направено по кръгов ред, като се пропускат всички нишки, които са спрени по това време.
които възникват както от къси, така и от дълги спирания, тъй като инструкциите от други
нишките могат да бъдат изпълнени, когато една нишка спре, дори ако сривът е само за няколко
надолу изпълнението на отделна нишка, тъй като нишка, която е готова за изпълнение
накратко, използва проста фина многопоточност, както и графичните процесори на Nvidia, които
закъснения, като пропуски на кеш ниво две или три. Тази промяна облекчава необходимостта от
накарайте превключването на нишки да бъде по същество безплатно и е много по-малко вероятно да се забави
изпълнението на която и да е нишка, тъй като инструкциите от други нишки ще бъдат само
многопоточност. Тъй като CPU с едрозърнеста многонишковост издава инструкции от една нишка, когато
сергии с много висока цена, където презареждането на тръбопровода е незначително в сравнение със сергиите
3.12 Многопоточност: Използване на паралелизъм на ниво нишка за подобряване на пропускателната способност на еднопроцесор 225
събития с дълга латентност в процесор, като по този начин се увеличава използването на функционалността
фино-зърнеста многопоточност
Слотове за изпълнение
Фигура 3.28 Как четири различни подхода използват слотовете за изпълнение на функционални единици на суперскаларен процесор.
Хоризонталното измерение представлява способността за изпълнение на инструкцията във всеки тактов цикъл. Вертикалното измерение
представлява последователност от тактови цикли. Празно (бяло) поле показва, че съответният слот за изпълнение е
неизползван в този тактов цикъл. Нюансите на сивото и черното съответстват на четири различни нишки в многопоточността
процесори. Черното също се използва за обозначаване на заетите проблемни слотове в случай на суперскалар без многонишкова
поддръжка. Процесорите Sun T1 и T2 (известни още като Niagara) са фини многонишкови процесори, докато Intel
Процесорите Core i7 и IBM Power7 използват SMT. T2 има осем нишки, Power7 има четири, а Intel i7 има две.
Във всички съществуващи SMT инструкциите се издават само от една нишка наведнъж. Разликата при SMT е, че последващите
решението за изпълнение на инструкция е отделено и може да изпълни операциите, идващи от няколко различни
инструкции в същия тактов цикъл.
Machine Translated by Google
Ако някой внедри фино-зърнеста нишка върху процесор с динамичен график с множество
проблеми, резултатът е SMT. Във всички съществуващи реализации на SMT всички проблеми
идват от една нишка, въпреки че инструкциите от различни нишки могат да инициират
изпълнение в един и същ цикъл, като използват хардуера за динамично планиране, за да
определят какви инструкции са готови. Въпреки че Фигура 3.28 значително опростява реалната
работа на тези процесори, тя илюстрира потенциалните предимства в производителността на
многонишковостта като цяло и SMT в по-широкообхватни, динамично планирани процесори.
3.12 Многопоточност: Използване на паралелизъм на ниво нишка за подобряване на пропускателната способност на еднопроцесор 227
Характеристика Слънце Т1
Многопроцесорна и Осем ядра на чип; четири нишки на ядро. Фино планиране на нишки. Една споделена
многонишкова единица с плаваща запетая за осем ядра.
поддръжка Поддържа само многопроцесорна обработка на чип.
Структура на тръбопровода Опростен тръбопровод с шест дълбочини в ред с три цикъла на забавяне за товари
и разклонения.
L2 кешове Четири отделни L2 кеша, всеки по 750 KB и свързан с банка памет. 64-байтов
размер на блока. Липсата на основната памет е 110 тактови цикъла, ако се приеме,
че няма конкуренция.
предизвикват забавяне от три цикъла, което може да бъде скрито само от други нишки. Единичен набор от плаваща запетая
функционалните единици се споделят от всичките осем ядра, тъй като производителността с плаваща запетая не беше a
1.7
1.6
1.5
1.4
1.3
нти
оте
а отте
и
лсан
е ч
кнаи н
стсуи е
пл
оо евО
ттр
осе
и
тн а
л и
н
п
ч
л
у
1.2
1.1
1
L1 Липсва L1 D процент Степен на L1 Липсва ми L1 D пропуск L2 пропускане
100%
90%
80%
70%
60%
аП
и
тентеицлокр н
ц
Не е готов
50% Готов, не избран
Изпълнява се
40%
30%
20%
10%
0%
TPC-C-подобен SPECJBB00 SPECWeb99
Фигура 3.31 Разбивка на състоянието на средна нишка. „Изпълнение“ показва, че нишката издава
инструкция в този цикъл. „Готово, но неизбрано“ означава, че може да издаде, но е избрана друга
нишка, а „не е готова“ показва, че нишката чака завършване на събитие (например забавяне на
конвейера или пропуск в кеша).
3.12 Многопоточност: Използване на паралелизма на ниво нишка за подобряване на пропускателната способност на еднопроцесорния 229
100%
90%
80%
70%
други
60%
Забавяне на тръбопровода
50% L2 пропуск
аП
и
тентеицлокр н
ц
L1 D пропуск
40% L1 Липсва ми
30%
20%
10%
0%
TPC-C-подобен SPECJBB SPECWeb99
Фигура 3.33 CPI за нишка, CPI за ядро, ефективният CPI за осем ядра и
ефективният IPC (обратен на CPI) за осемядрения процесор T1.
Фигура 3.33 показва CPI за нишка и за ядро. Тъй като T1 е прецизен многонишков
процесор с четири нишки на ядро, при достатъчен паралелизъм идеалният ефективен CPI
на нишка би бил четири, тъй като това би означавало
че всяка нишка е консумирала един цикъл от всеки четири. Идеалният CPI на
ядрото ще бъде едно. През 2005 г. IPC за тези показатели работи агресивно
ILP ядрата биха били подобни на тези, наблюдавани при ядрото T1. T1 ядрото обаче беше
много скромно по размер в сравнение с агресивните ILP ядра от 2005 г.
поради което T1 имаше осем ядра в сравнение с две до четири, предлагани на други
процесори от същата реколта. В резултат на това през 2005 г., когато беше въведен,
Процесорът Sun T1 имаше най-добрата производителност при целочислени приложения с
обширен TLP и взискателна производителност на паметта, като SPECJBB и работни
натоварвания за обработка на транзакции.
Machine Translated by Google
Ключов въпрос е колко производителност може да се постигне чрез прилагане на SMT? Когато този
въпрос беше изследван през 2000-2001 г., изследователите предположиха, че динамичните
суперскалари ще станат много по-широки през следващите пет години, поддържайки шест до осем
въпроса на часовник със спекулативно динамично планиране, много едновременни зареждания и
съхранявания, големи първични кешове и четири до осем контекста с едновременно издаване и
оттегляне от множество контексти. Никой процесор не се е доближавал до това ниво.
3.12 Многопоточност: Използване на паралелизма на ниво нишка за подобряване на пропускателната способност на еднопроцесорния 231
Фигура 3.34 Паралелните бенчмаркове, използвани тук за изследване на многонишковостта, както и в глава 5 за изследване
многопроцесорна обработка с i7. Горната половина на диаграмата се състои от показатели PARSEC, събрани от Biena et al. [2008].
Бенчмарковете PARSEC са предназначени да бъдат показателни за паралелни приложения с интензивни изчисления, които биха
били подходящи за многоядрени процесори. Долната половина се състои от многонишкови тестове на Java от колекцията DaCapo
(вижте Blackburn et al. [2006]) и pjbb2005 от SPEC. Всички тези бенчмаркове съдържат известен паралелизъм; друго
Тестовете за сравнение на Java в работните натоварвания DaCapo и SPEC на Java използват множество нишки, но имат малък или никакъв истински паралелизъм
и следователно не се използват тук. Вижте Esmaeilzadeh et al. [2011] за допълнителна информация относно характеристиките на
тези показатели спрямо измерванията тук и в Глава 5.
енергийната ефективност за тестовете на Java е 1,06, което е почти толкова добро, колкото
бенчмарковете PARSEC. В показателите на PARSEC SMT намалява енергията с
1 (1/1,08) = 7%. Такива подобрения на ефективността, намаляващи енергията, са много
трудни за намиране. Разбира се, статичната мощност, свързана със SMT, се заплаща и в двете
случаи, така че резултатите вероятно леко надценяват енергийните печалби.
Тези резултати ясно показват, че SMT в агресивен спекулативен процесор
с обширна поддръжка за SMT може да подобри производителността в енергийно ефективен
мода, което по-агресивните подходи на ILP не успяха. През 2011,
балансът между предлагането на множество по-прости ядра и по-малко по-сложни ядра се е
променил в полза на повече ядра, като всяко ядро обикновено е
суперскаларен с три до четири издания със SMT, поддържащ два до четири нишки. Наистина,
Esmaeilzadeh и др. [2011] показват, че енергийните подобрения от SMT са
дори по-голям при Intel i5 (процесор, подобен на i7, но с по-малки кеши
и по-ниска тактова честота) и Intel Atom (процесор 80×86, предназначен за
пазар на нетбуци и описан в раздел 3.14).
Machine Translated by Google
Архитектурен
2.00
1,75
1.50
регистър
1.25
1,00
нш
аед
о
тсонлеетитсни ой тги
озн
и
вв к оM
ртTе ъ7и
ф
н
р
а н
п
е
Sсi
0,75
Ксалан
Vips ×264
Затъмнение
Sunflow Tomcat Facesim
Lusearch Bodytrack Canneal Суапции
Tradebeans Pjbb2005
Блекскоулс
файл
Фигура 3.35 Ускоряването от използването на многопоточност на едно ядро на i7 процесор е средно 1,28 за показателите на Java и 1,31 за
показателите PARSEC (използвайки непретеглена хармонична средна стойност, което предполага работно натоварване, където общото време,
Ferret Fluidanimate Raytrace Streamcluster
прекарано за изпълнение на всеки показател в единичен -резбовият базов комплект беше същият). Енергийната ефективност е средно 0,99 и 1,07,
съответно (използвайки средната хармонична стойност). Спомнете си, че всичко над 1,0 за енергийна ефективност показва, че функцията намалява
времето за изпълнение с повече, отколкото увеличава средната мощност. Два от тестовете на Java изпитват слабо ускоряване и имат значителна
отрицателна енергийна ефективност поради това.
Turbo Boost е изключен във всички случаи. Тези данни са събрани и анализирани от Esmaeilzadeh et al. [2011] с помощта на Oracle (Sun) HotSpot
компилация 16.3-b01 Java 1.6.0 виртуална машина и собствен компилатор gcc v4.4.1.
F0 F1 F2 D0 D1 D2 D3 D4 E0 E1 E2 E3 E4 E5
Наказание за неправилно
Извличане на
ALU/MUL тръба 0
инструкции Актуализация на BP
RAM Извличане на
AGU + 12 входа Декодиране на инструкции
TLB опашка ALU тръба 1
Актуализация на BP
BTB
GHB
RS LS тръба 0 или 1
Актуализация на BP
Фигура 3.36 Основната структура на тръбопровода A8 е 13 етапа. Три цикъла се използват за извличане на
инструкции и четири за декодиране на инструкции, в допълнение към конвейера с цели числа от пет цикъла.
Това води до 13-цикълна санкция за погрешно предвиждане на разклонения. Модулът за извличане на
инструкции се опитва да поддържа опашката от 12 инструкции запълнена.
Machine Translated by Google
ARM Cortex-A8
A8 е двоен проблем, статично планиран суперскалар с динамичен проблем
откриване, което позволява на процесора да издава една или две инструкции на такт.
Фигура 3.36 показва основната тръбопроводна структура на 13-степенния тръбопровод.
A8 използва динамичен предсказател на разклонения с 512-вписвания двупосочен набор от
асоциативни целеви буфери на разклонения и 4K-входен буфер за глобална история, който е
индексирани от историята на клоновете и текущия компютър. В случай, че клонът tar-get буфер
пропусне, се получава прогноза от буфера за глобална история, който
след това може да се използва за изчисляване на адреса на клона. В допълнение, връщане с осем входа
стекът се съхранява за проследяване на адресите за връщане. Неправилна прогноза води до 13-
наказание за цикъл, тъй като тръбопроводът се промива.
Производителност на тръбопровода A8
A8 има идеален CPI от 0,5 поради своята двойна структура. Тръбопроводните сергии могат
възникват от три източника:
регистър
D0 D1 D2 D3 D4
Декодиране на инструкции
Рано Дек./послед
дек
Табло с резултати
Дек опашка + RegFile
чети пиши ID remap
проблемна логика
Рано
дек дек
файл Фигура 3.37 Петстепенно декодиране на инструкции на A8. В първия етап PC, произведен от модула за
извличане (или от целевия буфер на клона, или от PC инкремента), се
използва се за извличане на 8-байтов блок от кеша. Декодират се до две инструкции
и поставен в опашката за декодиране; ако нито една инструкция не е разклонение, компютърът се
увеличава за следващото извличане. Веднъж в опашката за декодиране, логиката на таблото решава
когато инструкциите могат да издават. В издаването операндите на регистъра се четат; припомни си това
в просто табло операндите винаги идват от регистрите. Оперите на регистъра и кодът на операцията се
изпращат към частта за изпълнение на инструкции на конвейера.
E0 E1 E2 E3 E4 E5
Изпълнение на инструкцията
ALU
BP
Shft + сб WB
актуализация ALU
знамена
умножават се
ALU
INST 1 BP
Shft + сб WB ALU тръба 1
актуализация
знамена
Зареждане/съхранение
ALU LS тръбопровод WB
тръба 0 или 1
6
L2 сергии/инструкция
L1 сергии/инструкция
Тръбопроводът спира/инструкция
5 Идеален CPI
3
аЦ
н
яицкуирлткси и
н
0
gzip vpr gcc mcf хитър парсер eon perlbmk gap vortex bzip2
Фигура 3.39 Прогнозният състав на CPI на ARM A8 показва, че спиранията на тръбопровода са основните
допълнение към основния CPI. eon заслужава специално споменаване, тъй като прави базирани на цели числа графични изчисления (ray
проследяване) и има много малко пропуски в кеша. Това е изчислително интензивно с интензивно използване на множествени и единични
многократният тръбопровод се превръща в основно тясно място. Тази оценка се получава чрез използване на нивата на пропуски и наказания за L1 и L2
подробен симулатор за получаване на сергии на тръбопровода. Сергиите на тръбопровода включват и трите опасности плюс незначителни ефекти, като път
погрешно предвиждане.
Machine Translated by Google
2.25
1,75
9A
1.5
1.25
gzip vpr gcc mcf хитър парсер eon perlbmk gap vortex bzip2 twolf
0,75
Фигура 3.40 Съотношението на производителност за A9 в сравнение с A8, като и двата използват тактова честота от 1 GHz
и кешове със същия размер за L1 и L2, показва, че A9 е около 1,28 пъти по-бърз. И двете изпълнения използват 32 KB
първичен кеш и 1 MB вторичен кеш, който е 8-посочен асоциативен за A8 и 16-посочен за A9. Размерите на блоковете в
кеш паметта са 64 байта за A8 и 32 байта за A9. Както е споменато в надписа на Фигура 3.39, eon използва интензивно
целочислено умножение, а комбинацията от динамично планиране и по-бърз конвейер за умножение значително
подобрява производителността на A9. twolf изпитва малко забавяне, вероятно поради факта, че поведението на кеша му
е по-лошо с по-малкия L1 размер на блока на A9.
Intel Core i7
i7 използва агресивна извънредна спекулативна микроархитектура с разумно дълбоки
тръбопроводи с цел постигане на висока производителност на инструкции чрез
комбиниране на множество проблеми и високи тактови честоти. Фигура 3.41 показва
цялостната структура на конвейера i7. Ще разгледаме тръбопровода, като започнем с
Machine Translated by Google
Хардуер за
18-Опашка с инструкции за влизане
извличане на инструкции
512-Вписване унифицирано 64-Entry данни TLB (4- 32-KB двойно портиран кеш за 256 KB унифициран l2
8 MB всички ядра, споделен и включен L3 кеш (16- Uncore арбитър (обработва графика и разликите в
посочен асоциативен) часовника/състоянието на захранване)
Фигура 3.41 Конвейерната структура на Intel Core i7, показана с компонентите на системата с памет.
Общата дълбочина на тръбопровода е 14 етапа, като грешните прогнози на разклоненията струват 17
цикъла. Има 48 буфера за зареждане и 32 буфера за съхранение. Всяка от шестте независими
функционални единици може да започне изпълнението на готова микрооперация в същия цикъл.
За x86 инструкции, които имат по-сложна семантика, има микрокодова машина, която се използва
за създаване на микрооперационна последователност; той може да произведе до четири
микрооперации на всеки цикъл и продължава, докато се генерира необходимата последователност
от микрооперации. Микрооперациите се поставят според реда на x86 инструкциите в буфера за
микрооперации с 28 входа.
8. Когато една или повече инструкции в началото на буфера за пренареждане са маркирани като
Производителност на i7
40%
35%
30%
25%
20%
ап
/аеатбноулбгъ
ан р
З
15%
10%
5%
0%
Bzip2
Gcc Mcf Milc Lbm
Намд Деалии
Soplex Povray
Gobmk Hmmer Сфинкс 3
Perlbench
Astar Xalancbmk
Sjeng Libquantum H264ref Omnetpp
Фигура 3.42 Количеството „загубена работа“ се изобразява чрез съотношението на изпратените микрооперации, които не
преминават към всички изпратени микрооперации. Например съотношението е 25% за sjeng, което означава, че 25% от
изпратените и изпълнени микрооперации се изхвърлят. Данните в този раздел са събрани от професор Lu Peng и Ph.D.
студент Ying Zhang, и двамата от Луизианския държавен университет.
Machine Translated by Google
2.5
1.5
IPC
0,5
0
Bzip2
Gcc Mcf Milc Lbm
Намд Деалии
Soplex Povray
Gobmk Hmmer Сфинкс 3
Perlbench
Astar Xalancbmk
Sjeng Libquantum H264ref Omnetpp
Фигура 3.43 CPI за 19 бенчмарка SPECCPU2006 показва среден CPI за 0,83 както за FP, така и за целочислен бенчмарк,
въпреки че поведението е доста различно. В случая на цяло число стойностите на CPI варират от 0,44 до 2,66 със
стандартно отклонение от 0,77, докато вариацията в случая с FP е от 0,62 до 1,38 със стандартно отклонение от 0,25.
Данните в този раздел са събрани от професор Lu Peng и Ph.D. студент Ying Zhang, и двамата от Луизианския
държавен университет.
Machine Translated by Google
Intel произвежда процесор за нетбуците от нисък клас и PMD пространството, който е доста подобен в
своята микроархитектура на ARM A8, наречен Atom 230. Интересното е, че Atom 230 и Core i7 920 са
произведени в едно и също 45 nm Intel технология. Фигура 3.44 обобщава Intel Core i7, ARM Cortex-A8 и Intel
Atom 230. Тези прилики предоставят рядка възможност за директно сравняване на две коренно различни
микроархитектури за един и същ набор от инструкции, като същевременно се поддържа постоянна
основната производствена технология. Преди да направим сравнението, трябва да кажем малко повече
за Atom 230.
Можем да очакваме, че тези два процесора, реализирани в една и съща технология и със същия
набор от инструкции, ще проявят предвидимо поведение, в
Machine Translated by Google
Три нива
32 KB/32 KB Двустепенна Двустепенна
256 KB 16/16 или 32/32 KB 32/24 KB
Кешове 2–8 MB 128 KB–1MB 512 KB
Структура на тръбопровода Пиков процент на издаване 4 операции/тактовник със сливане 2 операции/тактовник 2 операции/часовник
Двустепенна
512-вписване BTB
4K глобална история
Стек за връщане с
Прогноза за разклонения Двустепенна 8 входа Двустепенна
Фигура 3.44 Общ преглед на четириядрения Intel i7 920, пример за типичен процесорен чип Arm A8 (с 256
MB L2, 32K L1s и без плаваща запетая) и Intel ARM 230, ясно показващи разликата във философията на дизайна между процесор, предназначен за
PMD (в случая на ARM) или нетбук пространство (в случая на Atom) и а
процесор за използване в сървъри и настолни компютри от висок клас. Не забравяйте, че i7 включва четири ядра, всяко от които е няколко
пъти по-висока производителност от едноядрения A8 или Atom. Всички тези процесори са реализирани по сравним начин
45 nm технология.
11
2
m0o2t7и
A
9i
0
poF
rltna
енавудоП
скедниуЛ
fcm.924
mbi.074
3134
bd_902_
g.6
cliam
374
otnot.564
ssem
lllaed.744
104
54
a.0
86
dman.444
tso
mutnagunqebjisl.2
b.0
ppternam
ssej_202_
каж_822_
lriezp
054
bp
kmbog.544
hcne2
apcs.4
3
remmh.654
cavaj_312_
leurlcvploo
fer462h.464
d3eilsel.734
3скнифс.284
434
xyxia
oe
cammsu
sp rgz.5
kmbcnalax.384
яисерпмок_102_
3A4
54
D.T9D F
.6D
суткакM
smag
oiduagepm_212_
Фигура 3.45 Относителната производителност и енергийна ефективност за набор от еднонишкови бенчмаркове показва, че
i7 920 е 4 до над 10 пъти по-бърз от Atom 230, но е около 2 пъти по-малко енергийно ефективен средно! Производителността
е показана в колоните като i7 спрямо Atom, което е време за изпълнение (i7)/време за изпълнение (Atom). Енергията се
показва с линията като Енергия (Атом)/Енергия (i7). i7 никога не бие Atom по отношение на енергийната ефективност,
въпреки че по същество е толкова добър при четири показателя, три от които са с плаваща запетая. Показаните тук данни
са събрани от Esmaeilzadeh et al. [2011]. Сравнителните тестове на SPEC бяха компилирани с оптимизация при използване
на стандартния компилатор на Intel, докато сравнителните тестове на Java използват Sun (Oracle) Hotspot Java VM. Само едно
ядро е активно на i7, а останалите са в дълбок енергоспестяващ режим. Turbo Boost се използва при i7, което увеличава
предимството му в производителността, но леко намалява относителната му енергийна ефективност.
Тъй като съотношението на тактовите честоти на тези два процесора е 1,6, по-голямата
част от предимството идва от много по-нисък CPI за i7: фактор 2,8 за тестовете на Java,
фактор 3,1 за показателите SPECINT и фактор 4,3 за бенчмарковете SPECFP.
SPECCInt2006 SPECCFP2006
Процесор Тактова честота база базова линия
Фигура 3.46 Три различни процесора на Intel се различават значително. Въпреки че Itanium
процесорът има две ядра, а i7 четири, само едно ядро се използва в бенчмарковете.
Machine Translated by Google
Голяма част от вниманието в началото на 2000-те беше насочено към създаването на агресивни процесори
пиков процент на издаване на часовник, виждан някога. Това, което бързо стана ясно, беше, че основният
спекулативните тръбопроводи извън ред бяха доста добри в скриването на значителна част
от наказанията за пропуск от 10 до 15 цикъла за пропуск от първо ниво, те биха могли да направят много
малко, за да скрият наказанията за пропуск от второ ниво, които, когато отиват в основната памет,
още една промяна, която илюстрира този капан. Вместо да се опитват да скрият още повече
по-големи кешове. Както Itanium 2, така и i7 използват кешове на три нива в сравнение с
двустепенният кеш на Pentium 4, а кешовете от трето ниво са 9 MB и 8
В началото на 2000 г. фокусът върху използването на паралелизма на ниво инструкции беше на мястото си
връх. Intel беше на път да представи Itanium, статично планиран висок процент на проблеми
Процесорите MIPS, Alpha и IBM с динамично планирано спекулативно изпълнение бяха във второто си
поколение и бяха станали по-широки и по-бързи. Pen-tium 4, който използва спекулативно планиране,
много по-нататък би било изключително трудно и докато пиковите скорости на пропускане на инструкции
Следващите пет години бяха показателни. Itanium се оказа добър FP процесор, но само посредствен
Малко вероятно е по-нататъшен напредък да бъде възможен чрез увеличаване на емисионния процент. The
Machine Translated by Google
Проблеми на часовник 5 5 7 6
Функционални единици 8 8 9 12
Ядра/чип 2 2 2 8
SMT резби 0 2 2 4
Фигура 3.47 Характеристики на четири IBM Power процесора. Всички с изключение на Power6 бяха динамично планирани,
който е статичен и в ред, и всички процесори поддържат два конвейера за зареждане/съхранение. Power6 има същите функционални единици
като Power5, с изключение на десетичната единица. Power7 използва DRAM за L3 кеша.
Преименуване на регистър
че при равни други условия по-бързото обикновено е по-добро. Започнете с основите. Фигура 3.48
предоставя последователност от инструкции и списък със закъснения.
3.1 [10] <1.8, 3.1, 3.2> Каква би била базовата производителност (в цикли, на
итерация на цикъл) на кодовата последователност на Фигура 3.48 , ако няма нови инструкции
изпълнението може да бъде инициирано, докато не приключи изпълнението на предишната инструкция
завършено? Игнорирайте предния извличане и декодиране. Да приемем засега това изпълнение
не спира поради липса на следваща инструкция, а само една инструкция/цикъл
могат да бъдат издадени. Да приемем, че клонът е взет и че има клон с един цикъл
слот за забавяне.
3.2 [10] <1.8, 3.1, 3.2> Помислете какво всъщност означават числата за латентност - те показват броя на циклите,
които дадена функция изисква, за да произведе изхода си, нищо
Повече . Ако общият тръбопровод спре за циклите на латентност на всяка функционална единица,
тогава най-малкото сте гарантирани, че всяка двойка последователни инструкции („продуцент“,
последван от „консуматор“) ще се изпълни правилно. Но не всички инструкции
двойките имат връзка производител/потребител. Понякога две съседни инструкции нямат нищо общо
една с друга. Колко цикъла ще бъде тялото на цикъла
в кодовата последователност на фигура 3.48 изискват, ако тръбопроводът е открил верни данни
зависимости и се спираше само върху тях, вместо сляпо да спира всичко просто
защото една функционална единица е заета? Покажете кода с вмъкнат <stall> където
необходими за приспособяване на заявените закъснения. (Съвет: Инструкция със закъснение +2
изисква два цикъла <stall> да бъдат вмъкнати в кодовата последователност. Помисли си
по този начин: Инструкция с един цикъл има латентност 1 + 0, което означава нула допълнително чакане
държави. И така, латентност 1 + 1 предполага един цикъл на спиране; латентност 1 + N има N допълнително забавяне
цикли.
3.3 [15] <3.6, 3.7> Помислете за дизайн с няколко издания. Да предположим, че имате два конвейера за
изпълнение, всеки от които може да започне изпълнение на една инструкция на цикъл,
и достатъчно честотна лента за извличане/декодиране в предния край, така че да не ви спре
I7: SD F4,0(Ry)
I8: ПОДП R20, R4, Rx
I9: БНЗ R20, контур
единица към друга или към себе си. Освен това приемете, че единствената причина е екзекуция
изисква ли цикълът?
3.4 [10] <3.6, 3.7> В дизайна с множество проблеми на упражнение 3.3 може да сте разпознали някои фини проблеми.
същото време, когато инструкция N започва в Pipe 0, и N + 1 се случи да изискват по-кратко забавяне на
поне две причини, поради които това може да бъде опасно и ще изисква специални съображения в
3.6 [10/10/10] <3.1, 3.2> Всеки цикъл, който не инициира нова операция в канал
а. [10] <3.1, 3.2> Във вашия пренареден код от Упражнение 3.5 каква част от всички
цикли, като се броят и двете тръби, са били пропилени (не е инициирал нова операция)?
b. [10] <3.1, 3.2> Развиването на цикъл е една стандартна техника на компилатор за намиране
° С. [10] <3.1, 3.2> Какво ускоряване постигнахте? (За това упражнение просто оцветете
3.7 [15] <2.1> Компютрите прекарват по-голямата част от времето си в цикли, така че многократните итерации на
цикъла са страхотни места за спекулативно намиране на повече работа, за да запазите ресурсите на процесора
зает. Все пак нищо не е лесно; компилаторът издаде само едно копие от това
от сблъсък, ние преименуваме техните регистри. Фигура 3.49 показва примерен код, който
цикъла и използва различни регистри, за да избегне конфликти, но ако очакваме нашият хардуер да развие
цикъла, той също трябва да извърши преименуването на регистъра. как? Приемете вашето
Цикъл: LD F4,0(Rx)
I0: МНОГО F2, F0, F2
I1: DIVD F8, F4, F2
I2: LD F4,0(Ry)
I3: ДОБАВЯНЕ F6, F0, F4
I4: СУБД F8, F8, F6
I5: SD F8,0(Ry)
I0: LD T9,0(Rx)
I1: MULTD T10,F0,T9
...
има 64 от тях, T0 до T63), които може да замени тези регистри, определени от компилатора. Този хардуер за
насочена към този регистър. (Мислете за тези таблични стойности като производители и
на фигура 3.49. Всеки път, когато видите дестинационен регистър в кода, заменете следващия
наличен T, започващ с T9. След това актуализирайте съответно всички src регистри, така че
Фигура 3.50.)
3.8 [20] <3.4> Упражнение 3.7 изследва простото преименуване на регистъра: когато хардуерът
последната инструкция, насочена към този източник източник. Когато преименувате таблицата
дест картографиране на часовников цикъл. Суперскаларните процесори трябва да могат да правят това като
първите две инструкции. Освен това приемете, че следващите два налични T регистрират към
които се използват, са известни в началото на тактовия цикъл, в който тези две инструкции се преименуват.
направете справки в таблицата за преименуване и след това актуализирайте таблицата според нейната дестинация
T регистър. След това втората инструкция ще направи точно същото нещо, както и всяко
Machine Translated by Google
. . . 10 9 0
1 21
Това 9 се появява в 2 19
таблицата за
3 38
преименуване в
4 29
следващия часовников цикъл
5
...
8
9
dst = F1 dst = T9
I1
src1 =F2 ... src1 =T19
src2 =F3 src2 =T38
62
63
(Съгласно инстр. 1)
Y н
I1 dst = I2 src? dst = T10
dst = F4 src1 =T9
I2
src1 =F1 (Подобен mux src2 = T19
src2 =F2 за src2)
3.9 [5] <3.4> Ако някога се объркате какво трябва да прави преименуващият регистър, върнете се към
асемблерния код, който изпълнявате, и се запитайте какво трябва да се случи
Machine Translated by Google
Ако стойността на R1 започва като 5, каква трябва да бъде стойността му, когато тази последователност има
изпълнен?
3.10 [20] <3.4, 3.9> Дизайнерите на много дълги командни думи (VLIW) имат няколко основни
избори, които да направите по отношение на архитектурните правила за използване на регистъра. Да предположим, че VLIW е
<сергия>
ДОБАВИ R10,R4,#1;
SW R7,0(R6); SW R9,8(R8)
Фигура 3.53 Примерен VLIW код с две добавяния, две зареждания и две спирания.
Machine Translated by Google
Цикъл: LW R3,0(R0)
LW R1,0(R3)
SW R1,0(R3)
ALU 0
Инструкции
от декодера
1
ALU 1
Резервация
станция
2
LD/ST Мем
3.12 [15/20/20/10/20] <3.4, 3.7, 3.14> Нека помислим какво може да представлява динамичното планиране
постигнете тук. Да приемем микроархитектура, както е показано на фигура 3.55. Предполагам че
аритметично-логическите единици (ALU) могат да извършват всички аритметични операции (MULTD, DIVD, ADDD,
° С. [20] <3.4> Част (b) позволява на RS да се опита да планира оптимално тези инструкции.
Но в действителност цялата интересна последователност от инструкции обикновено не
присъства в RS. Вместо това различни събития изчистват RS и тъй като нова кодова
последователност постъпва от декодера, RS трябва да избере да изпрати това, което има.
Да предположим, че RS е празен. В цикъл 0, първите две преименувани в регистър
инструкции от тази последователност се появяват в RS. Да приемем, че е необходим един
тактов цикъл за изпращане на всяка операция и приемете, че закъсненията на
функционалните единици са такива, каквито бяха за упражнение 3.2. Освен това
приемете, че предният край (декодер/регистър-пренамерител) ще продължи да
предоставя две нови инструкции на тактов цикъл. Покажете реда на изпращане на RS
цикъл по цикъл. Колко тактови
цикъла изисква тази кодова последователност сега? д. [10] <3.14> Ако искахте да подобрите
резултатите от част (c), кое би помогнало най-много: (1) Друго ALU? (2) Друго устройство
LD/ST? (3) Пълно заобикаляне на резултатите от ALU към следващите операции? или (4)
намаляване наполовина на най-дългата
латентност? Какво е ускорението? д. [20] <3.7> Сега нека разгледаме спекулацията, акта на
извличане, декодиране и изпълнение отвъд едно или повече условни разклонения.
Нашата мотивация да направим това е двойна: графикът за изпращане, който измислихме
в част (c), имаше много неуспехи и знаем, че компютрите прекарват по-голямата част от
времето си в изпълнение на цикли (което означава, че клонът обратно към върха на цикъла е доста предсказ
Loops ни казват къде да намерим повече работа; нашият оскъден график за изпращане
предполага, че имаме възможности да свършим част от тази работа по-рано от преди. В
част (d) намерихте критичния път през цикъла. Представете си, че сгъвате второ копие
на този път върху графика, който сте получили в част (b). Колко повече тактови цикъла
ще са необходими, за да се извърши работата на два цикъла (ако приемем, че всички
инструкции са резидентни в RS)? (Да приемем, че всички функционални единици са
напълно конвейерни.)
Упражнения
3.13 [25] <3.13> В това упражнение ще изследвате компромисите в производителността между три
процесора, всеки от които използва различни видове многопоточност. Всеки от тези
процесори е суперскаларен, използва тръбопроводи в ред, изисква фиксиран три цикъл на
спиране след всички натоварвания и разклонения и има идентични L1 кешове. Инструкциите
от една и съща нишка, издадени в същия цикъл, се четат в програмен ред и не трябва да
съдържат данни или контролни зависимости. Процесор
контур: LD R1,0(R16)
LD R2,8(R16)
LD R3,16(R16)
LD R4,24(R16)
LD R5,32(R16)
LD R6,40(R16)
LD R7,48(R16)
LD R8,56(R16)
BEQAL R9,R1,съвпадение0
BEQAL R9,R2,съвпадение1
BEQAL R9,R3,съвпадение2
BEQAL R9,R4,съвпадение3
BEQAL R9,R5,съвпадение4
BEQAL R9,R6,съвпадение5
BEQAL R9,R7,съвпадение6
BEQAL R9,R8,съвпадение7
R16,R17,loop Приемете
следното: Използва се
3.14 [25/25/25] <3.2, 3.7> В това упражнение разглеждаме как софтуерните техники могат да извлекат
паралелизъм на ниво инструкция (ILP) в общ векторен цикъл. The
Machine Translated by Google
едно забавено разклонение с един цикъл, което се разрешава в етапа на ИД. Да приемем, че резултатите са пълни
заобиколен.
FP умножение FP ALU оп 6
FP доп FP ALU оп 4
FP умножение FP магазин 5
FP доп FP магазин 4
а. [25] <3.2> Да приемем конвейер с един проблем. Покажете как ще изглежда цикълът
както непланирани от компилатора, така и след планиране на компилатора и за двете
работа с плаваща запетая и закъснения на разклоненията, включително всякакви закъснения или празен часовник
b. [25] <3.2> Да приемем конвейер с един проблем. Развийте примката толкова пъти, колкото
необходимо, за да го планирате без никакви сергии, свивайки цикъла отгоре
инструкции. Колко пъти трябва да се развие примката? Покажете графика на обучението.
Какво е времето за изпълнение на елемент от резултата?
Machine Translated by Google
3.15 [20/20] <3.4, 3.5, 3.7, 3.8> В това упражнение ще разгледаме как вариантите на
Алгоритъмът на Tomasulo се изпълнява при изпълнение на цикъла от упражнение 3.14. The
функционалните единици (FU) са описани в таблицата по-долу.
Брой резервационни
Тип FU Цикли в EX Брой FU станции
Цяло число 1 1 5
FP суматор 10 1 3
FP множител 15 1 2
Да приемем следното:
Всеки от етапите на издаване (IS) и обратно записване (WB) изисква по един тактов цикъл.
а. [20] <3.4–3.5> За този проблем използвайте конвейерната линия Tomasulo MIPS с единичен
проблем от Фигура 3.6 със закъсненията на конвейера от таблицата по-горе. Покажете на
брой цикли на спиране за всяка инструкция и кой тактов цикъл всяка инструкция започва да се
изпълнява (т.е. влиза в своя първи EX цикъл) за три итерации на
цикъл. Колко цикъла отнема всяка итерация на цикъл? Докладвайте отговора си в
формата на таблица със следните заглавия на колони:
Инструкция
Покажете три повторения на цикъла във вашата таблица. Можете да пренебрегнете първото
инструкция.
b. [20] <3.7, 3.8> Повторете част (a), но този път приемете Tomasulo от два броя
3.16 [10] <3.4> Алгоритъмът на Tomasulo има недостатък: Само един резултат може да се изчисли на часовник на CDB.
където алгоритъмът на Tomasulo трябва да спре поради спор за CDB. Посочете къде
3.17 [20] <3.3> (m,n) корелиращ предиктор на разклонения използва поведението на най-много
значително повече памет за запазване на историята и по този начин са ограничени до проследяване на относително
малък брой инструкции за клонове. За това упражнение помислете за (1,2) корелиращ предиктор, който
предиктор, който може да проследява два клона, използвайки едно и също количество памет. За
степен на погрешно прогнозиране на всеки предиктор. Да приемем, че всички клонове до тази точка
Корелиращ предиктор
2 1 T NT
3 1 NT T
42 Т T
5 2 NT T
Локален предсказател
454 T
543 NT
777 NT
543 NT
777 NT
454 T
777 NT
454 T
543 T
3.18 [10] <3.9> Да предположим, че имаме дълбоко конвейеризиран процесор, за който внедряваме
целеви буфер само за условните разклонения. Да приемем, че
наказанието за погрешно предвиждане винаги е четири цикъла, а наказанието за пропуск на буфера е винаги
три цикъла. Приемете 90% процент на попадение, 90% точност и 15% честота на разклонения.
Колко по-бърз е процесорът с целевия буфер в сравнение с процесора
който има фиксирано наказание за разклоняване на два цикъла? Да приемем основен тактов цикъл за
инструкция (CPI) без забавяне на разклонения от един.
3.19 [10/5] <3.9> Помислете за целеви буфер за разклонения, който има наказания от нула, две и
два тактови цикъла за правилна условна прогноза за разклоняване, неправилна прогноза,
и буферна грешка, съответно. Помислете за дизайн на буферен буфер за разклонение, който
разграничава условни и безусловни разклонения, съхранявайки целевия адрес за
условно разклоняване и целевата инструкция за безусловно разклоняване.
4
Паралелизъм на ниво данни в
Ако орете нива, кое бихте предпочели: два силни вола или 1024 кокошки?
262 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
4.1 Въведение
които бяха последвани от няколко версии на SSE (поточно предаване на SIMD разширения).
следващото десетилетие и те продължават и до днес с AVX (Advanced Vector
Разширения). За да получите най-високата скорост на изчисление от x86 компютър, вие често
трябва да използвате тези SIMD инструкции, особено за програми с плаваща запетая.
Третият вариант на SIMD идва от общността на GPU, предлагайки
по-висока потенциална производителност, отколкото при традиционните многоядрени компютри
днес. Докато графичните процесори споделят функции с векторни архитектури, те имат свои собствени
отличителни характеристики, отчасти дължащи се на екосистемата, в която са се развили.
Тази среда има системен процесор и системна памет в допълнение към
GPU и неговата графична памет. Всъщност, за да разпознае тези различия, GPU
общността нарича този тип архитектура хетерогенна.
1
Тази глава се основава на материал в Приложение F, „Векторни процесори“, от Крсте Асанович, и Приложение G, „Хардуер
и софтуер за VLIW и EPIC” от 4-то издание на тази книга; върху материал в Приложение А, „Графични и компютърни графични
процесори“, от Джон Никълс и Дейвид Кърк, от 4-то издание на Компютърна организация и дизайн; и на а
по-малка степен върху материала в „Вземане и разширяване на архитектурите на набор от инструкции от 20-ти век“, от Джо Гебис и
Дейвид Патерсън, IEEE Computer, април 2007 г.
Machine Translated by Google
1000
MIMD*SIMD (32 b)
MIMD*SIMD (64 b)
SIMD (32 b)
SIMD (64 b)
MIMD
100
аотркоасП
лре
онелонанаилвцеян п
у
10
1
2003 г 2007 г 2011 г 2015 г 2019 г 2023 г
Фигура 4.1 Потенциално ускоряване чрез паралелизъм от MIMD, SIMD и двете MIMD и
SIMD във времето за x86 компютри. Тази цифра предполага, че две ядра на чип за
MIMD ще се добавя на всеки две години и броят на операциите за SIMD ще се удвои
на всеки четири години.
264 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
предметът.
Джим Смит
и след това разпръснете резултатите обратно в паметта. Действа една единствена инструкция
вектори на данни, което води до десетки операции регистър–регистър върху независими елементи от данни.
Тези големи регистрови файлове действат като буфери, контролирани от компилатора, и двете за скриване
латентност на паметта и за използване на честотната лента на паметта. Тъй като векторните натоварвания и
магазините са дълбоко конвейеризирани, програмата плаща дългото забавяне на паметта само веднъж
на векторно зареждане или съхраняване спрямо веднъж на елемент, като по този начин се амортизира латентността
VMIPS
Започваме с векторен процесор, състоящ се от основните компоненти, които
логическо векторно разширение на MIPS. Останалата част от този подраздел разглежда как
следното:
вектор. VMIPS има осем векторни регистъра и всеки векторен регистър съдържа 64 елемента, всеки с
за захранване на всички векторни функционални единици. Тези портове ще позволят висока степен на
са свързани портове за запис, които общо най-малко 16 порта за четене и 8 порта за запис
превключватели. Векторни функционални единици—всяка единица е напълно конвейерна и може да започне нова
достъпи. Фигура 4.2 показва, че VMIPS има пет функционални единици. За простота ние се фокусираме
Главна памет
Векторно FP добавяне/изваждане
зареждане/съхранение
FP умножение
FP разделение
Векторни
Цяло число
регистри
Логично
Скаларни
регистри
Фигура 4.2 Основната структура на векторна архитектура, VMIPS. Този процесор има скаларна
архитектура точно като MIPS. Има и осем 64-елементни векторни регистъра и всички
функционални единици са векторни функционални единици. Тази глава дефинира специални
векторни инструкции за достъп както до аритметика, така и до памет. Фигурата показва векторни
единици за логически и цели операции, така че VMIPS изглежда като стандартен векторен
процесор, който обикновено включва тези единици; обаче няма да обсъждаме тези единици.
Векторните и скаларните регистри имат значителен брой портове за четене и запис, за да
позволят множество едновременни векторни операции. Набор от кръстосани превключватели
(дебели сиви линии) свързва тези портове към входовете и изходите на векторните функционални единици
Набор от скаларни регистри—Скаларните регистри могат също така да осигурят данни като вход към
векторните функционални единици, както и изчислителни адреси за предаване към векторната
единица за зареждане/съхранение. Това са нормалните 32 регистъра с общо предназначение и 32
регистъра с плаваща запетая на MIPS. Един вход на векторните функционални единици заключва
скаларни стойности, докато те се четат от файла на скаларния регистър.
Machine Translated by Google
266 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
ADDVV.D V1,V2,V3 Добавете елементи от V2 и V3, след което поставете всеки резултат във V1.
ADDVS.D V1,V2,F0 Добавете F0 към всеки елемент от V2, след което поставете всеки резултат във V1.
СУБВВ.Д V1,V2,V3 Извадете елементи от V3 от V2, след което поставете всеки резултат във V1.
ПОДП.С.Д V1,V2,F0 Извадете F0 от елементите на V2, след което поставете всеки резултат във V1.
СУБСВ.Д V1,F0,V2 Извадете елементи от V2 от F0, след което поставете всеки резултат във V1.
МУЛВВ.Д V1,V2,V3 Умножете елементи от V2 и V3, след което поставете всеки резултат във V1.
MULVS.D V1,V2,F0 Умножете всеки елемент от V2 по F0, след което поставете всеки резултат във V1.
DIVVV.D V1,V2,V3 Разделете елементи от V2 на V3, след което поставете всеки резултат във V1.
ДИВВС.Д V1,V2,F0 Разделете елементи от V2 на F0, след което поставете всеки резултат във V1.
ДИВСВ.Д V1,F0,V2 Разделете F0 на елементи от V2, след което поставете всеки резултат във V1.
LVI V1, (R1+V2) Заредете V1 с вектор, чиито елементи са в R1 + V2(i) (т.е. V2 е индекс).
SVI (R1+V2),V1 Съхранявайте V1 във вектор, чиито елементи са в R1 + V2(i) (т.е. V2 е индекс).
CVI V1,R1 Създайте индексен вектор, като съхраните стойностите 0, 1 × R1, 2 × R1,...,63 × R1 във V1.
S--VV.D V1,V2 Сравнете елементите (EQ, NE, GT, LT, GE, LE) във V1 и V2. Ако условието е вярно, поставете 1 в
S--VS.D V1,F0 съответния битов вектор; в противен случай поставете 0. Поставете получения битов вектор в
регистъра на векторната маска (VM). Инструкцията S--VS.D извършва същото сравнение, но използва
скаларна стойност като един операнд.
POP R1,VM Пребройте 1s във VM регистър на векторна маска и запазете броя в R1.
Фигура 4.3 Векторните инструкции на VMIPS, показващи само операциите с плаваща запетая с двойна точност. в
в допълнение към векторните регистри, има два специални регистъра, VLR и VM, обсъдени по-долу. Тези специални регистри
се предполага, че живеят в пространството на MIPS копроцесор 1 заедно с FPU регистрите. Операциите с крачка и
употребите на създаването на индекс и операциите за индексирано зареждане/съхранение са обяснени по-късно.
Фигура 4.3 изброява векторните инструкции на VMIPS. Във VMIPS, векторни операции
използвайте същите имена като скаларните MIPS инструкции, но с буквите „VV“
векторните инструкции приемат като вход или двойка векторни регистри (ADDVV.D)
(ADDVS.D). В последния случай всички операции използват една и съща стойност в скаларния регистър като
към всеки елемент във векторен регистър. Векторната функционална единица получава копие на
скаларна стойност към момента на издаване. Повечето векторни операции имат векторен дестинационен
регистър, въпреки че някои (като броя на населението) произвеждат скаларна стойност, която е
елементи и дори 512 8-битови елемента са еднакво валидни изгледи. Такъв хардуер
множествеността е причината векторната архитектура да бъде полезна за мултимедийни приложения,
както и за научни приложения.
Най-добре можем да разберем векторен процесор, като разгледаме векторен цикъл за VMIPS.
Нека вземем типичен векторен проблем, който използваме в този раздел:
Y=a×X+Y
268 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
операции и (3) зависимостите от данни. Като се има предвид дължината на вектора и скоростта на
иницииране, която е скоростта, с която векторна единица консумира нови операнди и произвежда
нови резултати, можем да изчислим времето за една векторна инструкция. Всички съвременни
векторни компютри имат векторни функционални единици с множество паралелни конвейери (или
ленти) , които могат да произведат два или повече резултата на часовников цикъл, но те също могат
да имат някои функционални единици, които не са напълно конвейерни. За простота, нашата
реализация на VMIPS има една лента със скорост на иницииране от един елемент на тактов цикъл за
отделни операции. По този начин времето за изпълнение в тактови цикли за единична векторна
инструкция е приблизително дължината на вектора.
За да опростим обсъждането на векторното изпълнение и векторната производителност, ние
използваме понятието конвой , което е набор от векторни инструкции, които потенциално биха могли
да се изпълняват заедно. Както скоро ще видим, можете да оцените ефективността на част от кода, като
преброите броя на конвоите. Инструкциите в конвой не трябва да съдържат никакви структурни
опасности; ако такива опасности са налице, инструкциите ще трябва да бъдат серийни и инициирани
в различни конвои. За да запазим анализа прост, приемаме, че конвой от инструкции трябва да
завърши изпълнението, преди други инструкции (скаларни или векторни) да могат да започнат
изпълнението.
Може да изглежда, че в допълнение към последователностите на векторни инструкции със
структурни опасности, последователностите с опасности от зависимостта четене след запис също
трябва да бъдат в отделни конвои, но верижното им позволява да бъдат в един и същ конвой.
Верижното свързване позволява векторна операция да започне веднага щом отделните елементи
на нейния векторен операнд източник станат достъпни: Резултатите от първата функционална
единица във веригата се „препращат“ към втората функционална единица. На практика често
прилагаме верижно свързване, като позволяваме на процесора да чете и записва конкретен векторен
регистър едновременно, макар и в различни елементи. Ранните реализации на верижното свързване
работеха точно като препращане в скаларна конвейерна обработка, но това ограничаваше времето на
инструкциите на източника и местоназначението във веригата.
Последните реализации използват гъвкаво верижно свързване, което позволява на векторна
инструкция да се свърже във верига по същество с всяка друга активна векторна инструкция, като се
предполага, че не генерираме структурна опасност. Всички съвременни векторни архитектури
поддържат гъвкаво верижно свързване, което предполагаме в тази глава.
За да превърнем конвоите във време за изпълнение, се нуждаем от времева метрика, за да
оценим времето за конвой. Нарича се звънец, което е просто единицата време, необходимо за
изпълнение на един конвой. По този начин векторна последователност, която се състои от m конвоя,
се изпълнява в m камбанки; за дължина на вектор от n, за VMIPS това е приблизително m × n тактови
цикъла. Приближението на камбанката игнорира някои специфични за процесора допълнителни
разходи, много от които зависят от дължината на вектора. Следователно измерването на времето в
камбанки е по-добро приближение за дълги вектори, отколкото за къси. Ще използваме измерването
на звъненето, а не часовниковите цикли за резултат, за да посочим изрично, че пренебрегваме
определени режийни разходи.
Ако знаем броя на конвоите във векторна последователност, знаем времето за изпълнение в
камбанки. Един източник на режийни разходи, игнорирани при измерване на камбанки, е всяко
ограничение за иницииране на множество векторни инструкции в един тактов цикъл. Ако само една
векторна инструкция може да бъде инициирана в тактов цикъл (реалността в повечето векторни
процесори), броят на звънците ще подцени действителното време за изпълнение на
Machine Translated by Google
270 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Пример Покажете как следната кодова последователност се разполага в конвои, като се приеме, че е единична
копие на всяка векторна функционална единица:
1. ЛВ MULVS.D
2. ЛВ ADDVV.D
3. СВ
Последователността изисква три конвоя. Тъй като последователността отнема три звъна и
има две операции с плаваща запетая за резултат, броят цикли на FLOP
е 1,5 (пренебрегвайки всички проблеми с векторни инструкции). Имайте предвид, че въпреки че ние
позволи на LV и MULVS.D да се изпълняват в първия конвой, повечето векторни
машините ще отнемат два тактови цикъла, за да започнат инструкциите.
Този пример показва, че приближението на звънеца е сравнително точно за
дълги вектори. Например, за 64-елементни вектори, времето в камбанките е 3, така че
последователността ще отнеме около 64 × 3 или 192 тактови цикъла. Разходите за издаване
конвоите в два отделни тактови цикъла биха били малки.
Как векторен процесор може да изпълни един вектор по-бързо от един елемент за тактов цикъл?
Няколко елемента на тактов цикъл подобряват производителността. Как един векторен
процесор обработва програми, при които дължините на вектора не са същите като дължината на
векторния регистър (64 за VMIPS)? Тъй като повечето вектори на приложения не съвпадат с
дължината на вектора на архитектурата, имаме нужда от ефективно решение за този общ случай.
Какво се случва, когато в кода, който трябва да бъде векторизиран, има оператор IF?
Повече код може да векторизира, ако можем ефективно да обработваме условни изрази. Какво
се нуждае един векторен процесор от системата с памет? Без достатъчна честотна лента на паметта
векторното изпълнение може да бъде безполезно.
Как един векторен процесор обработва многомерни матрици? Тази популярна структура от данни
трябва да се векторизира, за да се справят добре векторните архитектури.
Как векторният процесор обработва разредени матрици? Тази популярна структура на данни
ture също трябва да векторизира.
Останалата част от този раздел представя всяка от тези оптимизации на векторната архитектура, а
Приложение G навлиза в по-голяма дълбочина.
272 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Група елементи
(а) б)
Фигура 4.4 Използване на множество функционални единици за подобряване на производителността на единична векторна
инструкция за добавяне, C = A + B. Векторният процесор (a) отляво има един конвейер за добавяне и може да завърши едно
добавяне на цикъл. Векторният процесор (b) вдясно има четири конвейера за добавяне и може да завърши четири добавяния
на цикъл. Елементите в една инструкция за добавяне на вектор се вплитат в четирите конвейера. Наборът от елементи,
които се движат през тръбопроводите заедно, се нарича група елементи. (Възпроизведено с разрешение от Asanovic [1998].)
мерна единица. По този начин преминаването към четири ленти от една лента намалява броя на
часовниците за звънец от 64 на 16. За да бъдат много ленти изгодни, както приложенията, така и
архитектурата трябва да поддържат дълги вектори; в противен случай те ще се изпълнят толкова
бързо, че ще изчерпите честотната лента на инструкциите, изисквайки ILP техники (вижте Глава
3), за да предоставите достатъчно векторни инструкции.
Всяка лента съдържа една част от файла на векторния регистър и един конвейер за
изпълнение от всяка векторна функционална единица. Всяка векторна функционална единица
изпълнява векторни инструкции със скорост на една група елементи на цикъл, използвайки
множество конвейерни линии, по една на лента. Първата лента съдържа първия елемент
(елемент 0) за всички векторни регистри и така първият елемент във всяка векторна инструкция ще има своя източник
Machine Translated by Google
4, 8, . . . 5, 9, . .. 6, 10, . . . 7, 11, . . .
Фигура 4.5 Структура на векторна единица, съдържаща четири ленти. Съхранението на векторния регистър
е разделено между лентите, като всяка лента съдържа всеки четвърти елемент от всеки векторен регистър.
Фигурата показва три векторни функционални единици: FP add, FP multi-ply и load-store единица. Всяка от
векторните аритметични единици съдържа четири конвейера за изпълнение, по един на лента, които
действат съвместно, за да изпълнят една векторна инструкция.
Обърнете внимание, че всяка секция на векторния регистрационен файл трябва да осигури само достатъчно
портове за тръбопроводи, локални спрямо нейната лента. Тази фигура не показва пътя за предоставяне на
скаларния операнд за векторно-скаларни инструкции, но скаларният процесор (или контролният процесор)
излъчва скаларна стойност към всички ленти.
274 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
ниско = 0;
VL = (n % MVL); /*намиране на парче с нечетен размер, използвайки модул op % */
за (j = 0; j <= (n/MVL); j=j+1) { /*външен цикъл*/
for (i = low; i < (low+VL); i=i+1) /*работи за дължина VL*/
Y[i] = a * X[i] + Y[i] ; /*основна операция*/
ниско = ниско + VL; /*начало на следващия вектор*/
VL = MVL; /*нулиране на дължината до максимална дължина на вектора*/
}
Фигура 4.6 Вектор с произволна дължина, обработен с лентово копаене. Всички блокове, но
първите са с дължина MVL, използвайки пълната мощност на векторния процесор. В тази фигура,
използваме променливата m за израза (n % MVL). (Операторът C % е по модул.)
276 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
зависимости може да направи условната инструкция по-бърза, дори ако понякога върши безполезна
работа. По същия начин, векторни инструкции, изпълнявани с векторна маска
все още отнемат същото време за изпълнение, дори за елементите, където маската е нула.
По същия начин, дори и със значителен брой нули в маската, използвайки векторна маска
управлението все още може да бъде значително по-бързо от използването на скаларен режим.
Повечето векторни процесори използват банки памет, които позволяват множество независими
dent достъпи, а не просто преплитане на паметта поради три причини:
2. Повечето векторни процесори поддържат способността да зареждат или съхраняват думи с данни,
които не са последователни. В такива случаи се изисква независимо банково адресиране, а не
взаимно оставяне.
3. Повечето векторни компютри поддържат множество процесори, споделящи една и съща система с
памет, така че всеки процесор ще генерира свой собствен независим поток от адреси.
В комбинация тези характеристики водят до голям брой независими банки памет, както показва
следният пример.
Пример Най-голямата конфигурация на Cray T90 (Cray T932) има 32 процесора, всеки от които може да генерира 4
зареждания и 2 запаметявания на тактов цикъл. Тактовият цикъл на процесора е 2,167 ns, докато
времето за цикъл на SRAM, използвани в системата с памет, е 15 ns. Изчислете минималния брой
банки памет, необходими, за да позволи на всички процесори да работят при пълна честотна лента
на паметта.
Отговор Максималният брой препратки към паметта за всеки цикъл е 192: 32 процесора по 6 препратки на
процесор. Всяка SRAM банка е заета за 15/2,167 = 6,92 тактови цикъла, които закръгляме до 7 тактови
цикъла на процесора. Следователно ние изискваме минимум 192 × 7 = 1344 банки памет!
Cray T932 всъщност има 1024 банки памет, така че ранните модели не можеха да поддържат пълна
честотна лента към всички процесори едновременно. Последващото надграждане на паметта замени
15 ns асинхронните SRAM с конвейерни синхронни SRAM, които намалиха наполовина времето на
цикъла на паметта, като по този начин осигуряват достатъчна честотна лента.
От гледна точка на по-високо ниво, единиците за векторно зареждане/съхранение играят подобна роля на
единиците за предварително извличане в скаларните процесори, тъй като и двете се опитват да осигурят честотна
278 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
матрицата може да не е известна по време на компилиране или - точно като дължината на вектора - може да се промени
начален адрес, може да се впише в регистър с общо предназначение. След това VMIPS инструкцията
LVWS (зареждане на вектор със стъпка) извлича вектора във векторен регистър. По същия начин,
когато съхранявате вектор на крачка без единица, използвайте инструкцията SVWS (вектор за съхраняване
с крачка).
Поддържането на крачки, по-големи от една, усложнява системата за памет. След като ние
въвеждане на крачки без единици, става възможно да се изискват достъпи от същото
банка често. Когато множество достъпи се борят за банка, банка памет
възниква конфликт, като по този начин спира един достъп. Конфликт в банката и оттам застой
ще възникне, ако
Брой банки
-------------------------------------------------- -------------------------------------------------- ---------------------
< Банката е натоварено време
Най-малко общо кратно (крачка, брой банки)
Пример Да предположим, че имаме 8 банки памет с време на заетост на банката от 6 часовника и общо
латентност на паметта от 12 цикъла. Колко време ще отнеме завършването на 64-елемент
векторно натоварване с крачка 1? С крачка 32?
Отговор Тъй като броят на банките е по-голям от времето на заетост на банката, за крачка от 1
натоварването ще отнеме 12 + 64 = 76 тактови цикъла или 1,2 тактови цикъла на елемент. The
най-лошата възможна стъпка е стойност, която е кратна на броя на банките памет,
както в този случай със стъпка от 32 и 8 банки памет. Всеки достъп до паметта
(след първия) ще се сблъска с предишния достъп и ще трябва да изчака
времето за заетост на банката с 6 часовникови цикъла. Общото време ще бъде 12 + 1 + 6 * 63 = 391
тактови цикли или 6,1 тактови цикъла на елемент.
Както бе споменато по-горе, разредените матрици са често срещани, така че е важно да ги има
техники, които позволяват на програми с разредени матрици да се изпълняват във векторен режим. в
разредена матрица, елементите на вектор обикновено се съхраняват в някаква компактна
форма и след това се осъществява индиректен достъп. Приемайки опростена рядка структура, ние
може да видите код, който изглежда така:
за (i = 0; i < n; i=i+1)
A[K[i]] = A[K[i]] + C[M[i]];
Този код прилага разредена векторна сума на масивите A и C, използвайки индексни вектори K и M
за обозначаване на ненулевите елементи на A и C. (A и C трябва да имат
същия брой ненулеви елементи - n от тях - така че K и M са с еднакъв размер.)
Основният механизъм за поддържане на редки матрици е събиране-разпръскване
операции , използващи индексни вектори. Целта на такива операции е да се подпомогне движението
между компресирано представяне (т.е. не са включени нули) и нормално
представяне (т.е. нулите са включени) на разредена матрица. Събирателна операция _
Machine Translated by Google
280 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
даден чрез добавяне на базов адрес към отместванията, дадени във вектора на индекса. Резултатът
е плътен вектор във векторен регистър. След като тези елементи се оперират в
плътна форма, редкият вектор може да се съхранява в разширена форма чрез разпръснато хранилище,
използвайки същия индексен вектор. Хардуерната поддръжка за такива операции се нарича
gather-scatter и се появява на почти всички съвременни векторни процесори. VMIPS
инструкциите са LVI (зареждане на вектор, индексиран или събиран) и SVI (запаметен вектор, индексиран
или разпръснати). Например, ако Ra, Rc, Rk и Rm съдържат началните адреси на
вектори в предишната последователност, можем да кодираме вътрешния цикъл с векторни инструкции
като:
LV Vk, Rk ;зареди
LVI Va, (Ra+Vk) K ;зареди A[K[]]
LV Vm, Rm ;зареди М
LVI Vc, (Rc+Vm) ;зареди C[M[]]
ADDVV.D Va, Va, Vc ;добавете ги
SVI (Ra+Vk), Va ;съхранение A[K[]]
Тази техника позволява код с разредени матрици да се изпълнява във векторен режим. А
простият векторизиращ компилатор не може автоматично да векторизира изходния код
по-горе, защото компилаторът няма да знае, че елементите на K са различни
стойности и по този начин не съществуват зависимости. Вместо това директива за програмист
ще каже на компилатора, че е безопасно да стартира цикъла във векторен режим.
Въпреки че индексираните зареждания и съхранявания (събиране и разпръскване) могат да бъдат тръбопроводни, те
Както ще видим в раздел 4.4, всички зареждания са сборове и всички съхранявания са разпръснати
в GPU. За да избегнете бавното бягане в честия случай на единични крачки, е до
програмистът на GPU, за да гарантира, че всички адреси в събиране или разпръскване са към
съседни местоположения. Освен това хардуерът на GPU трябва да разпознае последователността
от тези адреси по време на изпълнение, за да превърне събиранията и разпръскванията в повече
ефективен достъп до паметта на единица.
експерти в други области, за да научат как да подобрят ефективността, като преразгледат своите
код или чрез даване на съвети на компилатора кога е добре да се приеме независимост
между операциите, като например за събиране-разпръскване на данни. Това е този диалог
между компилатора и програмиста, като всяка страна дава съвети за
други за това как да се подобри производителността, което опростява програмирането на вектор
компютри.
Днес основният фактор, който влияе върху успеха, с който се изпълнява една програма
векторният режим е структурата на самата програма: циклите имат ли верни данни
зависимости (вижте раздел 4.5), или могат да бъдат преструктурирани така, че да нямат такива
зависимости? Този фактор се влияе от избраните алгоритми и някои
степен, от това как са кодирани.
Като индикация за нивото на векторизация, постижимо в научните програми, нека да
разгледаме нивата на векторизация, наблюдавани за бенчмарковете на Perfect Club. Фигура 4.7
показва процента на операциите, изпълнени във векторен режим за
две версии на кода, работещ на Cray Y-MP. Първата версия е такава
получен само с оптимизация на компилатора върху оригиналния код, докато вторият
версията използва обширни съвети от екип от програмисти на Cray Research. Няколко
проучванията на производителността на приложенията върху векторни процесори показват голямо
разнообразие в нивото на векторизация на компилатора.
282 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Събиране/изваждане без знак Тридесет и два 8-битови, шестнадесет 16-битови, осем 32-битови или четири 64-битови
Максимум/минимум Тридесет и два 8-битови, шестнадесет 16-битови, осем 32-битови или четири 64-битови
Средно аритметично Тридесет и два 8-битови, шестнадесет 16-битови, осем 32-битови или четири 64-битови
Преместване надясно/наляво Тридесет и два 8-битови, шестнадесет 16-битови, осем 32-битови или четири 64-битови
Плаваща запетая Шестнадесет 16-битови, осем 32-битови, четири 64-битови или две 128-битови
Фигура 4.8 Обобщение на типичната SIMD мултимедийна поддръжка за 256-битови операции. Имайте предвид, че стандартът IEEE
Тези пропуски правят по-трудно за компилатора генерирането на SIMD код и увеличават трудността на
програмирането на асемблерния език на SIMD.
За x86 архитектурата инструкциите MMX, добавени през 1996 г., пренасочиха 64-битовите регистри
с плаваща запетая, така че основните инструкции можеха да изпълняват осем 8-битови операции или
четири 16-битови операции едновременно. Към тях се присъединиха паралелни MAX и MIN операции,
голямо разнообразие от маскиращи и условни инструкции, операции, които обикновено се срещат в
цифрови сигнални процесори, и ad hoc инструкции, за които се смяташе, че са полезни във важни
медийни библиотеки. Имайте предвид, че MMX повторно използва инструкциите за прехвърляне на
данни с плаваща запетая за достъп
памет.
Наследникът на Streaming SIMD Extensions (SSE) през 1999 г. добави отделни регистри с ширина 128
бита, така че сега инструкциите могат едновременно да изпълняват шестнадесет 8-битови операции,
осем 16-битови операции или четири 32-битови операции. Той също така извършва паралелна
аритметика с плаваща запетая с единична точност. Тъй като SSE имаше отделни регистри, имаше нужда
от отделни инструкции за прехвърляне на данни. Intel скоро добави SIMD типове данни с плаваща
запетая с двойна точност чрез SSE2 през 2001 г., SSE3 през 2004 г. и SSE4 през 2007 г. Инструкциите с
четири операции с плаваща запетая с единична точност или две паралелни операции с двойна точност
увеличиха пиковия плаващ производителност на x86 компютрите, стига програмистите да поставят
операндите един до друг. С всяко поколение те добавят и ad hoc инструкции, чиято цел е да ускорят
специфични мултимедийни функции, които се възприемат като важни.
Разширените векторни разширения (AVX), добавени през 2010 г., удвояват ширината на регистрите
отново до 256 бита и по този начин предлагат инструкции, които удвояват броя на операциите върху
всички по-тесни типове данни. Фигура 4.9 показва AVX инструкции, полезни за изчисления с плаваща
запетая с двойна точност. AVX включва подготовка за разширяване на ширината до 512 бита и 1024
бита в бъдещите поколения на архитектурата.
Като цяло, целта на тези разширения е да ускорят внимателно написаните библиотеки, вместо
компилаторът да ги генерира (вижте Приложение H), но последните x86 компилатори се опитват да
генерират такъв код, особено за приложения с интензивно използване на плаваща запетая .
Предвид тези слабости, защо мултимедийните SIMD разширения са толкова популярни? Първо,
те струват малко за добавяне към стандартната аритметична единица и са лесни за прилагане. Второ,
те изискват малко допълнително състояние в сравнение с векторните архитектури, което винаги е
проблем за времето за превключване на контекста. Трето, имате нужда от голяма честотна лента на
паметта, за да поддържате векторна архитектура, която много компютри нямат. Четвърто, SIMD не
трябва да се справя с проблеми в
Machine Translated by Google
284 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
VCMPxx Сравнете четири опаковани операнда с двойна точност за EQ, NEQ, LT, LE, GT, GE, ...
VBROADCASTSD Излъчване на един операнд с двойна точност до четири местоположения в 256-битов регистър
Фигура 4.9 AVX инструкции за x86 архитектура, полезни в програми с плаваща запетая с двойна точност. Packed-double за 256-битов AVX означава четири 64-
битови операнда, изпълнени в SIMD режим. Тъй като ширината се увеличава с AVX, това е така
все по-важно е да се добавят инструкции за пермутация на данни, които позволяват комбинации от тесни операнди от различни части на широките регистри.
AVX включва инструкции, които разбъркват 32-битови, 64-битови или 128-битови операнди в рамките на
256-битов регистър. Например BROADCAST репликира 64-битов операнд 4 пъти в AVX регистър. AVX включва също a
Пример За да дадем представа как изглеждат мултимедийните инструкции, приемете, че сме добавили
256-битови SIMD мултимедийни инструкции към MIPS. Ние се концентрираме върху плаваща
запетая в този пример. Добавяме суфикса „4D“ към инструкциите, които работят
четири операнда с двойна точност наведнъж. Подобно на векторните архитектури, можете
мислете за SIMD процесор като за ленти, четири в този случай. MIPS SIMD ще
повторно използване на регистрите с плаваща запетая като операнди за 4D инструкции, точно
както двойна точност използва повторно регистри с единична точност в оригиналния MIPS. Този пример
показва MIPS SIMD код за DAXPY цикъла. Да приемем, че началните адреси
на X и Y са съответно в Rx и Ry. Подчертайте промените в MIPS
код за SIMD.
Machine Translated by Google
286 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
О(1) НА)
O(log(N))
Ритметична интензивност
Спектрален
Разредени Плътен
методи N-тяло
матрица матрица
(FFT) (Частица
(SpMV) (BLAS3)
методи)
Структуриран Структуриран
решетки решетки
(Шаблони, (Решетка
PDE) методи)
Фигура 4.10 Аритметичен интензитет, определен като броя на операциите с плаваща запетая за изпълнение
на програмата, разделен на броя байтове, достъпни в основната памет
[Уилямс и др. 2009]. Някои ядра имат аритметичен интензитет, който се мащабира с размера на проблема,
като плътна матрица, но има много ядра с аритметичен интензитет
независимо от размера на проблема.
Как можем да начертаем пиковата производителност на паметта? Тъй като оста X е FLOP/
байт и Y-оста е FLOP/сек, байт/сек е просто диагонална линия под 45 градуса
ъгъл на тази фигура. Следователно можем да начертаем трета линия, която дава максимума
производителност с плаваща запетая, която системата с памет на този компютър може да поддържа
Machine Translated by Google
64 64 42,66 GFLOP/сек
162 GB/s (поток)
32 32
реG
Д
пс
реG
Д
пс
Fкв
Fкв
L
L
е
е
цо
цо
иO
иO
й
й
н
н
тсоназ/P
тсоназ/P
16 16
16,4 GB/s (поток)
8 8
4 4
2 2
1/8 1/4 1/2 1 2 4 8 16 1/8 1/4 1/2 1 2 4 8 16
Аритметична интензивност Аритметична интензивност
Фигура 4.11 Модел Roofline за един векторен процесор NEC SX-9 отляво и многоядрения Intel Core i7 920
компютър със SIMD разширения отдясно [Williams et al. 2009]. Тази Roofline е за достъп до паметта с крачка на единица
и производителност с плаваща запетая с двойна точност. NEC SX-9 е векторен суперкомпютър, обявен през 2008 г., който струва
милиони долари. Той има пикова DP FP производителност от 102,4 GFLOP/sec и пикова честотна лента на паметта от 162
GBytes/sec от бенчмарка Stream. Core i7 920 има пикова DP FP производителност от 42,66 GFLOP/sec и
пикова честотна лента на паметта от 16,4 GBytes/sec. Показват се прекъснатите вертикални линии при аритметичен интензитет от 4 FLOP/байт
че и двата процесора работят с максимална производителност. В този случай SX-9 при 102,4 FLOP/сек е 2,4 пъти по-бърз от Core
i7 при 42,66 GFLOP/сек. При аритметичен интензитет от 0,25 FLOP/байт, SX-9 е 10 пъти по-бърз при 40,5 GFLOP/сек спрямо 4,1
GFLOP/сек за Core i7.
Хоризонталните и диагоналните линии дават името на този прост модел и показват неговата стойност.
в зависимост от неговата аритметична интензивност. Ако мислим за аритметичния интензитет като за полюс
който удря покрива, или удря плоската част на покрива, което означава изпълнение
ядрата с много висок аритметичен интензитет могат да постигнат максималната производителност на този
компютър. Ако е много вляво, тогава почти всяко ядро може потенциално да постигне максимална
както много по-висока честотна лента на паметта, така и точка на билото далеч вляво в сравнение с други
SIMD процесори.
2,4 пъти по-бърз от Core i7, но производителността на паметта е 10 пъти по-бърза. За програми
Machine Translated by Google
288 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
с аритметичен интензитет от 0,25, SX-9 е 10 пъти по-бърз (40,5 срещу 4,1 GFLOP/сек). По-
високата честотна лента на паметта премества точката на билото от 2,6 при Core i7 до 0,6 при
SX-9, което означава, че много повече програми могат да достигнат върхова изчислителна
производителност на векторния процесор.
За няколкостотин долара всеки може да си купи GPU със стотици паралелни единици с
плаваща запетая, което прави високопроизводителните изчисления по-достъпни. Интересът
към GPU компютрите процъфтява, когато този потенциал се комбинира с програмен език,
който прави GPU по-лесни за програмиране. Следователно много програмисти на научни и
мултимедийни приложения днес обмислят дали да използват GPU или CPU.
Програмиране на GPU
// Извикване на
DAXPY daxpy(n, 2.0, x, y); //
DAXPY в C void
daxpy(int n, двойно a, двойно *x, двойно *y) {
290 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
По-долу е версията на CUDA. Стартираме n нишки, по една на векторен елемент, с 256 CUDA
нишки на блок нишка в многонишков SIMD процесор. Функцията GPU започва с изчисляване
на съответния индекс на елемент i въз основа на идентификатора на блока, броя на нишките
на блок и идентификатора на нишката. Докато този индекс е в масива (i < n), той изпълнява
умножението и събирането.
се случва често при паралелно изчисление. Ще бъде интересно да видим как езикът се развива в
тази класическа битка между производителност и производителност, както и дали CUDA ще стане
популярна за други графични процесори или дори за други архитектурни стилове.
Подобно на векторните архитектури, GPU работят добре само с паралелни проблеми на ниво
данни. И двата стила имат трансфери на събиране-разпръскване на данни и маскиращи регистри, а
GPU процесорите имат дори повече регистри, отколкото векторните процесори. Тъй като нямат
близък скаларен процесор, графичните процесори понякога прилагат функция по време на
изпълнение в хардуера, която векторните компютри прилагат по време на компилатор в софтуера.
За разлика от повечето векторни архитектури, графичните процесори също разчитат на
многопоточност в рамките на един многонишков SIMD процесор, за да скрият латентността на
паметта (вижте глави 2 и 3). Въпреки това, ефективният код както за векторни архитектури, така и за
графични процесори изисква програмистите да мислят в групи от SIMD операции.
Grid е кодът, който се изпълнява на GPU, който се състои от набор от блокове на нишки.
Фигура 4.12 прави аналогията между решетка и векторизиран цикъл и между блок на нишка и тялото
на този цикъл (след като е бил стрип-миниран, така че да е пълен изчислителен цикъл). За да дадем
конкретен пример, нека предположим, че искаме да умножим два вектора заедно, всеки с дължина
8192 елемента. Ще се върнем към този пример в този раздел. Фигура 4.13 показва връзката между
този пример и първите два термина на GPU. Кодът на графичния процесор, който работи върху
цялото умножение на елементи 8192, се нарича Grid (или векторизиран цикъл). За да се раздели на
по-управляеми размери, мрежата е съставена от блокове с нишки (или тяло на векторизиран цикъл),
всеки с до 512 елемента. Имайте предвид, че SIMD инструкция изпълнява 32 елемента наведнъж. С
8192 елемента във векторите, този пример има 16 блока от нишки, тъй като 16 = 8192 ÷ 512. Решетката
и блокът от нишки
Machine Translated by Google
292 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Тип име термин извън GPU NVIDIA GPU термин Дефиниция на книгата
С възможност за векторизиране
Векторизируема контурна мрежа Векторизиран цикъл, изпълняван на графичния процесор,
Цикъл съставен от един или повече блокове от нишки (тела на
векторизиран цикъл), които могат да се изпълняват паралелно.
Последователност на Една итерация на Нишка CUDA Вертикален разрез на нишка от SIMD инструкции,
SIMD Lane скаларен цикъл съответстваща на един елемент, изпълнен от една SIMD
Операции лента. Резултатът се съхранява в зависимост от маската
и предикатен регистър.
Нишка от Нишка на вектор Деформация Традиционна нишка, но съдържа само SIMD инструкции,
SIMD Инструкции които се изпълняват на многонишков SIMD процесор.
Инструкции
кеабМ
о
елемент.
SIMD Векторна инструкция PTX инструкция Единична SIMD инструкция, изпълнена през SIMD линии.
Инструкция
Блокиране на нишка Скаларен процесор Giga Thread Присвоява множество нишкови блокове (тела на
Планировчик Двигател векторизиран цикъл) на многонишкови SIMD
процесори.
SIMD нишка Планировчик на Warp Scheduler Хардуерен модул, който планира и издава нишки от SIMD
щавтроебуадррбаО
х
SIMD Lane Вектор Лейн Процесор на нишки SIMD лента изпълнява операциите в нишка от SIMD инструкции върху
един елемент. Резултатите се съхраняват в зависимост от
маската.
GPU памет Основна памет Глобална памет DRAM памет, достъпна от всички многонишкови SIMD
процесори в GPU.
Частно Подреждане или нишка Локална памет Част от DRAM паметта е частна за всяка SIMD лента.
памет Локално хранилище (ОС)
рап
анретуедм Х
Локална памет Локална памет Споделена памет Бърза локална SRAM за един многонишков SIMD процесор,
недостъпна за други SIMD процесори.
SIMD Lane Вектор Лейн Процесор на нишки Регистрира се в една SIMD лента, разпределена в цял блок на
Регистри Регистри Регистри нишка (тяло на векторизиран цикъл).
Фигура 4.12 Бързо ръководство за GPU термините, използвани в тази глава. Използваме първата колона за хардуерни термини. Четири
групи групират тези 11 термина. Отгоре надолу: абстракции на програмата, машинни обекти, хардуер за обработка,
и хардуер за памет. Фигура 4.21 на страница 309 свързва векторни термини с най-близките термини тук, а Фигура 4.24
на страница 313 и Фигура 4.25 на страница 314 разкриват официалните термини и дефиниции на CUDA/NVIDIA и AMD заедно с
термините, използвани от OpenCL.
Machine Translated by Google
A[ 0 ] = B [ 0 ] * C [ 0 ]
SIMD А[ 1]=B[1 ] * C[ 1 ]
Нишка0 … … … … ………
A[ 31 ] = B [ 31 ] * C [ 31 ]
A[ 32 ] = B [ 32 ] * C [ 32 ]
SIMD A[ 33 ] = B [ 33 ] * C [ 33 ]
Нишка1 … … … … ………
Нишка
Блок 0 A[ 63 ] = B [ 63 ] * C [ 63 ]
A[ 64 ] = B [ 64 ] * C [ 64 ]
… … … … ………
Фигура 4.13 Картографирането на Grid (векторизиран цикъл), блокове на нишки (основни блокове на SIMD) и нишки на SIMD
инструкции за умножение на вектор-вектор, като всеки вектор е дълъг 8192 елемента. Всяка нишка от SIMD инструкции
изчислява 32 елемента на инструкция и в този пример всеки Thread Block съдържа 16 нишки от SIMD
инструкции и решетката съдържа 16 блока с нишки. Хардуерният Thread Block Scheduler присвоява Thread Blocks на
многонишкови SIMD процесори и хардуерният Thread Scheduler избира коя нишка от SIMD инструкции да се изпълнява
всеки тактов цикъл в SIMD процесор. Само SIMD нишките в един и същ блок с нишки могат да комуникират чрез локално
памет. (Максималният брой SIMD нишки, които могат да се изпълняват едновременно на блок нишка, е 16 за графични процесори
от поколение Tesla и 32 за графични процесори от поколение Fermi.)
Machine Translated by Google
294 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Регистър на инструкциите
SIMD ленти
(Нишка
процесори)
Рег Рег Рег Рег Рег Рег Рег Рег Рег Рег Рег Рег Рег Рег Рег
Регистри
1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32 1K × 32
Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете Заредете
складова складова складова складова складова складова складова складова складова складова складова складова складова складова складова складова
единица единица единица единица единица единица единица единица единица единица единица единица единица единица единица единица
Към Глобал
Локална памет
памет
64 KB
Фигура 4.14 Опростена блокова диаграма на многонишков SIMD процесор. Има 16 SIMD ленти. SIMD Thread
Scheduler има, да речем, 48 независими нишки от SIMD инструкции, които планира с таблица от 48 компютъра.
DRAM
4.4 Графични процесори 295
DRAM
MARD
DRAM
ои
сйефреттсн Х
L2 кеш памет
DRAM
daerhTagiG
MARD
Фигура 4.15 Етажен план на Fermi GTX 480 GPU. Тази диаграма показва 16 многонишкови SIMD процесора.
Планировчикът за блокиране на нишки е маркиран вляво. The
GTX 480 има 6 GDDR5 порта, всеки с ширина 64 бита, поддържащи до 6 GB капацитет. The
Интерфейсът на хоста е PCI Express 2.0 x 16. Giga Thread е името на планировчика, който
разпределя блокове от нишки към мултипроцесори, всеки от които има своя собствена SIMD нишка
Планировчик.
вместо няколко, които са дълбоко конвейерни, както прави векторният процесор. В примера
за програмиране на Фигура 4.13 всеки многонишков SIMD процесор е присвоен
512 елемента от векторите за работа. SIMD процесорите са пълни процесори с
отделни компютри и се програмират с помощта на нишки (вижте Глава 3).
След това хардуерът на GPU съдържа колекция от многонишкови SIMD процесори, които
296 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
SIMD инструкциите на тези нишки са широки 32, така че всяка нишка от SIMD
инструкции в този пример ще изчисли 32 от елементите на изчислението. В този
пример Thread Blocks ще съдържат 512/32 = 16 SIMD нишки (вижте Фигура 4.13).
Тъй като нишката се състои от SIMD инструкции, SIMD процесорът трябва да има
паралелни функционални единици, за да изпълни операцията. Ние ги наричаме SIMD
ленти и те са доста подобни на векторните ленти в раздел 4.2.
Броят на лентите на SIMD процесор варира в зависимост от поколенията на GPU. С
Fermi всяка 32-широка нишка от SIMD инструкции се нанася на 16 физически SIMD
ленти, така че всяка SIMD инструкция в нишка от SIMD инструкции отнема два тактови
цикъла, за да завърши. Всяка нишка от SIMD инструкции се изпълнява в стъпка на
заключване и се планира само в началото. Оставайки с аналогията на SIMD процесор
като векторен процесор, можете да кажете, че той има 16 ленти, дължината на вектора
ще бъде 32, а звънецът е 2 тактови цикъла. (Тази широка, но плитка природа е причината
да използваме термина SIMD процесор вместо векторен процесор, тъй като е по-описателен.)
Тъй като по дефиниция нишките на SIMD инструкциите са независими, SIMD Thread
Scheduler може да избере коя нишка от SIMD инструкции е готова и не е необходимо да
се придържа към следващата SIMD инструкция в последователността в нишката. SIMD
Thread Scheduler включва таблица с резултати (вижте глава 3), за да следите до 48 нишки
от SIMD инструкции, за да видите коя SIMD инструкция е готова за работа. Това табло е
необходимо, тъй като инструкциите за достъп до паметта могат да отнемат
непредсказуем брой тактови цикли поради конфликти в банка памет, например. Фигура
4.16 показва SIMD Thread Scheduler, избиращ нишки от SIMD инструкции в различен ред
във времето. Предположението на GPU архитектите е, че GPU приложенията имат
толкова много нишки от SIMD инструкции, че многонишковостта може както да скрие
латентността към DRAM, така и да увеличи използването на многонишкови SIMD
процесори. Въпреки това, за да хеджират техните залози, скорошният NVIDIA Fermi GPU
включва L2 кеш (вижте раздел 4.7).
Продължавайки нашия пример за векторно умножение, всеки многонишков SIMD
процесор трябва да зареди 32 елемента от два вектора от паметта в регистри, да
извърши умножението чрез четене и запис на регистри и да съхрани продукта обратно
от регистрите в паметта. За да поддържа тези елементи на паметта, SIMD процесорът
има впечатляващите 32 768 32-битови регистъра. Точно като векторен процесор, тези
регистри са разделени логически между векторните ленти или, в този случай, SIMD
ленти. Всяка SIMD нишка е ограничена до не повече от 64 регистъра, така че може да помислите за SIMD
Machine Translated by Google
:аек
ръкй нШ
днуиуж
имм Д
С
Планировчик на SIMD нишки
време
Нишката има до 64 векторни регистъра, като всеки векторен регистър има 32 елемента и
всеки елемент е с ширина 32 бита. (Тъй като операндите с плаваща запетая с двойна точност
използват два съседни 32-битови регистъра, алтернативен изглед е, че всяка SIMD нишка
има 32 векторни регистъра от 32 елемента, всеки от които е с ширина 64 бита.)
Тъй като Fermi има 16 физически SIMD линии, всяка съдържа 2048 регистъра.
(Вместо да се опитват да проектират хардуерни регистри с много портове за четене и портове
за запис на бит, графичните процесори ще използват по-прости структури на паметта, но ще
ги разделят на банки, за да получат достатъчна честотна лента, точно както правят векторните
процесори.) Всяка нишка CUDA получава по един елемент от всяка от векторните регистри.
За да се справят с 32-те елемента на всяка нишка от SIMD инструкции с 16 SIMD ленти,
нишките CUDA на блок нишка могат да използват колективно до половината от 2048 регистъра.
За да можете да изпълнявате много нишки от SIMD инструкции, на всяка от тях
динамично се разпределя набор от физически регистри на всеки SIMD процесор, когато се
създават нишки от SIMD инструкции и се освобождава, когато SIMD нишката излезе.
298 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
opcode.type d, a, b, c;
Цяло число без знак 8, 16, 32 и 64 бита .u8, .u16, .u32, .u64
Цяло число със знак 8, 16, 32 и 64 бита .s8, .s16, .s32, .s64
Операндите източник са 32-битови или 64-битови регистри или постоянна стойност. Дестинации
са регистри, с изключение на инструкциите на магазина.
Фигура 4.17 показва основния набор от PTX инструкции. Всички инструкции могат да бъдат
предикатирани от 1-битови предикатни регистри, които могат да бъдат зададени от набор предикат
инструкция (setp). Инструкциите за контролен поток са извикване на функции и
връщане, изход от нишка, разклоняване и синхронизиране на бариери за нишки в a
блок на нишка (bar.sync). Поставяне на предикат пред инструкция за разклоняване
ни дава условни разклонения. Компилаторът или PTX програмистът декларира виртуални
регистри като 32-битови или 64-битови въведени или нетипизирани стойности. Например R0,
R1, ... са за 32-битови стойности, а RD0, RD1, ... са за 64-битови регистри. Припомням си
че присвояването на виртуални регистри към физически регистри става по време на зареждане
с PTX.
Machine Translated by Google
подтип d = a – b; d, a, b mul.f32 d, a, b
абс.тип d, a, b max.f32 d,
Аритметика
отр.тип a, b setp.lt.f32 p, d = 0 - а;
числови .cmp = eq, ne, lt, le, gt, ge; неподреден cmp = equ, neu, ltu, leu, gtu, geu, num, nan
or.type not.b32 d, a, b d = a | b;
xor.type cnot.b32 d, a, b d = a ^ b;
Логично
не.тип shl.type shl.b32 d , a, d = ~a; d едно допълнение
atom.op = and, or, xor, add, min, max, exch, cas; .spc = .глобален; .тип = .b32
клон @p bra target call if (p) goto target; ret = условен клон
обадете се
(ret), func, (params) функция (параметри); функция за повикване
контрол
ret ret връщане; връщане от извикване на функция
Поток
bar.sync bar.sync d изчакайте теми бариерна синхронизация
изход изход изход; прекратете изпълнението на нишка
300 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
shl.u32 R8, blockIdx, 9 add.u32 R8, ; ID на блока на нишката * Размер на блока (512 или 29 )
R8, threadIdx; R8 = i = моят ID на CUDA нишка
shl.u32 R8, R8, 3; байт отместване
ld.global.f64 RD0, [X+R8] ; RD0 = X[i] ld.global.f64 RD2,
[Y+R8] ; RD2 = Y[i] mul.f64 RD0, RD0, RD4; Продукт в RD0
= RD0 * RD4 (скалар a)
add.f64 RD0, RD0, RD2; Сума в RD0 = RD0 + RD2 (Y[i])
st.global.f64 [Y+R8], RD0; Y[i] = сума (X[i]*a + Y[i])
Както беше показано по-горе, програмният модел CUDA присвоява един CUDA
Нишка към всяка итерация на цикъл и предлага уникален идентификационен номер на всяка нишка
блок (blockIdx) и един към всяка CUDA нишка в рамките на блок (threadIdx).
По този начин той създава 8192 нишки CUDA и използва уникалния номер за адресиране на всяка
елемент в масива, така че няма код за увеличаване или разклоняване. Първите три
PTX инструкциите изчисляват този уникален байт отместване на елемент в R8, който се добавя
към основата на масивите. Следните PTX инструкции зареждат два операнда с плаваща запетая с
двойна точност, умножават ги и ги събират и съхраняват сумата. (Добре
опишете PTX кода, съответстващ на CUDA кода „ако (i < n)“ по-долу.)
Имайте предвид, че за разлика от векторните архитектури, графичните процесори нямат отделни инструкции
(единични) трансфери на данни, графичните процесори включват специален хардуер за обединяване на адреси
за разпознаване кога SIMD лентите в нишка от SIMD инструкции колективно издават последователни
адреси. Този хардуер по време на изпълнение след това уведомява
Интерфейсен модул на паметта, за да поиска блоково прехвърляне на 32 последователни думи. За да получите
индексиран скок, повикване, индексирано повикване, връщане, изход и специални инструкции, които управляват
със собствен стек; запис в стека съдържа токен за идентификатор, целева инструкция
адрес и активна маска на целевата нишка. Има специални инструкции за GPU, които
маркери, които изваждат запис в стека или отвиват стека до определен запис и разклонение
към адреса на целевата инструкция с активната маска на целевата нишка. Инструкциите за хардуер на
израз, кодиран с инструкции за разклоняване на PTX към само предсказуеми инструкции за GPU, без никакви
влизане, когато някои платна се разклоняват към целевия адрес, докато други пропадат.
NVIDIA казва, че клонът се разминава, когато това се случи. Използва се и тази смес
когато SIMD Lane изпълнява маркер за синхронизация или конвергира, което изскача
запис в стека и разклонения към адреса на входа в стека с активната маска на нишката за вход в стека.
инструкции, които се разклоняват към върха на цикъла, заедно със специални инструкции за стек за
SIMD ленти, когато всички ленти са завършили цикъла. GPU индексиран скок и
индексираните инструкции за повикване натискат записи в стека, така че когато всички ленти завършат
Предикатна инструкция за задаване на GPU (setp на фигурата по-горе) оценява условната част на израза
Инструкции за клон на GPU, той използва предикатен регистър за всяка лента, за да активира или деактивира
всяка SIMD лента за всяка инструкция. Инструкциите за SIMD в темите
вътре в частта THEN на операциите за излъчване на оператора IF към всички SIMD
(спрямо оператора THEN), така че SIMD лентите, които са били неактивни, сега работят
операцията и съхраняват резултата, докато техните бивши активни братя и сестри не го правят. В
инструкции за синхронизиране за сложен контролен поток. Имайте предвид, че дълбокото гнездене може
означава, че повечето SIMD линии са неактивни по време на изпълнение на вложени условни команди. По
този начин, двойно вложени IF оператори с равни по дължина пътеки работят с 25% ефективност, тройно
векторен процесор, работещ там, където само няколко от битовете на маската са единици.
Machine Translated by Google
302 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
СЛЕД това пропуска инструкциите в частта ДРУГО. Има подобна оптимизация за частта
THEN в случай, че всички битове на маската са нула, тъй като условната
клон прескача инструкциите THEN. Паралелни IF изрази и PTX
клоновете често използват условия за клонове, които са единодушни (всички ленти са
съгласни да следват един и същ път), така че SIMD нишката да не се разделя на различни
индивидуален поток за управление на лентата. PTX асемблерът оптимизира такива разклонения за пропускане
ако (X[i] != 0)
X[i] = X[i] – Y[i];
иначе X[i] = Z[i];
същото за всички ленти, така че всички битове на активната маска да са нули или всички да са единици—
Тази гъвкавост също помага да се обясни името CUDA нишка , дадено на всеки елемент в нишка от
SIMD инструкции, тъй като създава илюзията за независимо действие. Един наивен програмист може да
си помисли, че тази абстракция на нишката означава, че GPU обработват условните разклонения по-
грациозно. Някои нишки вървят в една посока, останалите в друга, което изглежда вярно, стига да не
бързате. Всяка CUDA нишка изпълнява същата инструкция като всяка друга нишка в блока с нишки или е
неактивна.
Тази синхронизация улеснява обработката на цикли с условни разклонения, тъй като възможността за
маска може да изключи SIMD Lanes и автоматично открива края на цикъла.
Векторните компилатори биха могли да правят същите трикове с масковите регистри, както
графичните процесори в хардуера, но това ще включва скаларни инструкции за запазване, допълване и
възстановяване на масковите регистри. Условното изпълнение е случай, при който GPU правят в хардуера
по време на изпълнение това, което правят векторните архитектури по време на компилиране. Една
оптимизация, налична по време на изпълнение за графични процесори, но не и по време на компилиране
за векторни архитектури, е да се пропуснат частите THEN или ELSE, когато битовете на маската са всички
нули или всички единици.
По този начин ефективността, с която графичните процесори изпълняват условни изрази, се свежда
до това колко често клоновете ще се разминават. Например, едно изчисление на собствените стойности
има дълбоко условно влагане, но измерванията на кода показват, че около 82% от проблемите с тактовия
цикъл имат между 29 и 32 от 32-те маскиращи бита, зададени на единица, така че графичните процесори
изпълняват този код по-ефективно отколкото може да се очаква.
Обърнете внимание, че същият механизъм се справя с извличането на векторни цикли - когато броят
на елементите не съответства напълно на хардуера. Примерът в началото на този раздел показва, че
оператор IF проверява дали този номер на SIMD Lane елемент (съхранен в R8 в примера по-горе) е по-
малък от ограничението (i < n) и задава маски по подходящ начин.
Machine Translated by Google
304 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Фигура 4.18 показва структурите на паметта на NVIDIA GPU. Всяка SIMD лента
в многонишков SIMD процесор се дава частна секция от DRAM извън чипа,
което наричаме лична памет. Използва се за стекова рамка, за разливане
регистри и за частни променливи, които не се побират в регистрите. SIMD Lanes правят
не споделяйте лични спомени. Последните GPU кешират тази частна памет в L1
и L2 кешове за подпомагане на преливането на регистъра и за ускоряване на извикванията на функции.
Ние наричаме паметта на чипа, която е локална за всеки многонишков SIMD процесор
или локална памет. Той се споделя от SIMD лентите в рамките на многонишков SIMD
Процесор, но тази памет не се споделя между многонишкови SIMD процесори.
Многонишковият SIMD процесор динамично разпределя части от
Локална памет към блок нишка, когато създава блок нишка и освобождава
памет, когато всички нишки от блока на нишката излязат. Тази част от Local
Паметта е частна за този блок от нишки.
И накрая, наричаме DRAM извън чипа, споделена от целия GPU и всички нишки
блокира GPU паметта. Нашият пример за векторно умножение използва само GPU памет.
Нишка CUDA
Блокиране на резби
На блок
Локална памет
Решетка 0 Последователност
...
...
Фигура 4.18 Структури на паметта на GPU. Паметта на GPU се споделя от всички мрежи (векторизирани
цикли), локалната памет се споделя от всички нишки на SIMD инструкции в блок нишка
(тяло на векторизиран цикъл), а частната памет е частна за една CUDA нишка.
Machine Translated by Google
Системният процесор, наречен хост, може да чете или записва GPU памет. Локалната памет не
е достъпна за хоста, тъй като е частна за всеки многонишков SIMD процесор. Личните спомени
също не са достъпни за хоста.
Вместо да разчитат на големи кешове, за да съдържат целите работни комплекти на дадено
приложение, графичните процесори традиционно използват по-малки кешове за стрийминг и
разчитат на обширно многопоточност на нишки на SIMD инструкции, за да скрият дългото забавяне
на DRAM, тъй като работните им набори могат да бъдат стотици мегабайти. Като се има предвид
използването на многопоточност за скриване на латентността на DRAM, областта на чипа, използвана
за кешове в системните процесори, се изразходва вместо това за изчислителни ресурси и за големия
брой регистри за задържане на състоянието на много нишки на SIMD инструкции. За разлика от
това, както бе споменато по-горе, векторните зареждания и съхранявания амортизират латентността
в много елементи, тъй като те плащат латентността само веднъж и след това тръбопроводят останалата част
достъпи.
за зареждане/съхраняване или 4 единици със специална функция. По този начин две нишки от SIMD
инструкции се планират на всеки два тактови цикъла към всяка от тези колекции. Тъй като нишките
са независими, няма нужда да се проверява за зависимости на данните в потока от инструкции.
Тази иновация би била аналогична на многонишков векторен процесор, който може да издава
векторни инструкции от две независими нишки.
Фигура 4.19 показва инструкциите за издаване на Dual Scheduler, а Фигура 4.20 показва
блоковата диаграма на многонишковия SIMD процесор на Fermi GPU.
Machine Translated by Google
306 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
емерв
SIMD нишка 14 инструкция 95 SIMD нишка 15 инструкция 95
Фигура 4.19 Блокова диаграма на Dual SIMD Thread Scheduler на Fermi. Сравнете този
дизайн с единичния дизайн на SIMD нишка на Фигура 4.16.
Fermi въвежда няколко иновации, за да доближи графичните процесори много по-близо до мейнстрийма
системни процесори от Tesla и предишни поколения GPU архитектури: Бърза аритметика с плаваща
скоростта на единичната точност в предишното поколение на Tesla. Това означава, че няма порядък на
изкушението да се използва единична точност, когато точността изисква двойна точност. Пиковата
Кешове за GPU памет – Докато философията на GPU е да има достатъчно нишки, за да се скрие латентността
на DRAM, има променливи, които са необходими в нишките, като локалните променливи, споменати по-
горе. Fermi включва L1 кеш за данни и L1 кеш за инструкции за всеки многонишков SIMD процесор и
единичен 768 KB L2 кеш, споделен от всички многонишкови SIMD процесори в GPU. Както бе споменато
по-горе, в допълнение към намаляването на натиска върху честотната лента на GPU паметта, кешовете
могат да пестят енергия, като остават в чипа, вместо да преминават извън чипа към DRAM. Кешът L1
всъщност съжителства със същата SRAM като локалната памет. Fermi има бит за режим, който предлага
избор за използване на 64 KB SRAM като 16 KB L1 кеш с 48 KB локална памет или като 48 KB L1 кеш с 16
KB локална памет. Обърнете внимание, че GTX 480 има обърната йерархия на паметта: Размерът на
общия регистърен файл е 2 MB, размерът на всички L1 кешове за данни е между 0,25 и 0,75 MB (в
зависимост от това дали са 16 KB или 48 KB) и размерът на L2 кеша е 0,75 MB. Ще бъде интересно да
64-битово адресиране и унифицирано адресно пространство за всички GPU памети—Тази иновация прави
Кеш за инструкции
LD/ST
SIMD SIMD SIMD SIMD
Лейн Лейн Лейн Лейн LD/ST
SFU
LD/ST
SIMD SIMD SIMD SIMD
Лейн Лейн лента Лейн LD/ST
LD/ST
SIMD SIMD SIMD SIMD
Лейн Лейн Лейн Лейн LD/ST
SFU
LD/ST
SIMD SIMD SIMD SIMD
Лейн Лейн Лейн Лейн LD/ST
Взаимосвързана мрежа
Единен кеш
Fermi стрийминг мултипроцесор (SM)
308 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Най-близкият CUDA/NVIDIA
Тип вектор термин GPU термин Коментирайте
ииинцмкаарргтосрбП
а
Звънец --
Тъй като една векторна инструкция (PTX инструкция) отнема
само два цикъла на Fermi и четири цикъла на Tesla, за да
завърши, звънецът е кратък в GPU.
Векторна инструкция PTX инструкция PTX инструкция на SIMD нишка се излъчва към всички SIMD
Векторен процесор Многонишков SIMD Те са подобни, но SIMD процесорите са склонни да имат много
Процесор ленти, като отнемат няколко тактови цикъла на лента за
завършване на вектор, докато векторните
архитектури имат малко ленти и отнемат много цикли за
завършване на вектор. Те също са многонишкови,
където векторите обикновено не са.
Контролен процесор Планировчик на блокиране на нишки Най-близкият е Thread Block Scheduler, който присвоява Thread
Скаларен процесор Системен процесор Поради липсата на споделена памет и високата латентност за
комуникация през PCI шина (1000 секунди тактови цикли),
системният процесор в GPU рядко поема същите задачи, които
изпълнява скаларният процесор във векторна архитектура.
дм
туеа
актроеб ааи
рб п
о
Хз
Векторни регистри SIMD Lane Регистри Еквивалентът на векторен регистър е един и същ регистър
във всички 32 SIMD линии на многонишков SIMD процесор,
изпълняващ нишка от SIMD инструкции. Броят на
регистрите на SIMD нишка е гъвкав, но максимумът е 64, така
че максималният брой векторни регистри е 64.
Главна памет GPU памет Памет за GPU срещу системна памет във векторен случай.
310 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
настолен компютър
SIMD Thread Scheduler
настолен компютър
Диспечерска единица
настолен компютър
контрол
FU FU FU FU FU ФУ
FU0 1 2 3 FU0 1 2 3
процесор
0123 000 0
4 5 6 7 1 1 1 1
• • • • • • • •
• • • • • • • •
иртсигеР
• • • • • • • •
си
иинррто ткгеВ
р
Интерфейс на паметта
Интерфейсен модул на паметта
мерна единица
Фигура 4.22 Векторен процесор с четири ленти отляво и многонишков SIMD процесор на GPU с четири
SIMD ленти вдясно. (GPU обикновено има от 8 до 16 SIMD ленти.) Контролният процесор доставя скаларни операнди за
скаларно-векторни операции, увеличава адресирането за единични и неединични крачки на достъп до паметта и извършва други
операции от счетоводен тип. Пиковата производителност на паметта се постига само в GPU, когато модулът за обединяване на адреси може
открийте локализирано адресиране. По същия начин, пикова изчислителна производителност възниква, когато всички битове на вътрешната маска са зададени
идентично. Обърнете внимание, че SIMD процесорът има един компютър на SIMD нишка, за да помогне при многопоточност.
адресите на нишките CUDA се отнасят до близки адреси, които попадат в същия кеш/
блок памет в същото време, модулът за обединяване на адреси на GPU ще
осигурете висока честотна лента на паметта. Изричните инструкции за зареждане и съхраняване на единица стъпка
латентност само веднъж на векторно зареждане или съхранение. Следователно векторните зареждания и
съхранявания са като блоков трансфер между паметта и векторните регистри. За разлика от това,
графичните процесори скриват латентността на паметта, използвайки многопоточност. (Някои
изследователи проучват добавянето на многопоточност към векторни архитектури, за да се опитат да
уловят най-доброто от двата свята.)
Управляващият процесор на векторен компютър играе важна роля при изпълнението на векторни
инструкции. Той излъчва операции към всички векторни ленти и излъчва стойност на скаларен регистър
за векторно-скаларни операции. Той също така прави имплицитни изчисления, които са изрични в
графичните процесори, като автоматично увеличаване на адресите на паметта за зареждания и
запаметявания с единична и не-единична стъпка.
Контролният процесор липсва в GPU. Най-близката аналогия е Thread Block Scheduler, който присвоява
Thread Blocks (тела на векторен цикъл) на многонишкови SIMD процесори. Хардуерните механизми за
изпълнение в GPU, които едновременно генерират адреси и след това откриват дали са съседни, което е
често срещано явление в много DLP приложения, вероятно са по-малко енергийно ефективни от
използването на контролен процесор.
Следователно всяка „векторна единица“ в GPU трябва да прави изчисления, които бихте очаквали да
направите на скаларния процесор във векторен компютър. Тоест, вместо да изчислявате със закъснение
на системния процесор и да съобщавате резултатите, може да бъде по-бързо да дезактивирате всички
освен една SIMD лента, като използвате регистрите на предикатите и вградените маски и да извършите
скаларната работа с една SIMD лента. Сравнително простият скаларен процесор във векторен компютър
вероятно ще бъде по-бърз и по-енергийно ефективен от GPU
Machine Translated by Google
312 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
решение. Ако системните процесори и графичните процесори станат по-тясно свързани помежду си
в бъдеще ще бъде интересно да видим дали системните процесори могат да играят същата роля
както правят скаларните процесори за векторни и мултимедийни SIMD архитектури.
цели работни комплекти напълно. И двете използват 64-битово адресно пространство, въпреки че
физическата основна памет е много по-малка в GPU. Докато графичните процесори поддържат памет
защита на ниво страница, те не поддържат страниране при поискване.
В допълнение към големите числени разлики в процесорите, SIMD лентите,
поддръжка на хардуерни нишки и размери на кеша, има много архитектурни разлики. Скаларният
процесор и мултимедийните SIMD инструкции са тясно интегрирани в традиционните компютри; те
са разделени от I/O шина в GPU и
те дори имат отделни основни спомени. Множеството SIMD процесори в a
GPU използва едно адресно пространство, но кешовете не са кохерентни, както са в традиционните
многоядрени компютри. За разлика от GPU, мултимедийните SIMD инструкции го правят
не поддържа събиране-разпръскване на достъп до паметта, което Раздел 4.7 показва, че е значителен
пропуск.
SIMD процесори 4 до 8 8 до 16
SIMD ленти/процесор 2 до 4 8 до 16
Типично съотношение на производителност с единична точност към производителност с двойна точност 2:1 2:1
Пейджинг по заявка да Не
Кохерентен кеш да Не
Фигура 4.23 Прилики и разлики между многоядрени с мултимедийни SIMD разширения и последните GPU.
Machine Translated by Google
Резюме
Сега, когато завесата е повдигната, можем да видим, че GPU всъщност са просто
многонишкови SIMD процесори, въпреки че имат повече процесори, повече ленти на
процесор и повече многонишков хардуер, отколкото традиционните многоядрени
компютри. Например Fermi GTX 480 има 15 SIMD процесора с 16 ленти
на процесор и хардуерна поддръжка за 32 SIMD нишки. Ферми дори прегръща
паралелизъм на ниво инструкция чрез издаване на инструкции от две SIMD нишки към
два комплекта SIMD ленти. Те също имат по-малко кеш памет - L2 кеша на Fermi е такъв
0,75 мегабайта—и не е кохерентен с отдалечения скаларен процесор.
По- Официален
описателно CUDA/
име, използвано NVIDIA Определение на книгата и Официален CUDA/NVIDIA
Последователност на CUDA Вертикален разрез на нишка от SIMD Нишката CUDA е лека нишка, която
Операции на Нишка инструкции, съответстваща на един елемент, изпълнява последователна програма и
SIMD Lane изпълнен от една SIMD лента. Резултатът се може да си сътрудничи с други нишки
съхранява в зависимост от маската. AMD и CUDA, изпълнявани в същия блок нишка.
OpenCL наричат CUDA Thread „работен елемент“. Нишка CUDA има идентификатор на
нишка в своя блок за нишка.
Нишка от Деформация Традиционна нишка, но съдържа само SIMD Warp е набор от паралелни CUDA нишки
SIMD инструкции, които се изпълняват на многонишков (напр. 32), които изпълняват една и
инструкции SIMD процесор. Резултатите се съхраняват в съща инструкция заедно в многонишков
зависимост от маска за всеки елемент. Името на SIMT/SIMD процесор.
кеабМ
ненитш о
AMD е „wavefront“.
SIMD PTX Една SIMD инструкция, изпълнена през SIMD Инструкцията PTX указва инструкция,
инструкция инструкция лентите. Името на AMD е инструкция „AMDIL“ или изпълнена от нишка CUDA.
„FSAIL“.
Фигура 4.24 Преобразуване от термините, използвани в тази глава, към официалния жаргон на NVIDIA/CUDA и AMD. OpenCL
имената са дадени в дефиницията на книгата.
Machine Translated by Google
314 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
По- Официален
описателно CUDA/
име, използвано NVIDIA Определение на книгата и Официален CUDA/NVIDIA
Тип в тази книга термин Условия на AMD и OpenCL определение
SIMD Нишка Хардуерна SIMD лента, която изпълнява Процесорът на нишка е път
Лейн процесор операциите в нишка от SIMD инструкции върху един за данни и част от
елемент. Резултатите се съхраняват в зависимост регистрационен файл на
от маската. OpenCL го нарича „обработващ поточен мултипроцесор, който
елемент“. Името на AMD също е „SIMD Lane“. изпълнява операции за една или
повече ленти на деформация.
Частно Местен Част от DRAM паметта е частна за всяка SIMD лента. Частна „локална нишка“ памет за
памет памет Както AMD, така и OpenCL го наричат „частна памет“. нишка CUDA; реализиран
като кеширана област на DRAM.
Местен Споделено Бърза локална SRAM за един многонишков SIMD Бърза SRAM памет, споделена от
процесор, недостъпна за други SIMD процесори. нишките CUDA, съставящи блок от
рап
Х
памет памет
анретуедм
SIMD Lane Регистри Регистрира се в една SIMD лента, разпределена в Частни регистри за нишка CUDA;
регистрира тялото на векторизирана верига. AMD също ги реализиран като многонишков
нарича „Регистри“. регистърен файл за определени
ленти от няколко деформации за
всеки процесор на нишка.
Фигура 4.25 Преобразуване от термините, използвани в тази глава, към официалния жаргон на NVIDIA/CUDA и AMD. Имайте предвид, че нашите
описателните термини „Локална памет“ и „Лична памет“ използват терминологията на OpenCL. NVIDIA използва SIMT, една инструкция с множество
нишки, вместо SIMD, за да опише стрийминг мултипроцесор. SIMT е за предпочитане пред SIMD
тъй като разклоняването на нишка и потокът на управление са различни от всяка SIMD машина.
Machine Translated by Google
Моделът за програмиране CUDA обгръща всички тези форми на паралелизъм около една
абстракция, нишката CUDA. По този начин програмистът на CUDA може да мисли за програмиране
на хиляди нишки, въпреки че те наистина изпълняват всеки блок от 32 нишки на многото
ленти на многото SIMD процесори.
Програмистът на CUDA, който иска добра производителност, има предвид, че тези нишки се
блокират и изпълняват 32 наведнъж и че адресите трябва да са към съседни адреси, за да
Сега, когато разбирате по-добре как работят графичните процесори, разкриваме истинския жаргон.
Фигури 4.24 и 4.25 съответстват на описателните термини и определения в този раздел с
официалните термини и определения на CUDA/NVIDIA и AMD. Включваме и условията на OpenCL.
316 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
В този цикъл двете употреби на x[i] са зависими, но тази зависимост е в рамките на една
итерация и не се пренася в цикъл. Съществува пренасяна от цикъла зависимост между
последователните употреби на i в различни итерации, но тази зависимост включва
индукционна променлива, която може лесно да бъде разпозната и елиминирана. Видяхме
примери за това как да елиминираме зависимости, включващи индукционни променливи
по време на разгръщане на цикъла в раздел 2.2 на глава 2, и ще разгледаме допълнителни
примери по-късно в този раздел.
Тъй като намирането на паралелизъм на ниво цикъл включва разпознаване на структури
като цикли, препратки към масиви и изчисления на индукционни променливи, компилаторът
може да направи този анализ по-лесно на или близо до нивото на източника, за разлика от
нивото на машинния код. Нека да разгледаме по-сложен пример.
Тези две зависимости са различни и имат различен ефект. За да видим как се различават,
нека приемем, че само една от тези зависимости съществува в даден момент.
Тъй като зависимостта на израза S1 е от по-ранна итерация на S1, тази зависимост се пренася
в цикъл. Тази зависимост принуждава последователните итерации на този цикъл да се
изпълняват последователно.
Втората зависимост (S2 в зависимост от S1) е в рамките на една итерация и не се пренася
в цикъл. По този начин, ако това беше единствената зависимост, множество итерации на
цикъла биха могли да се изпълняват паралелно, стига всяка двойка изрази в итерация да се
поддържа в ред. Видяхме този тип зависимост в пример в раздел 2.2, където разгръщането
успя да разкрие паралелизма. Тези вътрешноконтурни зависимости са често срещани;
например последователност от векторни инструкции, която използва верижно свързване,
показва точно този вид зависимост.
Възможно е също така да има зависимост, пренасяна от цикъл, която не предотвратява
паралелизъм, както показва следващият пример.
Machine Translated by Google
Какви са зависимостите между S1 и S2? Този цикъл успореден ли е? Ако не, покажете как
да го направите успореден.
1. Няма зависимост от S1 към S2. Ако имаше, тогава щеше да има цикъл в
зависимостите и цикълът нямаше да е паралелен. Тъй като тази друга
зависимост отсъства, размяната на двата израза няма да повлияе на
изпълнението на S2.
Тези две наблюдения ни позволяват да заменим цикъла по-горе със следната кодова
последователност:
за (i=0;i<100;i=i+1) {
A[i] = B[i] + C[i]
D[i] = A[i] * E[i]
}
Machine Translated by Google
318 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
за (i=1;i<100;i=i+1) {
Y[i] = Y[i-1] + Y[i];
}
Намиране на зависимости
цикъл. Да предположим например, че сме съхранили в елемент от масив със стойност на индекс
a × i + b и се зарежда от същия масив със стойност на индекс c × i + d, където i е
Machine Translated by Google
1. Има два индекса на итерация, j и k, които са в границите на for цикъла. Тоест mjn mkn
,
2. Цикълът съхранява в елемент на .
Пример Използвайте теста GCD, за да определите дали съществуват зависимости в следния цикъл:
320 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Пример Следният цикъл има множество типове зависимости. Намерете всички истински зависимости,
изходни зависимости и антизависимости и елиминирайте изхода
зависимости и антизависимости чрез преименуване.
Въпреки че този цикъл не е паралелен, той има много специфична структура, наречена
редукция. Редукциите са често срещани в линейната алгебра и, както ще видим в глава 6, те
също са ключова част от първичния примитив за паралелизъм MapReduce, използван в
компютрите от складов мащаб. По принцип всяка функция може да се използва като
редукционен оператор, а често срещаните случаи включват оператори като max и min.
Редукциите понякога се обработват от специален хардуер във векторна и SIMD
архитектура, който позволява стъпката на редуциране да се извърши много по-бързо,
отколкото може да се направи в скаларен режим. Те работят чрез прилагане на техника,
подобна на това, което може да се направи в многопроцесорна среда. Докато общата
трансформация работи с произволен брой процесори, да предположим, че за простота
имаме 10 процесора. В първата стъпка на намаляване на сумата всеки процесор изпълнява
следното (с p като номер на процесора в диапазона от 0 до 9):
Този цикъл, който обобщава 1000 елемента на всеки от десетте процесора, е напълно
паралелен. Прост скаларен цикъл може след това да завърши сумирането на последните
десет суми. Подобни подходи се използват във векторни и SIMD процесори.
Machine Translated by Google
322 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
4.7 Обединяване на всичко: мобилни срещу сървърни GPU и Tesla срещу Core i7 323
За да осигурят възможно най-добра производителност, графичните процесори се опитват да вземат предвид всички
обвързани с различни GDRAM банки, изчакващи, докато има достатъчно трафик, за да се оправдае
процесорните единици гладуват, докато чакат данни, тъй като в противен случай съседните процесори
lookaside buffer (TLB) за виртуална памет във векторни архитектури или GPU.
организиран TLB и размера на масива, до който се осъществява достъп в паметта, дори е възможно да
Като се има предвид популярността на графичните приложения, GPU вече се намират и в двете
Фигура 4.26 изброява ключовите характеристики на NVIDIA Tegra 2 за мобилни клиенти, която се използва
GPU за сървъри. Инженерите на GPU сървъри се надяват да могат да правят анимация на живо
в рамките на пет години след пускането на филма. Мобилните инженери на GPU на свой ред искат
в рамките на още пет години мобилен клиент може да направи това, което сървър или конзола за игри
и GPU в един чип, използвайки една физическа памет. Системният процесор е двуядрен ARM Cortex-A9,
и проблем с двойна инструкция. Всяко ядро включва допълнителна единица с плаваща запетая.
324 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
SIMD ленти/SIMD
Недостъпен 32
мултипроцесор
Размерът на матрицата е 57 mm2 (7,5 × 7,5 mm) при 40 nm TSMC процес и той
съдържа 242 милиона транзистора. Консумира 1,5 вата.
4.7 Обединяване на всичко: мобилни срещу сървърни GPU и Tesla срещу Core i7 325
Core i7-
960 GTX 280 GTX 480 Съотношение 480/i7
Съотношение 280/i7
Пиков SIMD FLOPS с единична точност (GFLOP/Sec) 102 311 до 933 515 или 1344 3,0–9,1 6,6–13,1
Фигура 4.27 Спецификации на Intel Core i7-960, NVIDIA GTX 280 и GTX 480. Най-десните колони показват
съотношения на GTX 280 и GTX 480 към Core i7. За SIMD FLOPS с единична точност на GTX 280, по-високата скорост (933)
идва от много рядък случай на двойно издаване на слято умножаване-събиране и умножаване. По-разумно е 622 за единични
слято умножение-добавяне. Въпреки че казусът е между 280 и i7, ние включваме 480, за да покажем връзката му
до 280, тъй като е описано в тази глава. Имайте предвид, че тези честотни ленти на паметта са по-високи, отколкото на Фигура 4.28
тъй като това са честотни ленти на DRAM пинове и тези на Фигура 4.28 са при процесорите, измерени от бенчмарк
програма. (От таблица 2 в Lee et al. [2010].)
на двете системи. И двата продукта бяха закупени през есента на 2009 г. Core i7 е
в 45-нанометровата полупроводникова технология на Intel, докато GPU е в TSMC
65-нанометрова технология. Въпреки че може да е по-справедливо да има сравнение от неутрална
страна или от двете заинтересовани страни, целта на този раздел не е да се определи колко по-бърз
е един продукт от друг, а да се опита
за да разберем относителната стойност на характеристиките на тези две контрастиращи архитектури
стилове.
326 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Core i7 920
128 128 NVIDIA GTX280
(Нехалем)
64 64
Пикова = 42,66 GFLOP/s
32 32
78 GF/сек
16 16
Поток = 16,4 GB/сек
еGдст
еGдст
о
о
чкFв
чкFв
о
о
нL
нL
оOй
оOй
та/сPн
та/сPн
8 8
Поток = 127 GB/сек
4 4
2 2
Core i7 920
1024 1024 NVIDIA GTX280
(Нехалем)
624 GF/сек
512 512
256 256
128 128
85,33 GF/сек
78 GF/сек
еGест
еGест
о
о
LчкFд
LчкFд
ни
ни
оO
оO
и
и
антч/сP
антч/сP
16 16
Фигура 4.28 Модел на покрив [Williams et al. 2009]. Тези линии на покрива показват производителност с плаваща
запетая с двойна точност в горния ред и производителност с единична точност в долния ред. (Таванът на
производителността на DP FP също е в долния ред, за да даде перспектива.) Core i7 920 отляво има пикова DP FP
производителност от 42,66 GFLOP/сек, пикова SP FP 85,33 GFLOP/сек и пикова памет честотна лента от 16,4 GBytes/sec.
NVIDIA GTX 280 има DP FP пик от 78 GFLOP/sec, SP FP пик от 624 GFLOP/sec и 127 GBytes/sec честотна лента на паметта.
Прекъснатата вертикална линия вляво представлява аритметичен интензитет от 0,5 FLOP/байт. Той е ограничен от
честотната лента на паметта до не повече от 8 DP GFLOP/сек или 8 SP GFLOP/сек на Core i7. Прекъснатата вертикална
линия вдясно има аритметичен интензитет от 4 FLOP/байт. Той е ограничен само изчислително до 42,66 DP GFLOP/сек
и 64 SP GFLOP/сек при Core i7 и 78 DP GFLOP/сек и 512 DP GFLOP/сек при GTX 280. За да достигнете най-високата скорост
на изчисление на Core i7, трябва да използвате всички 4 ядра и SSE инструкции с равен брой умножения и добавяния.
За GTX 280 трябва да използвате инструкции за слято умножение-добавяне на всички многонишкови SIMD процесори.
Гуз и др. [2009] имат интересен аналитичен модел за тези две архитектури.
Machine Translated by Google
4.7 Обединяване на всичко: мобилни срещу сървърни GPU и Tesla срещу Core i7 327
SGEMM (SGEMM) Линейна алгебра Редовен През 2D плочки Обвързване на изчисления след подреждане
Конволюция (конв.) Анализ на изображението Редовен През пикселите Изчисление обвързано; BW обвързан за
малки филтри
FFT (FFT) Обработка на сигнала Редовна Напречно по-малък Изчислете обвързаност или BW обвързаност
БПФ в зависимост от размера
SAXPY (SAXPY) Точков продукт Редовен През вектор BW, ограничен за големи вектори
Решаване на ограничения (Solv) Физика на твърдото тяло Gather/Scatter През ограничения Синхронизация обвързана
Леене на лъчи (RC) Обемно изобразяване Gather Напречни лъчи 4-8 MB работен комплект от първо ниво;
над 500 MB работен набор от последно
ниво
Търсене (Търсене) База данни Събиране/разпръскване През заявките Изчисление, свързано с малко дърво,
BW обвързан в долната част на дървото за
голямо дърво
Фигура 4.29 Характеристики на ядрото за изчислителна пропускателна способност (от таблица 1 в Lee et al. [2010].) Името в скоби идентифицира името на
бенчмарка в този раздел. Авторите предполагат, че кодът за двете машини е еднакъв
усилия за оптимизация.
Machine Translated by Google
328 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
GTX 280/
Ядро Единици Core i7-960 GTX 280 i7-960
Честотна лента на паметта. Графичният процесор има 4,4 пъти по-голяма честотна лента на паметта, което помага
обяснете защо LBM и SAXPY работят 5.0 и 5.3 пъти по-бързо; техните работни комплекти са
стотици мегабайти и следователно не се побират в кеша на Core i7. (Влизам
интензивно памет, те не са използвали блокиране на кеша на SAXPY.) Следователно,
наклонът на линиите на покрива обяснява тяхното представяне. SpMV също има голям
работен набор, но работи само 1,9×, защото плаващата запетая с двойна точност
на GTX 280 е само 1,5 пъти по-бърз от Core i7. (Припомнете си, че Ферми
GTX 480 с двойна точност е 4 пъти по-бърз от Tesla GTX 280.)
4.7 Обединяване на всичко: мобилни срещу сървърни графични процесори и Tesla срещу Core i7 329
Предимства на кеша. Ray casting (RC) е само 1,6 пъти по-бърз при GTX, тъй като блокирането
на кеша с кешовете на Core i7 го предпазва от обвързване с честотната лента на паметта,
както е при GPU. Блокирането на кеша може да помогне и на Търсене. Ако индексните
дървета са малки, така че да се поберат в кеша, Core i7 е два пъти по-бърз. По-големите
индексни дървета ги правят обвързани с честотната лента на паметта. Като цяло GTX 280
работи с търсене 1,8 пъти по-бързо. Блокирането на кеша също помага за сортирането.
Въпреки че повечето програмисти не биха изпълнили Sort на SIMD процесор, той може да
бъде написан с 1-битов примитив Sort, наречен split. Алгоритъмът за разделяне обаче
изпълнява много повече инструкции, отколкото скаларното сортиране. В резултат на това
GTX 280 работи само 0,8 пъти по-бързо от Core i7. Имайте предвид, че кешовете също
помагат на други ядра на Core i7, тъй като блокирането на кеша позволява на SGEMM, FFT и
SpMV да станат обвързани с изчисленията. Това наблюдение подчертава отново важността
на оптимизациите за блокиране на кеша в Глава 2. (Би било интересно да видим как
кешовете на Fermi GTX 480 ще повлияят на шестте ядра, споменати в този параграф.)
330 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Учудващо е колко често слабостите в Tesla GTX 280, които са били открити от ядрата,
избрани от изследователите на Intel, вече са били адресирани в архитектурата наследник
на Tesla: Fermi има по-бърза производителност с плаваща запетая с двойна точност,
атомарни операции и кеш памети. (В свързано проучване изследователите на IBM
направиха същото наблюдение [Bordawekar 2010].) Беше също така интересно, че
поддръжката на събиране и разпръскване на векторни архитектури, които предшестват
SIMD инструкциите с десетилетия, беше толкова важна за ефективната полезност на тези
разширения на SIMD. sije, които някои бяха предвидили преди сравнението [Gebis и
Patterson 2007] Изследователите на Intel отбелязаха, че 6 от 14-те ядра биха използвали
SIMD по-добре с по-ефективна поддръжка на събиране-разпръскване на Core i7. Това
проучване със сигурност установява и значението на блокирането на кеша. Ще бъде
интересно да видим дали бъдещите поколения многоядрен и GPU хардуер, компилатори и
библиотеки отговарят с функции, които подобряват производителността на такива ядра.
Надяваме се, че ще има повече подобни сравнения на многоядрени GPU. Обърнете
внимание, че важна характеристика, липсваща в това сравнение, описваше нивото на
усилие за получаване на резултатите за двете системи. В идеалния случай бъдещите
сравнения биха пуснали кода, използван и на двете системи, така че другите да могат да
пресъздадат същите експерименти на различни хардуерни платформи и евентуално да
подобрят резултатите.
Въпреки че разделянето между основната памет и GPU паметта има недостатъци, има
предимства да сте на разстояние от CPU.
Например, PTX съществува отчасти поради естеството на I/O устройството на GPU.
Това ниво на индиректност между компилатора и хардуера дава на архитектите на GPU
много повече гъвкавост, отколкото на архитектите на системните процесори. Често е
трудно да се знае предварително дали една архитектурна иновация ще бъде добре
поддържана от компилатори и библиотеки и ще бъде важна за приложенията. Понякога
нов механизъм дори ще се окаже полезен за едно или две поколения и след това ще
загуби своята важност с промените в ИТ света. PTX позволява на архитектите на GPU да
изпробват иновациите спекулативно и да ги изоставят в следващите поколения, ако те
разочароват или избледняват по важност, което насърчава експериментирането.
Обосновката за включване е разбираемо много по-висока за системните процесори - и
следователно може да се случи много по-малко експериментиране - тъй като
разпространението на двоичен машинен код обикновено предполага, че новите функции
трябва да се поддържат от всички бъдещи поколения на тази архитектура.
Демонстрация на стойността на PTX е, че архитектурата на Fermi радикално промени
набора от хардуерни инструкции - от ориентиран към паметта като x86 до
Machine Translated by Google
да бъде ориентиран към регистър като MIPS, както и да удвои размера на адреса до 64
битове—без да се прекъсва софтуерният стек на NVIDIA.
Клопка Концентриране върху върхова производителност във векторни архитектури и игнориране на стартиране
отгоре.
332 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Заблуда Можете да получите добра векторна производителност, без да осигурявате честотна лента на паметта.
Грешка При GPU просто добавете повече нишки, ако нямате достатъчно производителност на паметта.
Графичните процесори използват много нишки CUDA, за да скрият латентността към основната памет. Ако паметта
достъпите са разпръснати или не са корелирани между CUDA нишките, системата с памет ще стане
постепенно по-бавна в отговора на всяка отделна заявка. В крайна сметка дори много нишки няма да
покрият латентността. За „повече CUDA
нишки”, за да работите, не само имате нужда от много CUDA нишки, но и
Самите CUDA нишки също трябва да се държат добре по отношение на локалността на
достъпи до паметта.
Както казахме при откриването на Раздел 4.4, въпросът за GPU не е просто коя архитектура
е най-добра, но, като се има предвид инвестицията в хардуер за добра графика, как може да се
подобри, за да поддържа изчисления, които са по-общи? Въпреки че векторните архитектури
имат много предимства на хартия, остава да се докаже дали векторните архитектури могат да
бъдат толкова добра основа за графики, колкото GPU.
GPU SIMD процесорите и компилаторите все още са с относително прост дизайн.
Техники, които са по-агресивни, вероятно ще бъдат въведени с течение на времето, за да се
увеличи използването на GPU, особено след като GPU изчислителните приложения тепърва
започват да се разработват. Чрез изучаване на тези нови програми дизайнерите на GPU със
сигурност ще открият и внедрят нови машинни оптимизации. Един въпрос е дали скаларният
процесор (или управляващият процесор), който служи за пестене на хардуер и енергия във
векторните процесори, ще се появи в GPU.
Архитектурата на Fermi вече включва много функции, открити в конвенционалните
процесори, за да направи графичните процесори по-масови, но все още има други, необходими
за запълване на празнината. Ето няколко, които очакваме да бъдат разгледани в близко бъдеще.
се увеличава капацитетът. Директен I/O към GPU памет. Истинските програми правят I/O
към устройства за съхранение, както и към буфери на кадри, а големите програми могат
да изискват много I/O, както и памет с размери. Днешните GPU системи трябва да
прехвърлят между I/O устройства и системна памет и след това между системна памет и
GPU памет. Този допълнителен скок значително намалява I/O производителността в някои
програми, правейки GPU по-малко привлекателни. Законът на Амдал ни предупреждава
какво се случва, когато пренебрегвате една част от задачата, докато ускорявате други.
Очакваме, че бъдещите графични процесори ще превърнат всички I/O в първокласни
граждани, точно както се прави с I/O буфера днес. Обединени физически памети.
Алтернативно решение на предишните два куршума е да имате една физическа памет за
системата и GPU, точно както някои евтини GPU правят за PMD и лаптопи. Архитектурата
AMD Fusion, обявена точно когато това издание беше завършено, е първоначално сливане
между традиционни графични процесори и традиционни процесори. NVIDIA също обяви
Project Denver, който комбинира ARM скаларен процесор с NVIDIA GPU в едно адресно
пространство. Когато тези системи бъдат доставени, ще бъде интересно да научим колко
тясно интегрирани са те и въздействието на интеграцията върху производителността и
енергията както на паралелните данни, така и на графичните приложения.
След като разгледа многото версии на SIMD, следващата глава се гмурка в царството на
MIMD.
Machine Translated by Google
334 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
Програмиране на GPU
Оценка на ефективността
}
Machine Translated by Google
Константи Стойности
AA,AC,AG,AT 0,1,2,3
CA,CC,CG,CT 4,5,6,7
TA,TC,TG,TT 12,13,14,15
A,C,G,T 0,1,2,3
4.1 [25] <4.2, 4.3> Да приемем константите, показани на Фигура 4.32. Покажете кода за
MIPS и VMIPS. Да приемем, че не можем да използваме разпръснати товари или складове. Да приемем
началните адреси на tiPL, tiPR, clL, clR и clP са в RtiPL, RtiPR, RclL,
RclR и RclP, съответно. Да приемем, че дължината на VMIPS регистъра е програмируема от
потребителя и може да бъде присвоена чрез задаване на специален регистър VL (напр. li VL 4). За улеснение
редукции на векторно добавяне, приемем, че добавяме следните инструкции към VMIPS:
4.2 [5] <4.2, 4.3> Ако приемем seq_length == 500, каква е динамичната инструкция
брои и за двете реализации?
4.4 [15] <4.2, 4.3> Сега приемете, че можем да използваме разпръснати натоварвания и съхранявания (LVI
и SVI). Да приемем, че tiPL, tiPR, clL, clR и clP са подредени последователно
в памет. Например, ако seq_length==500, tiPR масивът ще започне 500 *
4 байта след масива tiPL. Как това се отразява на начина, по който можете да пишете
VMIPS код за това ядро? Да предположим, че можете да инициализирате векторни регистри с
цели числа, като се използва следната техника, която например би инициализирала
векторен регистър V1 със стойности (0,0,2000,2000):
LI R2,0
SW R2, vec
SW R2,vec+4
LI R2,2000
SW R2,vec+8
SW R2,vec+12
LV V1,vec
Machine Translated by Google
336 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
4.5 [25] <4.4> Сега приемете, че искаме да внедрим ядрото MrBayes на GPU
с помощта на блок с една нишка. Пренапишете C кода на ядрото с помощта на CUDA.
Да приемем, че указва условната вероятност и вероятността за преход
таблиците са посочени като параметри на ядрото. Извиквайте една нишка за всяка итерация на
цикъла. Заредете всички повторно използвани стойности в споделена памет преди изпълнение
операции върху него.
4.6 [15] <4.4> С CUDA можем да използваме груб паралелизъм на ниво блок, за да
изчислете условните вероятности на множество възли паралелно. Да приемем, че ние
искате да изчислите условните вероятности от дъното на дървото нагоре.
Да приемем, че масивите с условна вероятност и вероятност за преход са организирани в паметта,
както е описано във въпрос 4 и групата от таблици за всеки от
12 листови възела също се съхраняват в последователни места в паметта в реда на възела
номер. Да приемем, че искаме да изчислим условната вероятност за възли 12
до 17, както е показано на фигура 4.33. Променете метода, по който изчислявате
индекси на масиви във вашия отговор от упражнение 4.5, за да включите номера на блока.
4.7 [15] <4.4> Преобразувайте вашия код от Упражнение 4.6 в PTX код. Колко
необходими са инструкции за ядрото?
4.8 [10] <4.4> Колко добре очаквате да работи този код на GPU? Обяснете вашето
отговор.
22
21
18 19 20
12 13 14 15 16 17
0 1 23456 7 8 9 10 11
Упражнения
4.9 [10/20/20/15/15] <4.2> Разгледайте следния код, който умножава два вектора, които съдържат
комплексни стойности с единична точност:
за (i=0;i<300;i++) {
* b_re[i];
Да приемем, че процесорът работи на 700 MHz и има максимална дължина на вектора от 64.
Модулът за зареждане/запаметяване има начална стойност от 15 цикъла; единица за умножение,
8 цикъла; и единицата за събиране/изваждане, 5
цикъла. а. [10] <4.2> Какъв е аритметичният интензитет на това ядро? Обосновете своето
отговор.
b. [20] <4.2> Преобразувайте този цикъл във VMIPS асемблерен код с помощта на лентово
копаене. ° С. [20] <4.2> Ако приемем верижно свързване и един конвейер на паметта, колко
звънчета са необходими? Колко тактови цикъла са необходими за сложна резултатна
стойност, включително режийни разходи при стартиране?
д. [15] <4.2> Сега приемете, че процесорът има три конвейера на паметта и верига. Ако няма
банкови конфликти в достъпите на цикъла, колко тактови цикъла са необходими за резултат?
4.10 [30] <4.4> В този проблем ще сравним производителността на векторен процесор с хибридна
система, която съдържа скаларен процесор и GPU-базиран копроцесор. В хибридната система
хост процесорът има превъзходна скаларна производителност спрямо GPU, така че в този случай
целият скаларен код се изпълнява на хост процесора, докато целият векторен код се изпълнява
на GPU. Ще наричаме първата система векторен компютър, а втората система хибриден
компютър. Да приемем, че вашето целево приложение съдържа векторно ядро с аритметичен
интензитет от 0,5 FLOPs на достъпен DRAM байт; обаче, приложението има и скаларен компонент,
който трябва да се изпълни преди и след ядрото, за да се подготвят предварително входните
вектори и съответно изходните вектори. За примерен набор от данни, скаларната част на кода
изисква 400 ms време за изпълнение както на векторния процесор, така и на хост процесора в
хибридната система. Ядрото чете входни вектори, състоящи се от 200 MB данни, и има изходни
данни, състоящи се от 100 MB данни. Векторният процесор има пикова честотна лента на паметта
от 30 GB/sec, а GPU има пикова честотна лента на паметта от 150 GB/sec. Хибридната система
има допълнително натоварване, което изисква всички входни вектори да бъдат прехвърлени
между паметта на хоста и локалната памет на GPU преди и след извикване на ядрото. Хибридната
система има честотна лента с директен достъп до паметта (DMA) от 10 GB/sec и средна латентност
от 10 ms. Да приемем, че както векторният процесор, така и графичният процесор са
Machine Translated by Google
338 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
4.11 [15/25/25] <4.4, 4.5> Раздел 4.5 обсъжда редукционната операция, която редуцира вектор
до скалар чрез многократно прилагане на операция. Редукцията е специален тип
повторение на цикъла. По-долу е показан пример:
точка=0,0;
Както бе споменато в раздел 4.5, ако позволим добавянето с плаваща запетая да бъде
асоциативно, има няколко налични техники за паралелизиране на намаляването.
а. [15] <4.4, 4.5> Една техника се нарича рекурентно удвояване, която добавя
последователности от прогресивно по-къси вектори (т.е. два вектора с 32 елемента,
след това два вектора с 16 елемента и т.н.). Покажете как би изглеждал C кодът при
изпълнение на втория цикъл по този начин.
b. [25] <4.4, 4.5> В някои векторни процесори отделните елементи във векторните
регистри са адресируеми. В този случай операндите към векторна операция могат
да бъдат две различни части от един и същи векторен регистър. Това позволява
друго решение за намалението, наречено частични суми. Идеята е да се намали
векторът до m суми, където m е общата латентност през векторната функционална
единица, включително времето за четене и запис на операнда. Да приемем, че
VMIPS векторните регистри са адресируеми (напр. можете да инициирате векторна
операция с операнд V1(16), което показва, че входният операнд започва с елемент
16). Освен това приемете, че общото забавяне за добавяне, включително oper-и
четене и запис на резултат, е осем цикъла. Напишете VMIPS кодова последователност,
която намалява съдържанието на V1 до осем частични суми.
° С. [25] <4.4, 4.5> Когато се извършва редукция на GPU, една нишка се свързва с всеки
елемент във входния вектор. Първата стъпка е всяка нишка да запише съответната
си стойност в споделена памет. След това всяка нишка влиза в цикъл, който добавя
всяка двойка входни стойности. Това намалява броя на елементите наполовина
след всяка итерация, което означава, че броят на активните нишки също намалява
наполовина след всяка итерация. За да се максимизира производителността на
намаляването, броят на напълно запълнените изкривявания трябва да бъде
максимизиран по време на хода на цикъла. С други думи, активните нишки трябва
да са съседни. Освен това всяка нишка трябва да индексира споделения масив по
такъв начин, че да избегне банкови конфликти в споделената памет. Следният цикъл нарушава
Machine Translated by Google
само първата от тези насоки и също така използва модулния оператор, който е
много скъп за GPU:
__syncthreads(); }
4.12 [10/10/10/10] <4.3> Следното ядро изпълнява част от метода на крайната разлика във
времевата област (FDTD) за изчисляване на уравненията на Максуел в триизмерно
пространство, част от един от тестовете SPEC06fp:
IDx[index]; dH1 =
(Hz[индекс] – Hz[индекс-
dz[z];
Да приемем, че dH1, dH2, Hy, Hz, dy, dz, Ca, Cb и Ex са всички масиви с плаваща запетая
с единична точност. Да приемем, че IDx е масив от unsigned int. а.
<4.3> Това ядро податливо ли е на векторно или SIMD изпълнение? Защо или защо
не?
° С. [10] <4.3> Да приемем, че това ядро трябва да се изпълни на процесор, който има 30 GB/сек
честотна лента на паметта. Това ядро ще бъде ли обвързано с памет или обвързано с
изчисления?
д. [10] <4.3> Разработете покривен модел за този процесор, като приемете, че има
пикова изчислителна производителност от 85 GFLOP/сек.
4.13 [10/15] <4.4> Да приемем GPU архитектура, която съдържа 10 SIMD процесора.
Всяка SIMD инструкция има ширина 32 и всеки SIMD процесор съдържа 8 ленти за
аритметика с единична точност и инструкции за зареждане/съхранение, което означава, че
Machine Translated by Google
340 Четвърта глава Паралелизъм на ниво данни във векторни, SIMD и GPU архитектури
от 1,5 GHz. а. [10] <4.4> Изчислете пропускателната способност в GFLOP/сек за това ядро на този
GPU.
за (i=0;i<100;i++) {
A[i] = B[2*i+4];
B[4*i+5] = A[i]; }
за (i=0;i<100;i++) {
< 100;i++) {
Има ли зависимости между S1 и S2? Този цикъл успореден ли е? Ако не, покажете как да го
направите успореден.
Machine Translated by Google
4.15 [10] <4.4> Избройте и опишете поне четири фактора, които влияят на производителността на GPU ядрата. С
други думи, кои поведения по време на изпълнение, причинени от кода на ядрото, причиняват
намаляване на използването на ресурсите по време на изпълнение на ядрото?
Съдържа 16 SIMD процесора, всеки от които съдържа 16 плаващи модула с единична точност
точкови единици
Без да се взема предвид честотната лента на паметта, каква е пиковата пропускателна способност с
плаваща запетая с единична точност за този GPU в GLFOP/сек, като се приеме, че всички закъснения
на паметта могат да бъдат скрити? Устойчива ли е тази пропускателна способност предвид ограничението
на честотната лента на паметта?
4.17 [60] <4.4> За това упражнение по програмиране ще напишете и характеризирате поведението на CUDA ядро,
което съдържа голямо количество паралелизъм на ниво данни, но също така съдържа поведение при
условно изпълнение. Използвайте комплекта инструменти NVIDIA CUDA заедно с GPU-SIM от
Да приемем, че платката е инициализирана от хоста. Свържете една нишка с всяка клетка. Уверете се,
че сте добавили бариера след всяка итерация на играта. Използвайте следните правила на играта:
Всяка жива клетка с по-малко от два живи съседа умира. Всяка жива
клетка с два или трима живи съседи продължава да живее в следващото поколение. Всяка жива
клетка с повече от три живи съседи умира. Всяка мъртва клетка с точно
а. [60] <4.4> Компилирайте вашия код с помощта на опцията –ptx и проверете PTX представянето на
вашето ядро. Колко PTX инструкции съставляват PTX изпълнението на вашето ядро? Условните
секции на вашето ядро включваха ли инструкции за разклоняване или само предсказуеми
инструкции без разклоняване?
b. [60] <4.4> След изпълнение на вашия код в симулатора, какъв е динамичният брой инструкции? Какви
са постигнатите инструкции за цикъл (IPC) или процентът на издаване на инструкции? Каква е
разбивката на динамичните инструкции по отношение на инструкции за управление, инструкции
за аритметично-логическа единица (ALU) и инструкции за памет? Има ли конфликти в банки със
споделена памет? Каква е ефективната честотна лента на паметта извън чипа?
° С. [60] <4.4> Внедрете подобрена версия на вашето ядро, където препратките към памет извън чипа
са обединени и наблюдавайте разликите в производителността по време на изпълнение.
Machine Translated by Google
5
Паралелизъм на ниво нишка 1
5.1 Въведение
Както показват цитатите, които започват тази глава, мнението, че напредъкът в еднопроцесорната
архитектура е към своя край, се поддържа от някои изследователи за
много години. Очевидно тези възгледи бяха преждевременни; всъщност през периода на
1986–2003 г., нарастване на производителността на еднопроцесорния процесор, управляван от микропроцесора,
1990 г., когато дизайнерите търсеха начин да изградят сървъри и суперкомпютри, които
постигна по-висока производителност от единичен микропроцесор, като същевременно използваше
огромни предимства в съотношението цена-производителност на обикновените микропроцесори. Тъй като ние
Нарастващ интерес към сървъри от висок клас, тъй като облачните изчисления и
софтуерът като услуга стават все по-важни.
В тази глава се фокусираме върху използването на паралелизма на ниво нишка (TLP). TLP
предполага наличието на множество програмни броячи и следователно се използва предимно
Machine Translated by Google
По този начин нашият фокус ще бъде върху мултипроцесорите с малък до среден брой
процесори (2 до 32). Такива дизайни значително доминират по отношение както на единици,
така и на долари. Ще обърнем само малко внимание на по-мащабното многопроцесорно
пространство (33 или повече процесора), предимно в Приложение I, което обхваща повече
аспекти на дизайна на такива процесори, както и производителността на поведението за
паралелни научни натоварвания, основен клас приложения за големи мултипроцесори. В
големите мултипроцесори мрежите за взаимно свързване са критична част от дизайна;
Приложение F се фокусира върху тази тема.
от паметта, дори ако паметта е организирана в множество банки. Фигура 5.1 показва как
изглеждат тези мултипроцесори. Архитектурата на SMP е темата на Раздел 5.2 и ние
обясняваме подхода в контекста на многоядрени.
Алтернативният подход към дизайна се състои от мултипроцесори с физически
разпределена памет, наречена разпределена споделена памет (DSM). Фигура 5.2 показва
как изглеждат тези мултипроцесори. За да поддържа по-голям брой процесори, паметта
трябва да бъде разпределена между процесорите, а не централизирана; в противен
случай системата с памет не би могла да поддържа изискванията за честотна лента на по-
голям брой процесори, без да предизвика прекалено дълго забавяне на достъпа.
С бързото увеличаване на производителността на процесора и свързаното с това
увеличаване на изискванията за честотна лента на паметта на процесора, размерът на
мултипроцесора, за който се предпочита разпределената памет, продължава да намалява.
Въвеждането на многоядрени процесори означава, че дори мултипроцесорите с два
чипа използват разпределена памет. По-големият брой процесори също поражда
необходимостта от свързване с висока честотна лента, за което ще видим примери в Приложение F.
Споделен кеш
Фигура 5.2 Основната архитектура на мултипроцесор с разпределена памет през 2011 г. обикновено се състои от многоядрен
многопроцесорен чип с прикрепена памет и евентуално I/O и интерфейс към мрежа за взаимно свързване, която свързва всички възли.
Всяко процесорно ядро споделя цялата памет, въпреки че времето за достъп до
заключващата памет, прикрепена към чипа на ядрото, ще бъде много по-бърза от времето за достъп до отдалечени памети.
Пример Да предположим, че искате да постигнете ускорение от 80 със 100 процесора. Каква дроб
на оригиналното изчисление може да бъде последователно?
1
= -------------------------------------------------- ----------------------------------------------
Ускори Фракционно подобрено
--------------------------------------
+
(1 – фракционно подобрено )
Подобрена скорост
1
80 = -------------------------------------------------- ------------------------------------------------
Дроб паралелен
---------------------------------
100 (1 – дроб паралелен + )
0,8 + × 1
Дроб паралелен × 80 (1 – дроб паралелен ) =
– × = 1
80 79.2 Дробпаралел
80 1 –
Дроб паралелен = --------------
79.2
По този начин, за да се постигне ускорение от 80 със 100 процесора, само 0,25% от оригинала
изчислението може да бъде последователно. Разбира се, за постигане на линейно ускорение (ускоряване на
n с n процесора), цялата програма обикновено трябва да бъде паралелна без последователна
порции. На практика програмите не работят само напълно паралелно или последователно
режим, но често използват по-малко от пълния набор от процесори, когато работят
в паралелен режим.
Machine Translated by Google
= CPI Скорост на
CPI Base ×
+ отдалечена заявка Стойност на отдалечена заявка
× за отдалечена заявка
+ Разходи
= 0,5 0,2%
осигурява намаляване на конкуренцията, която може да съществува за споделени елементи от данни, които са
се четат от множество процесори едновременно. Кеширането на споделени данни, обаче, въвежда нов
което, без никакви допълнителни предпазни мерки, може в крайна сметка да види две различни стойности.
може да има две различни стойности за едно и също местоположение. Тази трудност е като цяло
съществува, защото имаме както глобално състояние, дефинирано основно от основната памет, така и
процесорно ядро. По този начин, в многоядрен, където може да се сподели известно ниво на кеширане
Неофициално бихме могли да кажем, че една паметова система е кохерентна, ако някой прочете a
елемент от данни връща последната записана стойност на този елемент от данни. Тази дефиниция, макар и
поведение на системата, като и двете са критични за писане на правилни програми за споделена памет.
Първият аспект, наречен кохерентност, определя какви стойности могат да бъдат върнати
памет
Съдържание на Съдържание на съдържание за
Време Събитие кеша за процесор A кеша за процесор B местоположение X
0 1
1 Процесор А чете X 1 1
2 Процесор B чете X 1 1 1
3 Процесор A съхранява 0 1 0
0вX
Фигура 5.3 Проблемът с кохерентността на кеша за едно място в паметта (X), четене и
написани от два процесора (A и B). Първоначално приемаме, че нито един кеш не съдържа
променливата и че X има стойност 1. Ние също така приемаме кеш за запис; кешът за обратно
записване добавя някои допълнителни, но подобни усложнения. След като стойността на X има
е записано от A, кеша на A и паметта съдържат новата стойност, но кеша на B
не, и ако B прочете стойността на X, ще получи 1!
Machine Translated by Google
2. Четене от процесор към местоположение X, което следва запис от друг процесор към X, връща
записаната стойност, ако четенето и записът са достатъчно разделени във времето и няма
други записи към X между двата достъпа.
3. Записите на едно и също място се сериализират; това означава, че две записи на едно и също
място от всеки два процесора се виждат в същия ред от всички процесори. Например, ако
стойностите 1 и след това 2 са записани в местоположение, процесорите никога не могат да
прочетат стойността на местоположението като 2 и след това по-късно да го прочетат като 1.
Първото свойство просто запазва програмния ред - очакваме това свойство да е вярно дори в
еднопроцесорни процесори. Второто свойство дефинира представата за това какво означава да
имаме съгласуван изглед на паметта: Ако процесорът може непрекъснато да чете стара стойност на
данните, ясно бихме казали, че паметта е некохерентна.
сериализация.
Въпреки че трите току-що описани свойства са достатъчни, за да осигурят съгласуваност,
въпросът кога ще се види писмена стойност също е важен. За да разберете защо, забележете, че не
можем да изискваме четенето на X незабавно да види стойността, записана за X от някой друг
процесор. Ако, например, запис на X на един процесор предшества четене на X на друг процесор за
много малко време, може да е невъзможно да се гарантира, че четенето връща стойността на
записаните данни, тъй като записаните данни може дори да не са напуснали процесора в този
момент. Въпросът кога точно написана стойност трябва да бъде видяна от читателя се дефинира от
модел на консистенция на паметта - тема, дискутирана в раздел 5.6.
на това предположение, докато стигнем до раздел 5.6, където ще видим точно последиците от това
определение, както и алтернативите.
Machine Translated by Google
различни характеристики, които влияят на подходящото решение. За разлика от I/O, където множеството
копия на данни са рядко събитие - трябва да се избягва, когато е възможно - програма, работеща на
няколко кеша. В един кохерентен мултипроцесор кешовете осигуряват както миграция , така и
Кохерентните кешове осигуряват миграция, тъй като елемент от данни може да бъде преместен в локален
латентност за достъп до споделен елемент от данни, който е разпределен дистанционно и честотната лента
едновременно четене, тъй като кешовете правят копие на елемента с данни в локалния
кеш памет. Репликацията намалява както забавянето на достъпа, така и конкуренцията за четене
производителността при достъп до споделени данни. По този начин, вместо да се опитвате да разрешите проблема чрез
видове базирана на директория кеш кохерентност. В SMP можем да използваме една централизирана
има смисъл да има една единствена директория, тъй като това би създало една точка на съперничество
всички достъпни чрез някаква излъчваща среда (напр. шина свързва всяко ядро
кешира към споделения кеш или памет), а всички кеш контролери наблюдават или
който е поискан в автобус или комутационен достъп. Snooping може да се използва и като
многоядрените споделят известно ниво на кеш на чипа. По този начин някои дизайни преминаха към
използвайки протоколи за директории, тъй като режийните разходи бяха малки. За да позволи на читателя да
елемент от данни, преди да запише този елемент. Този стил на протокол се нарича протокол за невалидна
дата на запис, защото прави невалидни други копия при запис. Това е най-много
общ протокол. Изключителният достъп гарантира, че никой друг не може да се чете или записва
копия на елемент съществуват, когато се извършва запис: Всички други кеширани копия на елемента
са обезсилени.
тайници в действие. За да видите как този протокол осигурява съгласуваност, помислете за писане
достъп, всяко копие, съхранявано от четящия процесор, трябва да бъде обезсилено (следователно,
име на протокол). По този начин, когато се случи четене, то пропуска в кеша и се принуждава
Фигура 5.4 Пример за протокол за невалидност, работещ върху подслушваща шина за единичен кеш блок (X) с
кешове за обратно записване. Предполагаме, че нито един кеш първоначално не съдържа X и че стойността на X в паметта е 0.
Съдържанието на процесора и паметта показва стойността, след като дейността на процесора и шината са завършени. Празното
показва, че няма активност или няма кеширано копие. Когато настъпи втората грешка от B, процесорът A отговаря със стойността
анулиране на отговора от паметта. В допълнение, както съдържанието на кеша на B, така и съдържанието на паметта на X са
актуализиран. Тази актуализация на паметта, която се случва, когато блок стане споделен, опростява протокола, но е възможно да
се проследи собствеността и да се принуди обратното записване само ако блокът бъде заменен. Това налага въвеждането на ан
допълнително състояние, наречено „собственик“, което показва, че даден блок може да бъде споделен, но притежаващият процесор е отговорен
за актуализиране на други процесори и памет, когато промени блока или го замени. Ако многоядрен използва споделен
кеш (напр. L3), тогава цялата памет се вижда през споделения кеш; L3 действа като паметта в този пример и
кохерентността трябва да се обработва за частните L1 и L2 за всяко ядро. Именно това наблюдение накара някои дизайнери да
изберете протокол за директория в многоядрения. За да работи това, L3 кешът трябва да бъде включен (вижте страница 397).
Machine Translated by Google
едновременно. Ако два процесора се опитат да запишат едни и същи данни едновременно, единият от тях
завърши своя запис, той трябва да получи ново копие на данните, които сега трябва да съдържат
елемент от данни, когато този елемент е записан. Този тип протокол се нарича запис на актуализация
или напишете протокол за излъчване. Тъй като протоколът за актуализиране на запис трябва да излъчва всички
пише в споделени кеш линии, изразходва значително повече честотна лента. За това
поради тази причина последните мултипроцесори са избрали да внедрят невалиден протокол за запис и ние
шината, използвана за кохерентност, е шината за достъп до споделена памет. В многоядрен, шината може
Intel Core i7) и споделения външен кеш (L3 в i7). За да извършите анулиране,
процесорът просто получава достъп до шината и излъчва адреса, който трябва да бъде невалиден в шината.
придобийте достъп до шина, за да излъчите неговата невалидност. Ако два процесора се опитат да пишат
споделени блокове по едно и също време, техните опити за излъчване на невалидна операция ще бъдат
получаване на достъп до шина ще доведе до невалидност на всички други копия на блока, който пише. Ако
наложено от автобуса също сериализира техните записи. Едно от последиците от тази схема е
че запис в споделен елемент от данни не може действително да завърши, докато не получи шина
същия кеш блок, или чрез сериализиране на достъпа до комуникационната среда, или
друга споделена структура.
кеш за запис, е лесно да се намери скорошната стойност на елемент от данни, тъй като всички
винаги може да бъде извлечен елемент от данни. (Буферите за запис могат да доведат до някои допълнителни
по-трудно, тъй като най-новата стойност на елемент от данни може да бъде по-скоро в частен кеш
отколкото в споделения кеш или памет. За щастие, кешовете за обратно записване могат да използват същото
схема за подслушване както за пропуски в кеша, така и за записи: Всеки процесор следи
всеки адрес, поставен в споделената шина. Ако процесорът установи, че има замърсен
Machine Translated by Google
копие на искания кеш блок, той предоставя този кеш блок в отговор на
заявка за четене и причинява прекратяване на достъпа до паметта (или L3). Допълнителното
сложността идва от необходимостта да се извлече кеш блокът от частния кеш на друг процесор (L1 или
L2), което често може да отнеме повече време, отколкото извличането му от
L3. Тъй като кешовете за обратно записване генерират по-ниски изисквания за честотна лента на паметта,
те могат да поддържат по-голям брой по-бързи процесори. В резултат на това всички многоядрени
процесорите използват обратно записване на най-външните нива на кеша и ние ще изследваме
прилагането на кохерентност с кешове за обратно записване.
Нормалните кеш тагове могат да се използват за прилагане на процеса на подслушване и
валидният бит за всеки блок прави анулирането лесно за изпълнение. Прочетете пропуски,
независимо дали са генерирани от обезсилване или от някакво друго събитие, също са ясни, тъй като те
просто разчитат на възможността за наблюдение. За пише бихме искали
за да знаете дали други копия на блока са кеширани, защото, ако няма
други кеширани копия, тогава записът не трябва да се поставя в шината при обратно записване
кеш памет. Неизпращането на записа намалява както времето за запис, така и необходимото
честотна лента.
За да проследим дали даден кеш блок е споделен или не, можем да добавим допълнителен бит за състояние
свързани с всеки кеш блок, точно както имаме валиден бит и мръсен бит. от
добавяйки малко, показващо дали блокът е споделен, можем да решим дали a
write трябва да генерира невалиден. Когато пишете в блок в споделено състояние
се случи, кешът генерира анулиране на шината и маркира блока като
изключителен. Няма да се изпращат допълнителни анулирания от това ядро за този блок. The
ядрото с единственото копие на кеш блок обикновено се нарича собственик на кеша
блок.
Примерен протокол
Протоколът за подслушване на кохерентност обикновено се реализира чрез включване на контролер с
ограничено състояние във всяко ядро. Този контролер отговаря на заявки от
процесор в ядрото и от шината (или друга излъчваща среда), променяйки
състояние на избрания кеш блок, както и използване на шината за достъп до данни или за невалидността
им. Логично, можете да мислите за отделен контролер, който да бъде свързан с
Machine Translated by Google
всеки блок; т.е. подслушващите операции или заявките за кеширане за различни блокове могат
продължете самостоятелно. В действителните реализации един контролер позволява множество
операции към отделни блокове да се извършват по редовен начин (т.е.
операцията може да бъде инициирана преди друга да е завършена, дори и само една
достъп до кеша или достъп до една шина е разрешен наведнъж). Освен това помнете, че
въпреки че говорим за автобус в следващото описание, всяка мрежа за взаимно свързване, която
поддържа излъчване към всички контролери за съгласуваност и свързаните с тях
личните кешове могат да се използват за прилагане на подслушване.
Състояние
на адресирано Тип
Източник на заявка кеш блок кеш действие Функция и обяснение
Прочетете хит Процесор Споделен или Нормално попадение Прочетете данни в локалния кеш.
модифициран
Прочетете пропуск Процесорът е невалиден Нормална пропуск Поставете прочетена пропуск в автобуса.
Прочетете липсва Процесор Споделен Пропускане на конфликт на заместващ адрес: пропуск на четене на място в автобуса.
Прочетете липсва Процесорът е модифициран Конфликт на заместващ адрес: блок за обратно записване, след което поставете пропуснатото четене в автобуса.
Запис на хит Процесор Модифициран Нормален хит Запис на данни в локалния кеш.
Напишете хит Процесор Споделен Съгласуваност Поставете невалиден в автобуса. Тези операции често се наричат надграждане
или пропуски на собственост , тъй като те не извличат данните, а само променят
състоянието.
Напишете пропуск Невалиден процесор Нормална пропуск Поставете пропуск пропуск в автобуса.
Напишете мис Процесор Споделен Пропускане на конфликт на заместващ адрес: пропуск на запис на място в автобуса.
Пишете пропуск Процесор Модифициран Пропуск при конфликт на заместващ адрес: блок за обратно записване, след което поставете пропуск за запис в
шина.
Прочетете Miss Bus Променен Съгласуваност Опит за споделяне на данни: поставете кеш блок в шина и променете състоянието на
споделено.
Невалидност на автобуса Споделено Съгласуваност Опит за запис на споделен блок; анулирайте блока.
Пишете Miss Bus Споделено Съгласуваност Опит за запис на споделен блок; анулирайте кеш блока.
Пишете Miss Bus Променен Съгласуваност Опит за запис на блок, който е изключителен другаде; запишете обратно кеш блока и
направете състоянието му невалидно в локалния кеш.
Фигура 5.5 Механизмът за кохерентност на кеша получава заявки както от процесора на ядрото, така и от споделения
автобус и отговаря на тях въз основа на типа заявка, дали тя удря или пропуска в локалния кеш и състоянието
на локалния кеш блок, посочен в заявката. Четвъртата колона описва типа действие на кеша като нормално
хит или пропуск (същото, което би видял еднопроцесорен кеш), замяна (пропуск при заместване на еднопроцесорен кеш) или
кохерентност (необходима за поддържане на кохерентност на кеша); нормално или заместващо действие може да предизвика кохерентно действие
в зависимост от състоянието на блока в други кешове. За пропуски за четене, пропуски, пропуски при запис или недействителни, подслушвани от
bus, се изисква действие само ако адресите за четене или запис съвпадат с блок в локалния кеш и блокът е валиден.
Machine Translated by Google
Невалидност за този
Споделено
блок
Невалиден Четене на процесора Споделено
(само за четене) Невалиден
Поставете прочетена мис в автобуса (Само за четене)
Пропуснато
Пропуснато
четене на
процесора
Поставете
пътсод
н
асеуо
ан
ер
текм
енавастъ п
Поставете прочетена мис в автобуса
ир
к
втса
;еноан лаБ
опб оз
Място
Поставете невалидно при зана
запис писане в автобуса
CPU на шина
Напишете мис за
този блок
Прочетете пропуск
за този блок
Кеширайте преходите на състоянието въз основа
Преходи на състоянието на кеша въз
Ексклузивно Изключителен на заявки от шината
основа на заявки от процесора
(четене/запис) (чети пиши)
Фигура 5.6 Протокол за невалидност на запис, кохерентност на кеша за частен кеш за обратно записване, показващ състоянията
и преходите на състоянията за всеки блок в кеша. Състоянията на кеша са показани в кръгове, като всеки достъп, разрешен от
локалния процесор без преход на състояние, е показан в скоби под името на състоянието. Стимулът, причиняващ промяна на
състоянието, е показан на дъгите на прехода в нормален тип и всички действия на автобуса, генерирани като част от прехода
на състоянието, са показани на дъгата на прехода с удебелен шрифт. Стимулиращите действия се прилагат към блок в личния
кеш, а не към конкретен адрес в кеша. Следователно, пропуск при четене на блок в споделеното състояние е пропуск за този
кеш блок, но за различен адрес. Лявата страна на диаграмата показва преходи на състояния въз основа на действията на
процесора, свързан с този кеш; дясната страна показва преходи въз основа на операции в автобуса. Пропуск при четене в
изключително или споделено състояние и пропуск при запис в изключително състояние възникват, когато адресът, поискан от
процесора, не съвпада с адреса в локалния кеш блок. Такъв пропуск е стандартен пропуск за заместване на кеша. Опит за запис
на блок в споделено състояние генерира невалиден. Всеки път, когато възникне шинна транзакция, всички частни кешове,
които съдържат кеш блока, указан в шинната транзакция, предприемат действието, продиктувано от дясната половина на
диаграмата. Протоколът предполага, че паметта (или споделен кеш) предоставя данни за пропуск на четене за блок, който е чист във всички локални
В действителните реализации тези два комплекта диаграми на състоянието се комбинират. На практика има много фини
вариации на невалидните протоколи, включително въвеждането на изключително немодифицирано състояние по отношение
на това дали процесор или памет предоставя данни при пропуск. В многоядрен чип споделеният кеш (обикновено L3, но
понякога L2) действа като еквивалент на паметта, а шината е шината между частните кешове на всяко ядро и споделения кеш,
който от своя страна се свързва с паметта.
или памет, ако няма споделен кеш), което опростява изпълнението. Всъщност няма
значение дали изходното ниво от частните кешове е споделен кеш или памет; ключът е,
че всички достъпи от ядрата преминават през това ниво.
Въпреки че нашият прост кеш протокол е правилен, той пропуска редица усложнения,
които правят внедряването много по-трудно. Най-важното от тях е, че протоколът приема,
че операциите са атомарни - тоест , една операция може да бъде извършена по такъв
начин, че да не може да се случи никаква намесна операция. Например, описаният
протокол предполага, че пропуските при запис могат да бъдат открити, да се получи шината и
Machine Translated by Google
Удар при
четене на
процесора
Напишете мис за този блок
Споделено
Невалиден Четене на процесора
(само за четене)
Поставете прочетена мис в автобуса
CPU запис
Пропуснато
Блок за обратно записване
CPU запис четене на
процесора
Поставете прочетена
мис в автобуса
ир
к
втса лаБ
опб оз
ваМ
п
в
аз
еноан
бтаосстяи
н
Данни за обратно записване; място прочетиПропуснат
мис в автобуса
асеуо
запис на процесора
Прочетете пропуск за блок
Пропуснато четене на процесора
Напишете пропуск
за блок
Изключителен
(чети пиши)
получавате отговор като едно атомарно действие. В действителност това не е вярно. Всъщност
дори пропускът при четене може да не е атомен; след откриване на пропуск в L2 на многоядрен
процесор, ядрото трябва да арбитрира за достъп до шината, свързваща към споделения L3.
Неатомичните действия въвеждат възможността протоколът да блокира, което означава, че
достига състояние, в което не може да продължи. Ще разгледаме тези усложнения по-късно в
този раздел и когато разглеждаме DSM дизайните.
При многоядрените процесори съгласуваността между процесорните ядра е изцяло
реализирана на чип, като се използва или подслушващ, или обикновен протокол за централна
директория. Много двупроцесорни чипове, включително Intel Xeon и AMD Opteron, поддържат
многочипови мултипроцесори, които могат да бъдат изградени чрез свързване на
високоскоростен интерфейс (наречен съответно Quickpath или Hypertransport). Тези връзки
от следващо ниво не са просто разширения на споделената шина, но използват различен
подход за взаимно свързване на многоядрени ядра.
Machine Translated by Google
Протоколът за съгласуваност, който току-що описахме, е прост протокол с три състояния и често
се споменава с първата буква на състоянията, което го прави MSI (променен, споделен, невалиден)
протокол. Има много разширения на този основен протокол, които споменахме в заглавията на
фигурите в този раздел. Тези разширения се създават чрез добавяне на допълнителни състояния
и транзакции, които оптимизират определени поведения, което вероятно води до подобрена
производителност. Две от най-често срещаните разширения са
1. MESI добавя състоянието Exclusive към основния MSI протокол, за да покаже кога кеш блокът
се намира само в един кеш, но е чист. Ако даден блок е в състояние E, той може да бъде
записан без генериране на невалидни, което оптимизира случая, когато блок се чете от един
кеш, преди да бъде записан от същия кеш. Разбира се, когато възникне пропуск при четене
на блок в състояние E, блокът трябва да се промени в състояние S, за да се поддържа
кохерентност. Тъй като всички последващи достъпи се подслушват, е възможно да се
поддържа точността на това състояние. По-специално, ако друг процесор издаде пропуск
при четене, състоянието се променя от изключително на споделено. Предимството на
добавянето на това състояние е, че последващо записване в блок в изключително състояние
от същото ядро не трябва да придобива достъп до шина или да генерира невалидност, тъй
като е известно, че блокът е изключително в този локален кеш; процесорът просто променя
състоянието на модифицирано. Това състояние се добавя лесно чрез използване на бита,
който кодира кохерентното състояние като ексклузивно състояние и използване на мръсния
бит, за да покаже, че блокът е модифициран. Популярният протокол MESI, който е кръстен
на четирите състояния, които включва (променен, изключителен, споделен и невалиден),
използва тази структура. Intel i7 използва вариант на протокол MESI, наречен MESIF, който
добавя състояние (Напред), за да посочи кой процесор за споделяне трябва да отговори на
заявка.
Той е предназначен да подобри производителността в организации с разпределена памет.
2. MOESI добавя състоянието Owned към протокола MESI, за да покаже, че асоциираният блок е
собственост на този кеш и е остарял в паметта. В протоколите MSI и MESI, когато има опит за
споделяне на блок в модифицирано състояние, състоянието се променя на споделено (както
в оригиналния, така и в новия кеш за споделяне) и блокът трябва да бъде записан обратно в
паметта. В протокол MOESI блокът може да бъде променен от модифицирано в притежавано
състояние в оригиналния кеш, без да го записва в паметта. Други кешове, които наскоро
споделят блока, поддържат блока в споделено състояние; състоянието O, което притежава
само оригиналният кеш, показва, че копието на основната памет е остаряло и че определеният
кеш е собственик. Собственикът на блока трябва да го предостави при пропуск, тъй като
паметта не е актуална и трябва да запише блока обратно в паметта, ако бъде заменен. AMD
Opteron използва протокола MOESI.
Machine Translated by Google
кешът трябва да проверява всеки пропуск, поставен в автобуса. Както споменахме, дублирането
на етикетите е едно решение. Друг подход, възприет в някои
последните многоядрени, е да поставите директория на нивото на най-външния кеш.
Директорията изрично показва на кой кеш на процесора има копия
всеки елемент в най-външния кеш. Това е подходът, който Intel използва при i7 и
Серия Xeon 7000. Имайте предвид, че използването на тази директория не елиминира пречките
поради споделена шина и L3 между процесорите, но е много по-просто
за внедряване на схемите за разпределени директории, които ще разгледаме
Раздел 5.4.
Как може един дизайнер да увеличи честотната лента на паметта, за да поддържа повече или
по-бързи процесори? За увеличаване на комуникационната честотна лента между процесорите
и памет, дизайнерите са използвали множество шини, както и мрежи за взаимно свързване, като
напречни ленти или малки мрежи от точка до точка. В такива дизайни,
система с памет (основна памет или споделен кеш) може да бъде конфигурирана в
множество физически банки, така че да се увеличи ефективната честотна лента на паметта, докато
запазване на равномерно време за достъп до паметта. Фигура 5.8 показва как такава система
може да изглежда, ако е реализиран с едночипов многоядрен. Въпреки че такива
може да се използва подход, който позволява повече от четири ядра да бъдат взаимно свързани
единичен чип, той не се мащабира добре до многочипов мултипроцесор, който използва
многоядрени градивни блокове, тъй като паметта вече е прикрепена към отделните многоядрени
чипове, а не централизирана.
AMD Opteron представлява друга междинна точка в спектъра
между протокол за наблюдение и протокол на директория. Паметта е пряко свързана с
всеки многоядрен чип и могат да бъдат свързани до четири многоядрени чипа. Системата е
NUMA, тъй като локалната памет е малко по-бърза. Opteron прилага своя протокол за съгласуваност,
използвайки връзките от точка до точка, за да излъчва до
три други чипа. Тъй като междупроцесорните връзки не се споделят, единствените
начинът, по който процесорът може да разбере кога невалидна операция е приключила, е чрез an
изрично признание. По този начин протоколът за съгласуваност използва излъчване за
Machine Translated by Google
Класическа поговорка
Когато написахме първото издание на тази книга през 1990 г., последното ни „Putting It All
Together” беше 30-процесорен, едношинен мултипроцесор, използващ Snoop-базиран
съгласуваност; шината имаше капацитет от малко над 50 MB/sec, което нямаше да бъде
достатъчно честотна лента на шината, за да поддържа дори едно ядро на Intel i7 през 2011 г.! Когато ние
написа второто издание на тази книга през 1995 г., наскоро се появиха първите мултипроцесори за
кохерентност на кеша с повече от една шина и ние добавихме
приложение, описващо прилагането на шпиониране в система с множество
автобуси. През 2011 г. повечето многоядрени процесори, които поддържат само едночипов
мултипроцесор, избраха да използват структура на споделена шина, свързваща се или със споделен
памет или споделен кеш. За разлика от тях, всяка многоядрена многопроцесорна система
който поддържа 16 или повече ядра, използва връзка, различна от една шина, и
дизайнерите трябва да се изправят пред предизвикателството да внедрят подслушване без опростяване
на автобус за сериализиране на събития.
фалшив пропуск при споделяне. При фалшиво пропускане на споделяне блокът се споделя, но
нито една дума в кеша всъщност не се споделя и пропускът няма да възникне, ако размерът на
блока е една дума.
Следният пример изяснява моделите на споделяне.
Пример Да приемем, че думите x1 и x2 са в един и същи кеш блок, който е в споделено състояние в кешовете
както на P1, така и на P2. Приемайки следната последователност от събития, идентифицирайте
всяко пропускане като истинско споделяне, фалшиво споделяне или попадение.
Machine Translated by Google
Всеки пропуск, който би възникнал, ако размерът на блока беше една дума, се определя като верен
споделяне мис.
време P1 P2
1 Напишете x1
2 Прочетете x2
3 Напишете x1
4 Напишете х2
5 Прочетете x2
1. Това събитие е истинска грешка при споделяне, тъй като x1 беше прочетено от P2 и трябва да бъде
обезсилен от Р2.
3. Това събитие е фалшива грешка при споделяне, тъй като блокът, съдържащ x1, е маркиран
споделено поради четене в P2, но P2 не прочете x1. Кеш блокът, съдържащ x1, ще бъде в
5. Това събитие е истинска грешка при споделяне, тъй като стойността, която се чете, е записана от P2.
Търговско натоварване
2. Работно натоварване на система за подпомагане на вземането на решения (DSS), базирана на TPC-D, по-старият братовчед
на силно използвания TPC-E, който също използва Oracle 7.3.2 като основен
база данни. Работното натоварване включва само 6 от 17 заявки за четене в TPC-D,
Размер на блока 32 Б 64 Б
Пропусната дузпа 7 10
L2 Размер 96 KB 256 KB
Размер на блока 32 Б 64 Б
Пропусната дузпа 21 35
L3 Размер 2 MB 2 MB на ядро
Размер на блока 64 Б 64 Б
% Време
OLTP 71 18 11
OLTP бенчмарк; 6-те заявки са средно около 1,5 милиона инструкции преди
блокиране.
3. Бенчмарк за търсене в уеб индекс (AltaVista), базиран на търсене на картирана в памет версия на базата
и в цикъла на празен ход. Честотата на I/O увеличава както времето на ядрото, така и
време на празен ход (вижте OLTP записа, който има най-голямото съотношение I/O към изчисление).
четирипроцесорна система; както беше обсъдено на страница 367, тези показатели включват значително I/
шестте DSS заявки като един бенчмарк, отчитащ средното поведение. The
ефективният CPI варира в широки граници за тези сравнителни показатели, от CPI от 1,3 за уеб търсенето
OLTP работно натоварване. Фигура 5.11 показва как времето за изпълнение се разделя на
(които са предимно сергии за конвейерни ресурси, но също така включват превод lookaside
100%
Други щандове
70%
60%
50%
телц
н
еинтеон заП
р
ера
ъоп
м и
н
вз
40%
30%
20%
10%
0%
OLTP DSS AltaVista
Фигура 5.11 Разбивка на времето за изпълнение за трите програми (OLTP, DSS и AltaVista) в търговското
работно натоварване. DSS числата са средните за шест различни заявки. CPI варира в широки граници
от ниско ниво от 1,3 за AltaVista, до 1,61 за DSS заявките, до 7,0 за OLTP. (Поотделно, DSS заявките
показват диапазон на CPI от 1,3 до 1,9.)
„Други спирания“ включват спирания на ресурсите (внедрени с капани за повторение на 21164),
неправилно предвиждане на разклонения, бариера на паметта и пропуски на TLB. За тези сравнителни
показатели спиранията на тръбопровода, базирани на ресурси, са доминиращият фактор. Тези данни
съчетават поведението на достъпа на потребителя и ядрото. Само OLTP има значителна част от
достъпите до ядрото и достъпите до ядрото обикновено се държат по-добре от достъпите на
потребителите! Всички измервания, показани в този раздел, са събрани от Barroso, Gharachorloo и Bugnion [1998].
За да разберем по-добре отговора на този въпрос, трябва да определим кои фактори допринасят
за процента на пропуски L3 и как те се променят с нарастването на кеша L3. Фигура 5.13 показва тези
данни, показвайки броя на циклите за достъп до паметта, предоставени на инструкция от пет
източника. Двата най-големи източника на цикли за достъп до L3 памет с 1 MB L3 са инструкция и
капацитет/конфликт
Machine Translated by Google
100
90 Празен
PAL код
80 Достъп до паметта
L2/L3 достъп до кеша
70 Изпълнение на инструкцията
60
50
лм
изниелнае
онареи ърп
м заН
еор и
вз
40
30
20
10
0
1 2 4 8
Размер на L3 кеша (MB)
Фигура 5.12 Относителната производителност на натоварването на OLTP, тъй като размерът на L3 кеша, който
е зададен като асоциативен двупосочен набор, нараства от 1 MB на 8 MB. Времето на неактивност също
нараства с увеличаване на размера на кеша, което намалява някои от печалбите в производителността. Този
растеж се дължи на факта, че при по-малко спирания на системата на паметта са необходими повече сървърни
процеси, за да се покрие I/O латентността. Работното натоварване може да бъде пренастроено, за да се
увеличи балансът изчисление/комуникация, като се държи под контрол времето на неактивност. PAL кодът е
набор от последователности от специализирани инструкции на ниво OS, изпълнявани в привилегирован
режим; пример е TLB манипулаторът на пропуски.
3.25
2,75 Инструкция
Капацитет/конфликт
2.5 Задължително
Фалшиво споделяне
2.25
Истинско споделяне
1,75
1.5
лтм
яицактуитре ааЦ
н
кси и
н
пз
1.25
0,75
0,5
0,25
0
1 2 4 8
Размер на кеша (MB)
Фигура 5.13 Допринасящите причини за изместване на цикъла на достъп до паметта с увеличаване на размера
на кеша. Кешът L3 се симулира като асоциативен двупосочен набор.
Machine Translated by Google
3
Инструкция
Капацитет/конфликт
Задължително
Истинско споделяне
1.5
лтм
яицактуитре ааЦ
н
кси и
н
пз
1
0,5
0
1 2 4 6 8
Брой процесори
Фигура 5.14 Приносът към циклите на достъп до паметта се увеличава с броя на процесорите
се увеличава главно поради увеличеното истинско споделяне. Задължителното пропуска леко
увеличаване, тъй като всеки процесор сега трябва да обработва повече задължителни пропуски.
този начин, при 4 MB и 8 MB, истинските пропуски на споделяне генерират преобладаващата част от пропуските;
count влияе върху различни видове пропуски? Фигура 5.14 показва тези данни, приемайки a
паметта за инструкция.
трябва да намали скоростта на инструкциите и студените пропуски и, в рамките на ограниченията, също да намали
процентът на пропуски на капацитет/конфликт и вероятно истинският процент на пропуски при споделяне – е полезно
тъй като размерът на блока е увеличен от 32 на 256 байта. Увеличаване на размера на блока от
Истинският процент на пропуски при споделяне намалява с повече от коефициент 2, което показва
някаква местност в истинските модели на споделяне.
16
15 Инструкция
14 Капацитет/конфликт
Задължително
13 Фалшиво споделяне
12 Истинско споделяне
11
10
9
8
0П
а
н
тос0р
ииицкксуурп0 и
н
1
7
6
5
4
3
2
1
0
32 64 128 256
Размер на блок (байтове)
Фигура 5.15 Броят пропуски на 1000 инструкции намалява стабилно с увеличаване на размера
на блока на L3 кеша, което прави добър случай за размер на L3 блок от поне 128 байта. L3 кеш
паметта е 2 MB, двупосочен набор асоциативен.
Степента на пропуски при фалшиво споделяне, макар и малка в абсолютно изражение, почти се удвоява.
Липсата на значителен ефект върху процента на пропускане на инструкции е стряскаща. Ако имаше
кеш само за инструкции с това поведение, бихме заключили, че пространствената локализация е много
лоша. В случай на смесен L2 кеш, други ефекти, като например конфликти инструкции-данни, също могат да
допринесат за високия процент пропуски на кеша инструкции за по-големи блокове. Други проучвания са
документирали ниската пространствена локализация в потока от инструкции на големи бази данни и OLTP
работни натоварвания, които имат много кратки основни блокове и кодови последователности със
специално предназначение. Въз основа на тези данни наказанието за пропуск за по-голям размер на блок
L3, както и за 32-байтов размер на блок L3, може да бъде изразено като множител на наказанието за 32-
64 байта 1.19
С модерните DDR SDRAM, които правят достъпа до блокове бърз, тези числа изглеждат постижими,
особено при размер на блока от 128 байта. Разбира се, трябва да се тревожим и за ефектите от
увеличения трафик към паметта и възможното съревнование за паметта с други ядра. Този последен
ефект може лесно да отмени печалбите, получени от подобряване на производителността на един
процесор.
Мултипрограмиране и натоварване на ОС
Кеш на данни от ниво 1—32 KB, асоциативен двупосочен набор с 32-байтов блок, време за попадение
от 1 тактов цикъл. Ние променяме L1 кеша за данни, за да изследваме ефекта му върху поведението
на кеша.
Кеш от ниво 2—1 MB унифициран, асоциативен двупосочен набор със 128-байтов блок, време за
попадение от 10 тактови цикъла.
Фигура 5.16 показва как времето за изпълнение се разделя за осемте процесора, използвайки
току-що изброените параметри. Времето за изпълнение е разделено на четири компонента:
приблизително една шеста от скоростта на ОС, в разнообразието от размери на кеша. Това частично
инструкции като ядрото, тези инструкции отнемат само около четири пъти повече време от
работно натоварване, тъй като размерът на кеша и размерът на блока се променят. Заради разликите
повече от осем пъти повече инструкции, така че общият процент на пропуски се определя основно от процента
на пропуски в потребителския код, който, както ще видим, често е една пета от процента на пропуски на ядрото.
може да причини повече пропуски в кеша, отколкото потребителските процеси по две причини
извън по-големия размер на кода и липсата на локалност. Първо, ядрото инициализира всички страници
по този начин има нетривиален кохерентен пропуск. Обратно, потребителските процеси причиняват пропуски
Фигура 5.17 показва скоростта на пропускане на данни спрямо размера на кеша за данни и спрямо блока
процентът на пропуски на потребителя повече, отколкото влияе върху процента на пропуски на ядрото. Увеличаване на блока
размерът има благоприятен ефект и за двата процента пропуски, тъй като по-голяма част от
7% 10%
9%
6%
Скорост на пропуски на ядрото 8%
5% 7%
6%
4%
5%
sestiaMr
sestiaMr
3% Скорост на пропуски на ядрото
4%
2% 3%
2%
1% Процент на пропуски на потребителя
Процент на пропуски на потребителя
1%
0% 0%
32 64 128 256 16 32 64 128
Размер на кеша (KB) Размер на блок (байтове)
Фигура 5.17 Процентите на пропускане на данни за потребителя и компонентите на ядрото се държат по различен начин при увеличения на
размера на L1 кеша за данни (отляво) спрямо увеличенията на размера на L1 кеша за данни (вдясно). Увеличаването на L1 кеша за данни от
32 KB на 256 KB (с 32-байтов блок) води до намаляване на процента на пропуски на потребителя пропорционално повече от процента на
пропуски на ядрото: процентът на пропуски на ниво потребител пада с почти фактор 3, докато честотата на пропуски на ниво ядро пада само
с фактор 1,3. Степента на пропуски както за потребителя, така и за компонентите на ядрото спада стабилно, тъй като размерът на L1 блока се
увеличава (като същевременно L1 кеша се запазва на 32 KB). За разлика от ефектите от увеличаване на размера на кеша, увеличаването на
размера на блока подобрява по-значително процента на пропуски на ядрото (малко под коефициент 4 за препратките на ядрото при
преминаване от 16-байтови към 128-байтови блокове срещу малко под коефициент от 3 за потребителски препратки).
подобрени с по-големи размери на блокове. Тъй като пропуските на кохерентност са относително по-
редки, отрицателните ефекти от увеличаването на размера на блока са малки. За да разберем защо
ядрото и потребителските процеси се държат по различен начин, можем да погледнем как се държат
пропуските на ядрото.
7% 10%
Капацитет/конфликт
9% Съгласуваност
6%
8% Задължително
5% 7%
4% 6%
5%
sestiaMr
sestiaMr
3%
4%
2% 3%
2%
1%
1%
0% 0%
32 64 128 256 16 32 64 128
Размер на кеша (KB) Размер на блок (байтове)
Фигура 5.18 Компонентите на честотата на пропускане на данни в ядрото се променят, тъй като
размерът на L1 кеша за данни се увеличава от 32 KB на 256 KB, когато работното натоварване за
мултипрограмиране се изпълнява на осем процесора. Компонентът на задължителния процент на
пропуски остава постоянен, тъй като не се влияе от размера на кеша. Компонентът на капацитета спада
с повече от коефициент 2, докато компонентът на кохерентността почти се удвоява. Увеличаването на
кохерентните пропуски възниква, защото вероятността пропускът да бъде причинен от невалидност се
увеличава с размера на кеша, тъй като по-малко записи се сблъскват поради капацитета. Както бихме
очаквали, нарастващият размер на блока на L1 кеша за данни значително намалява задължителния
процент на пропуски в препратките на ядрото. Той също така има значително влияние върху скоростта
на пропускане на капацитет, като го намалява с коефициент 2,4 в диапазона от размери на блокове.
Увеличеният размер на блока има малко намаление на кохерентния трафик, който изглежда се
стабилизира на 64 байта, без промяна в честотата на пропуски на кохерентност при преминаване към
128-байтови линии. Тъй като няма значителни намаления в степента на пропуски на кохерентност с
увеличаване на размера на блока, частта от процента на пропуски поради кохерентност нараства от около 7% до ок
3.5
Трафик на ядрото
3.0
2.5
рп
актаи нр
нм
е ап
ъ
о д
к
2.0
1.5
ев
ак
,не р
ти тм
ф
тое йр
аази
н
п
б
в
Т
1.0
Потребителски трафик
0,5
0,0
16 32 64 128
Фигура 5.19 Броят на байтовете, необходими за препратка към данни, нараства с увеличаване на
размера на блока както за ядрото, така и за потребителските компоненти. Интересно е да се
сравни тази диаграма с данните за научни програми, показани в Приложение I.
Както видяхме в раздел 5.2, протоколът за подслушване изисква комуникация с всички кешове
при всяко пропускане на кеша, включително записи на потенциално споделени данни. Липсата
на каквато и да е централизирана структура от данни, която проследява състоянието на
кешовете, е както основното предимство на схемата, базирана на подслушване, тъй като й
позволява да бъде евтина, така и нейната ахилесова пета, когато става въпрос за мащабируемост.
Например, помислете за мултипроцесор, съставен от четири 4-ядрени многоядрени ядра,
способни да поддържат една справка за данни на такт и тактова честота от 4 GHz. От данните в
Раздел I.5 на Приложение I можем да видим, че приложенията може да изискват от 4 GB/sec до
170 GB/sec честотна лента на шината. Въпреки че кешовете в тези експерименти са
Machine Translated by Google
малък, по-голямата част от трафика е кохерентен трафик, който не се влияе от размера на кеша.
Въпреки че една модерна шина може да поеме 4 GB/sec, 170 GB/sec е далеч отвъд
способност на всяка система, базирана на шина. През последните няколко години развитието на
многоядрените процесори принуди всички дизайнери да преминат към някаква форма на разпределена памет, за
поддържат изискванията за честотна лента на отделните процесори.
Можем да увеличим честотната лента на паметта и честотната лента на взаимното свързване с
разпределяне на паметта, както е показано на Фигура 5.2 на страница 348; това веднага
разделя трафика на локалната памет от трафика на отдалечената памет, намалявайки изискванията за
честотна лента на системата с памет и на мрежата за взаимно свързване.
Освен ако не премахнем необходимостта протоколът за съгласуваност да се излъчва на всеки
пропуснете кеша, разпределянето на паметта ще ни спечели малко.
Както споменахме по-рано, алтернативата на протокола за съгласуваност, базиран на подслушване,
е протокол на директория. Директория пази състоянието на всеки блок, който може
да се кешира. Информацията в директорията включва кои кешове (или колекции от
кешове) имат копия на блока, дали е мръсен и т.н. В рамките на многоядрен процесор със споделен най-
външен кеш (да речем L3) е лесно да се внедри директория
схема: Просто запазете битов вектор с размер, равен на броя на ядрата за
всеки L3 блок. Битовият вектор показва на кои частни кешове може да има копия
блок в L3 и невалидностите се изпращат само до тези кешове. Това работи перфектно за едно
многоядрено, ако L3 е включен, и тази схема е тази, която се използва в
Intel i7.
Фигура 5.20 Към всеки възел се добавя директория, за да се реализира кохерентност на кеша в мултипроцесор с разпределена
памет. В този случай възелът се показва като единичен многоядрен чип и информацията за директорията за асоциирания
паметта може да се намира на или извън многоядрения. Всяка директория отговаря за проследяването на кешовете, които споделят
адреси на паметта на частта от паметта във възела. Механизмът за съгласуваност ще се справи както с поддръжката на
информацията на директорията, така и с всички действия за съгласуваност, необходими в многоядрения възел.
Точно както при протокола за подслушване, има две основни операции в директория
протоколът трябва да изпълнява: обработка на пропуск при четене и обработка на запис в споделен,
чист кеш блок. (Обработката на пропуск на запис към блок, който в момента е споделен, е a
проста комбинация от тези две.) За изпълнение на тези операции, директория
трябва да проследява състоянието на всеки кеш блок. В прост протокол тези държави биха могли
бъде следното:
В допълнение към проследяването на състоянието на всеки потенциално споделен блок памет, ние
трябва да проследи кои възли имат копия на този блок, тъй като тези копия ще трябва
да бъдат анулирани при запис. Най-лесният начин да направите това е да запазите битов вектор за
Machine Translated by Google
всеки блок памет. Когато блокът е споделен, всеки бит от вектора показва
дали съответният процесорен чип (който вероятно е многоядрен) има a
копие на този блок. Можем също да използваме битовия вектор, за да следим собственика на
блока, когато блокът е в изключително състояние. От съображения за ефективност ние също
проследяване на състоянието на всеки кеш блок в отделните кешове.
Състоянията и преходите за крайната машина във всеки кеш са идентични с
Съдържание
Тип съобщение Източник Дестинация на съобщението Функция на това съобщение
Прочетете мис Локален кеш Начална директория P, A Възел P има пропуск при четене на адрес A;
поискайте данни и направете P споделящ за четене.
Пишете мис Локален кеш Начална директория P, A Възел P има пропуск при запис на адрес A;
поискайте данни и направете P изключителен собственик.
Невалидност Локален кеш Начална директория A Искане за изпращане на невалидни до всички отдалечени
кешове, които кешират блока на адрес A.
Невалидност Начална директория Отдалечен кеш A Невалидно споделено копие на данни на адрес A.
Извличане
Начална директория Отдалечен кеш A Извлечете блока на адрес A и го изпратете в началната му
Извличане/невалидиране Начална директория Отдалечен кеш A Извлечете блока на адрес A и го изпратете в началната му
Отговор на стойността на данните Начална директория Локален кеш д Връща стойност на данни от домашната памет.
Обратно записване на данни Отдалечен кеш Начална директория A, D Запишете обратно стойност на данни за адрес A.
Фигура 5.21 Възможните съобщения, изпратени между възлите за поддържане на съгласуваност, заедно с възела източник и местоназначение, съдържанието
и функцията на съобщението. Първите три съобщения са заявки, изпратени от локалния възел до дома. The
четвърто до шесто съобщение са съобщения, изпратени до отдалечен възел от дома, когато домът има нужда от данните
задоволяване на заявка за пропуск при четене или запис. Отговорите на стойността на данните се използват за изпращане на стойност от началния възел обратно към
искащ възел. Обратно записване на стойност на данни възниква по две причини: когато блок се заменя в кеша и трябва да се запише обратно в неговата
домашна памет, а също и в отговор на извличане или извличане/невалидност на съобщения от домашната. Пиша обратно
стойността на данните всеки път, когато блокът стане споделен, опростява броя на състоянията в протокола, тъй като всяко мръсно
блокът трябва да е ексклузивен и всеки споделен блок винаги да е достъпен в домашната памет.
Machine Translated by Google
запис в указателя на пребиваване на адрес. Физическото адресно пространство е статично разпределено, така
адресът е известен. Например, битовете от висок ред могат да предоставят номера на възела, докато битовете
Локалният възел може да бъде и началният възел. Директорията трябва да бъде достъпна, когато
началният възел е локалният възел, тъй като копия могат да съществуват в трети възел, наречен
отдалечен възел .
Отдалечен възел е възелът, който има копие на кеш блок, независимо дали е изключителен
(в който случай това е единственото копие) или споделено. Отдалеченият възел може да бъде същият като
или локалния възел, или началния възел. В такива случаи основният протокол не го прави
съобщения.
В този раздел приемаме прост модел на последователност на паметта. За да минимизираме вида на
изпращат се. Това предположение може да не е вярно на практика и може да доведе до допълнителни
че невалидните съобщения, изпратени от възел, се зачитат, преди да бъдат предадени нови съобщения,
недействителните за завършен запис не са толкова прости, колкото при механизма за наблюдение, базиран на
като тези в шпионски протокол, а състоянията в директорията също са аналогични на тези, които показахме
върху редица детайли на мултипроцесора (свойства за доставка на съобщения, структури за буфериране и т.н.).
В този раздел представяме основните диаграми на състоянието на протокола. Заплетените проблеми, свързани
са разгледани в Приложение I.
Използваме същата нотация като в последния раздел, като заявките идват отвън
са причинени от пропуски при четене, пропуски при запис, анулиране и заявки за извличане на
данни; Фигура 5.22 показва тези операции. Индивидуален кеш също генерира пропуски при
четене, пропуски при запис и невалидни съобщения, които се изпращат до началната директория.
Пропуските при четене и запис изискват отговори на стойността на данните и тези събития чакат
отговори, преди да променят състоянието. Познаването кога анулирането е завършено е отделен
проблем и се обработва отделно.
Невалидност
Споделено
Невалиден Четене на процесора
(само за четене)
Изпратете прочетено съобщение
Пропуснато
Прочетете мис
Обратно записване на данни; прочети мис
Извличане Изпращане на съобщение за липса
пбааО
ирн
тсан
еноанви н
дз
Извличане
на невалидни
Променен
(четене/запис)
Пишете мис
Фигура 5.22 Диаграма на прехода на състоянието за отделен кеш блок в система, базирана
на директория. Заявките от локалния процесор са показани в черно, а тези от домашната
директория са показани в сиво. Състоянията са идентични с тези в случая с подслушване и
транзакциите са много сходни, с изрични заявки за невалидност и обратно записване, които
заместват пропуските за запис, които преди са били излъчвани в автобуса. Както направихме
за подслушващия контролер, приемаме, че опитът за запис на споделен кеш блок се третира
като пропуск; на практика такава транзакция може да се третира като заявка за собственост
или заявка за надграждане и може да достави собственост, без да се изисква извличането
на кеш блока.
Machine Translated by Google
Работата на диаграмата на прехода на състоянието за кеш блок на Фигура 5.22 е по същество същата,
пропуск на запис, която е била излъчена по шината (или друга мрежа) в схемата за наблюдение, се заменя
директорията. Подобно на протокола за подслушване, всеки кеш блок трябва да бъде в изключително
състояние, когато е написан, и всеки споделен блок трябва да е актуален в паметта. В много многоядрени
процесори най-външното ниво в кеша на процесора се споделя между ядрата (както е L3 в Intel i7, AMD
Opteron и IBM Power7), а хардуерът на това ниво поддържа съгласуваност между частните кеши на всеки
ядро на същия чип, използвайки или вътрешна директория, или подслушване. По този начин механизмът
Тъй като този интерфейс е на ниво L3, спорът между процесора и заявките за кохерентност е по-малък
Блокът памет може да бъде декеширан от който и да е възел, да бъде кеширан в множество възли и да
бъде четен (споделен) или да бъде кеширан изключително и с възможност за запис в точно един възел. В
допълнение към състоянието на всеки блок, директорията трябва да проследява набора от възли, които
имат копие на блок; ние използваме набор, наречен Sharers, за да изпълним тази функция. В мултипроцесори
с по-малко от 64 възела (всеки от които може да представлява четири до осем пъти повече процесори), този
Заявките за директория трябва да актуализират набора Sharers и също така да прочетат набора, за да
извършат обезсилвания.
Директорията получава три различни заявки: пропуск при четене, пропуск при запис и обратно записване
Тъй като всички стимулационни съобщения са външни, всички действия се показват в сиво.
Нашият опростен протокол предполага, че някои действия са атомарни, като искане на стойност и
действия всяка държава. Когато един блок е в некеширано състояние, копието в паметта е текущата стойност,
Пропускане при четене —Възелът, който иска, получава исканите данни от паметта, а възелът, който
изпраща заявката, става единственият възел за споделяне. Състоянието на блока се прави споделено.
Machine Translated by Google
Прочетете мис
Пишете мис
Пишете мис
Прочетете мис
ищяледо}пPС
={
ищяледоп}С
={
нн
рстоив
атт;е оготатО
йн н
дс
Fetch; отговор на стойността на данните; Споделящи = Споделящи + {P}
Обратно
записване на данни
Изключителен
(чети пиши)
Извличане/невалидиране
Пишете
Споделящи = {P}
Пропуснат запис —Възелът, който иска, получава стойността и става възел за споделяне.
Блокът е направен изключителен, за да покаже, че единственото валидно копие е
кеширано. Споделящи посочва самоличността на собственика.
Пропуснат запис —Възелът, който иска, получава стойността. Всички възли в набора Shar-
ers се изпращат невалидни съобщения, а наборът Sharers трябва да съдържа
самоличността на възела, който иска. Състоянието на блока е изключително.
Пропуснато четене—на собственика се изпраща съобщение за извличане на данни, което причинява състоянието на
блокът в кеша на собственика да премине към споделен и кара собственика да
set Sharers, който все още съдържа самоличността на процесора, който е бил
го обратно. Това обратно записване прави копието на паметта актуално (домашната директория по
Пропуснете писане —блокът има нов собственик. Изпраща се съобщение до стария собственик,
Тази диаграма на прехода на състоянието на Фигура 5.23 е опростена, точно както беше в
оптимизации. По-специално, в този протокол, когато възникне пропуск при четене или запис за a
данните от възела на собственика към възела, който иска, директно (както и извършване на обратно
обаче, нови и допълнителни проблеми, които описваме в Приложение I. В раздел 5.8 описваме накратко
Приложение I.
и бариери. Като цяло, архитектите не очакват потребителите да използват основните хардуерни примитиви,
и сложно. Нека започнем с един такъв хардуерен примитивен елемент и да покажем как може да бъде
ако някой друг процесор вече е поискал достъп и 0 в противен случай. В последния
също извлича 0.
Например, помислете за два процесора, всеки от които се опитва да извърши обмена едновременно:
прави размяната. Ключът към използването на примитива за обмен (или суап) за внедряване на
два процесора, които се опитват да настроят променливата за синхронизация по този начин, и двамата да
Прилагането на една операция с атомна памет въвежда някои предизвикателства, тъй като
изисква както четене на паметта, така и запис в една непрекъсваема инструкция. Това изискване
усложнява прилагането на кохерентност, тъй като хардуерът не може да позволи никакви други
операции между четене и запис и въпреки това не трябва да блокира.
Алтернатива е да има двойка инструкции, където втората инструкция връща стойност, от която
може да се заключи дали двойката инструкции е била изпълнена, сякаш инструкциите са атомарни.
Двойката инструкции е ефективно атомарна, ако изглежда, че всички други операции, изпълнени от
който и да е процесор, са възникнали преди или след двойката. По този начин, когато една двойка
инструкции е ефективно атомарна, никой друг процесор не може да промени стойността между
двойката инструкции.
Двойката инструкции включва специално зареждане, наречено зареждане, свързано или
зареждане заключено , и специално запаметяване, наречено зареждане условно. Тези инструкции се
използват последователно: Ако съдържанието на местоположението в паметта, указано от свързаното
зареждане, се промени, преди да се появи условието за съхраняване към същия адрес, тогава
условието за съхранение е неуспешно. Ако процесорът извърши контекстно превключване между
двете инструкции, тогава условието за съхраняване също е неуспешно. Условието за съхраняване е
дефинирано да връща 1, ако е било успешно, и 0 в противен случай. Тъй като свързаното зареждане
връща първоначалната стойност и условното съхраняване връща 1 само ако успее, следната
последователност прилага атомен обмен на мястото в паметта, указано от съдържанието на R1:
DADDUIR2,R0,#1
lockit: EXCHR2,0(R1) ;атомен обмен BNEZR2,lockit ;вече
заключено?
Machine Translated by Google
Кохерентно състояние на
1 Има заключване Започва въртене, тествайки дали Започва въртене, тествайки Споделено Пропуските на кеша за P1 и P2 са
2 Задаване на заключване на 0 (Получено невалидно) (Получено невалидно) Изключително (P0) Записване на невалидна променлива за
заключване от P0.
7 Swap завършва и връща 1 и Въведете критичната секция Ексклузивно (P1) Услуги за автобус/директория P1
задава lock = 1 пропуск в кеша; изпраща invalidate и
заключване = 0
Фигура 5.24 Стъпки на кохерентност на кеша и трафик на шина за три процесора, P0, P1 и P2. Тази цифра предполага запис
обезсилва съгласуваността. P0 започва с заключването (стъпка 1), а стойността на заключването е 1 (т.е. заключено); първоначално е изключителен
и притежаван от P0 преди да започне стъпка 1. P0 излиза и отключва ключалката (стъпка 2). P1 и P2 се състезават, за да видят кой чете
отключена стойност по време на размяната (стъпки 3 до 5). P2 печели и влиза в критичната секция (стъпки 6 и 7), докато P1's
опитът е неуспешен, така че започва да чака завъртане (стъпки 7 и 8). В реална система тези събития ще отнемат много повече от 8 часа
отметки, тъй като придобиването на автобуса и отговарянето на пропуски отнема много повече време. След като бъде достигната стъпка 8, процесът може да се повтори
Първият клон образува въртящия се контур; вторият клон разрешава състезания, когато
два процесора виждат наличната ключалка едновременно.
Machine Translated by Google
P1: А = 0; P2: B = 0;
..... .....
А = 1; B = 1;
L1: ако (B == 0)... L2: ако (A == 0)...
Пример Да предположим, че имаме процесор, при който липсата на запис отнема 50 цикъла, за да се установи
собственост, 10 цикъла за издаване на всяко обезсилване след установяване на собствеността и
80 цикъла за завършване на невалиден и да бъде потвърден, след като бъде издаден.
Ако приемем, че четири други процесора споделят кеш блок, колко време отнема запис
пропуснете спиране на процесора за запис, ако процесорът е последователно последователен?
Да приемем, че невалидните трябва да бъдат изрично потвърдени, преди контролерът на кохерентността
да разбере, че са завършени. Да предположим, че можем да продължим да изпълняваме
след придобиване на собствеността върху записа, без да се изчакват обезсилванията;
колко време ще отнеме писането?
Отговор Когато чакаме невалидни, всяко записване отнема сумата от времето за собственост плюс
времето за завършване на инвалидите. Тъй като невалидните могат да се припокриват, имаме нужда
безпокойте се само за последния, който започва 10 + 10 + 10 + 10 = 40 цикъла след
се установява собственост. Следователно общото време за запис е 50 + 40 + 80 = 170
цикли. За сравнение, времето за притежание е само 50 цикъла. С подходящи
реализации на буфер за писане, дори е възможно да продължите, преди да е собствеността
установени.
Гледката на програмиста
запис) на тази променлива от друг процесор са разделени от двойка операции за синхронизиране, едната
Като прост пример, помислете за променлива, която се чете и актуализира от два различни процесора.
и едно заключване (преди четенето). Разбира се, ако два процесора пишат променлива
без междинни четения, тогава записите също трябва да бъдат разделени от операции за синхронизиране.
Това наблюдение е вярно преди всичко, защото ако достъпите са били несинхронизирани,
изпълнението ще определи кой процесор е спечелил надпреварата за данни и по този начин ще повлияе на
работят в бъдещите поколения на мултипроцесора. Вместо това почти всички програмисти ще изберат да
последователна последователност.
четат и пишат поръчки, те се отпускат. Ние определяме подрежданията чрез набор от правила на
1. Разхлабването на подреждането W R води до модел, известен като тотално подреждане в магазина или
последователност на процесора. Тъй като това подреждане запазва подреждането сред записите,
много програми, които работят при последователна последователност, работят при това
Чрез облекчаване на тези подреждания, процесорът може евентуално да получи значителни предимства в
определяне точно какво означава записът да завърши и решаване кога процесорите могат да видят
Тъй като синхронизацията е силно специфична за много процесори и податлива на грешки, очакванията
Една алтернативна гледна точка, която обсъждаме по-подробно в следващия раздел, твърди, че със
интересни дизайнерски проблеми, които пресичат целия спектър, засягайки и двата хардуера
набор от легални оптимизации на компилатора, които могат да бъдат извършени върху споделени данни. в
запис на два различни споделени елемента от данни, тъй като подобни трансформации биха могли
засягат семантиката на програмата. Това предотвратява дори сравнително прости оптимизации, като
например разпределение на регистър на споделени данни, тъй като такъв процес обикновено
тези, написани на High Performance FORTRAN (HPF)—програмите трябва да бъдат синхронизирани и точките
практическа гледна точка, където липсата на единни модели вероятно ще забави напредъка
Както видяхме в глава 3, спекулациите могат да се използват за скриване на латентността на паметта. То може
също да се използва за скриване на латентност, произтичаща от модел на стриктна последователност, давайки много
извън строя. Изпълнението на препратките към паметта не по ред може да генерира нарушения на
би било същото, както ако всички достъпи бяха завършени по ред и може да постигне
това чрез откриване кога резултатите може да се различават. Подходът е привлекателен, защото
заедно със спекулативното изпълнение като модел на последователност по избор. Неговият аргумент има три
модел. Второ, такова внедряване добавя много малко към разходите за внедряване
Machine Translated by Google
на спекулативен процесор. Трето, такъв подход позволява на програмиста да разсъждава с помощта на по-
прости модели на програмиране на последователна или процесорна консистенция. Дизайнерският екип на MIPS
и фактът, че споделените данни често са достъпни чрез указатели или индексиране на масиви
и доведе до значителни предимства в производителността, които авторите на компилатори биха искали да бъдат
върху глобалната връзка и латентността на пропуските в кеша. Ако кешът също така предоставя многостепенно
Помислете за пример на две нива: Всеки пропуск в L1 или удря в L2, или генерира a
пропуснете в L2, което води до пренасянето му както в L1, така и в L2. По същия начин, всяко обезсилване
че попаденията в L2 трябва да бъдат изпратени до L1, където това ще доведе до анулирането на блока
ако съществува.
Изборът на различни размери на блока е доста разумен, тъй като L2 ще бъде много по-голям и
имат много по-дълъг компонент на латентност в своето наказание за пропуски и следователно ще искат да използват
Например, ако размерът на блока на L2 е четири пъти по-голям от този на L1, тогава ще има пропуск в L2
Пример Да приемем, че L2 има размер на блок четири пъти по-голям от L1. Покажете как пропуск за an
адрес, който причинява заместване в L1 и L2, може да доведе до нарушаване на свойството за включване.
Многопоточност
Бенчмарк CPI за нишка CPI на ядро Ефективен CPI за осем ядра Ефективен IPC за осем ядра
Фигура 5.25 CPI за нишка, CPI за ядро, ефективният осемядрен CPI и ефективният IPC (обратен на
CPI) за осемядрения процесор Sun T1.
wupwise
плувам
mgrid
приложение
меса
галгел
изкуство
изравнявам се
facerec
усилвател
Лукас
fma3d
sixtrack
apptu
gzip
vpr
gcc
mcf
хитър
анализатор
еон
perlbmk
празнина
вихър
bzip2
twolf
Фигура 5.26 Сравнение на SMT и еднонишкова (ST) производителност на осемпроцесорния IBM eServer p5
575. Обърнете внимание, че у-оста започва с ускорение от 0,9, загуба на производителност. Има само един процесор във всяко Power5 ядро
активен, което трябва леко да подобри резултатите от SMT чрез намаляване на разрушителната намеса в паметта
система. Резултатите от SMT се получават чрез създаване на 16 потребителски нишки, докато резултатите от ST използват само осем нишки; с
само една нишка на процесор, Power5 се превключва на еднопоточен режим от операционната система. Тези резултати са
събрани от Джон Маккалпин от IBM. Както можем да видим от данните, стандартното отклонение на резултатите за SPECfpRate
е по-висока от тази за SPECintRate (0,13 срещу 0,07), което показва, че подобрението на SMT за FP програмите вероятно ще
варира в широки граници.
Machine Translated by Google
на производителността, тъй като се добавят допълнителни процесори. След като разгледаме тези данни,
ще разгледаме по-подробно многоядрената производителност на Intel Core i7.
Показваме производителността за три набора от показатели: SPECintRate,
SPECfpRate и SPECjbb2005. Бенчмарковете SPECRate, които събираме
заедно, илюстрират производителността на тези мултипроцесори за паралелизъм на ниво заявка, тъй
като се характеризира с паралелно и припокриващо се изпълнение на независими програми. По-
специално не се споделя нищо друго освен системни услуги.
SPECjbb2005 е мащабируем Java бизнес бенчмарк, който моделира три нива
система клиент/сървър, с фокус върху сървъра и е подобна на бенчмарка
използвани в SPECPower, които разгледахме в Глава 1. Упражнения за бенчмарк
имплементациите на Java Virtual Machine, компилатор точно навреме, боклук
колекция, нишки и някои аспекти на операционната система; той също така тества скалируемостта на
многопроцесорни системи.
Фигура 5.28 показва производителността на бенчмарковете на процесора SPECRate като
броят на ядрата се увеличава. Постига се почти линейно ускорение като брой на
процесорни чипове и следователно броят на ядрата се увеличава.
Фигура 5.29 показва подобни данни за бенчмарка SPECjbb2005. Компромисите между използването
на повече ILP и фокусирането само върху TLP са сложни и са
силно зависи от натоварването. SPECjbb2005 е работно натоварване, което се мащабира с добавянето
на допълнителни процесори, задържайки времето, а не размера на проблема,
Machine Translated by Google
Особеност AMD Opteron 8439 IBM Power 7 Intel Xenon 7560 Слънце Т2
Макс. ядра/чип 6 8 8 8
Нишки/ядро 1 4 2 8
Тактова честота 2,8 GHz 4,1 GHz 2,7 GHz 1,6 GHz
Най-външният кеш L3; 6 MB; споделено L3; 32 MB (с помощта L3; 24 MB; споделено L2; 4 MB; споделено
на вградена DRAM);
споделени или частни/основни
надмножество на L1
кохерентност за поведение и
местоположение
(протокол с 13 състояния)
Разширена поддръжка за До 8 процесорни чипа До 32 процесорни чипа До 8 процесорни ядра Реализира се чрез четири
съгласуваност могат да бъдат могат да бъдат свързани с могат да бъдат кохерентни връзки на
свързани с SMP връзките. внедрени чрез процесор, които могат да
HyperTransport в пръстен, Динамична структура на Quickpath се използват за
като се използва разпределена директория. Interconnect. Поддръжка наблюдение. До два
директория или Достъпът до паметта на директории с чипа се свързват
шпиониране. Системата е NUMA. извън 8-ядрен
е симетричен външна логика. директно и до четири
чип. чрез външни ASIC.
Фигура 5.27 Обобщение на характеристиките на четири скорошни многоядрени процесора от висок клас (издания от 2010 г.)
предназначени за сървъри. Таблицата включва версиите с най-голям брой ядра на тези процесори; има версии с
по-нисък брой ядра и по-високи тактови честоти за някои от тези процесори. L3 в IBM Power7 може да бъде споделен
или разделени на по-бързи частни региони, предназначени за отделни ядра. Включваме само едночипови реализации
на многоядрени.
постоянен. В този случай изглежда има достатъчен паралелизъм за постигане на линейно ускоряване
чрез 64 ядра. Ще се върнем към тази тема в заключителните бележки, но първо
нека да разгледаме по-подробно производителността на Intel Core i7 в едночипов, четириядрен
режим.
SPECintRate SPECfpRate
4096 4096
UltraSPARC T2
Xeon X7560 2048 г
Мощност7
1024 1024
512
тсонлетидовзиорп
тсонлетидовзиорп
256 256
128
64 64
8 16 32 64 8 16 32 64
Общо ядра Ядра
Фигура 5.28 Производителността на тестовете SPECRate за три многоядрени процесора при увеличаване на броя на
процесорните чипове. Забележете, че за този силно паралелен бенчмарк се постига почти линейно ускоряване. И двата
графика са в логаритмична скала, така че линейното ускоряване е права линия.
8192 K
UltraSPARC T2
Xeon X7560
Мощност7
2048 К
тсонлетидовзиорп
512 К
128 К
8 16 32 64
Ядра
Фигура 5.29 Производителността на теста SPECjbb2005 за три многоядрени процесора, тъй като
броят на процесорните чипове се увеличава. Забележете, че за този паралелен бенчмарк се
постига почти линейно ускоряване.
3.5 1.06
Ускоряване на Java
1,00
2.5 0,98
еинерокPс7и
2
4
уi
0,96
P7и
реф
витгк
анй
тсо н 2
4
еi
2 0,94
0,92
1.5 0,90
0,88
1 0,86
2P 4P
Ядра
4 1.20
Ускоряване на Java
Ускоряване на PARSEC
1.15
Енергийна ефективност на Java
3.5
PARSEC енергийна ефективност
1.10
3
1.05
1оxкPс7и
еине,Tр2 2
4
уi
2.5 1,00
ви,тT
анй
тсо 2
р
гк P7и
1еxф
н 2
4
еi
0,95
2
0,90
1.5
0,85
1 0,80
2Px1T 2Px2T 4Px1T 4Px2T
Като се има предвид липсата на зрялост в нашето разбиране за паралелни изчисления, има
много скрити капани, които ще бъдат разкрити или от внимателни дизайнери, или от
нещастници. Като се има предвид голямото количество реклами, които заобиколиха мултипроцесорите
през годините, често срещаните заблуди изобилстват. Включили сме селекция от тях.
Клопка Измерване на производителността на мултипроцесорите чрез линейно ускоряване спрямо времето за изпълнение.
Едно тълкуване на закона беше, че тъй като части от всяка програма трябва да бъдат
последователен, има ограничение за полезния икономически брой процесори - да речем,
100. Като показва линейно ускоряване с 1000 процесора, тази интерпретация на
Законът на Амдал беше опроверган.
Основата за твърдението, че законът на Амдал е „преодолян“, е
използване на мащабирано ускоряване, наричано още слабо мащабиране. Изследователите мащабираха
бенчмарка, за да имат размер на набора от данни, който беше 1000 пъти по-голям, и сравниха времето
за еднопроцесорно и паралелно изпълнение на мащабирания бенчмарк. За това специално
алгоритъм, последователната част на програмата беше постоянна, независима от
размер на входа, а останалото беше напълно паралелно - следователно, линейно ускоряване с 1000
процесори. Тъй като времето за изпълнение нарастваше по-бързо от линейното, всъщност програмата
работи по-дълго след мащабиране, дори и с 1000 процесора.
Ускоряването, което предполага мащабиране на входа, не е същото като истинското ускоряване и
съобщаването му, сякаш е било, е подвеждащо. Тъй като често се изпълняват паралелни бенчмаркове
различни по големина мултипроцесори, важно е да се уточни какъв тип приложение
мащабирането е допустимо и как трябва да се направи това мащабиране. Макар и просто
Machine Translated by Google
мащабирането на размера на данните с броя на процесорите рядко е подходящо, като се приеме, че е фиксиран
размерът на проблема за много по-голям брой процесори (наречен силно мащабиране) често е
също е неподходящо, тъй като е вероятно потребителите с много по-голям мултипроцесор да изберат
да стартират по-голяма или по-подробна версия на приложение. Вижте
Приложение I за повече дискусии по тази важна тема.
еднопроцесорни, освен ако не могат да постигнат перфектно линейно ускоряване. Този аргумент казва
това, защото цената на мултипроцесора е линейна функция на числото
на процесорите, всичко по-малко от линейно ускоряване означава, че производителността/цената
коефициентът намалява, което прави паралелния процесор по-малко рентабилен от използването на уни-
процесор.
Проблемът с този аргумент е, че цената не е само функция на броя на процесорите, но зависи и
от паметта, I/O и режийните разходи на системата (кутия,
захранване, свързване и т.н.). Освен това има по-малко смисъл в многоядрения
ера, когато има няколко процесора на чип.
Ефектът от включването на паметта в цената на системата беше посочен от Wood
и Хил [1995]. Използваме пример, базиран на по-нови данни, използвайки TPC-C и
SPECRate бенчмаркове, но аргументът може да бъде направен и с паралелно натоварване на научно-
научно приложение, което вероятно ще направи случая още по-силен.
Фигура 5.32 показва ускоряването за TPC-C, SPECintRate и SPECfpRate на
мултипроцесор IBM eServer p5, конфигуриран с 4 до 64 процесора. Фигурата
показва, че само TPC-C постига по-добро ускоряване от линейното. За SPECintRate
и SPECfpRate, ускоряването е по-малко от линейно, но също и цената, тъй като за разлика от TPC-C
размерът на основната памет и диска, изискван и двете, се мащабират по-малко от линейно.
Както показва фигура 5.33 , по-големият брой процесори всъщност може да бъде по-рентабилен
от конфигурацията с четири процесора. При сравняване на разходите и ефективността на
два компютъра, трябва да сме сигурни, че включваме точни оценки както на общите системни
разходи, така и на това каква производителност е постижима. За много приложения с по-големи
изисквания към паметта, подобно сравнение може драматично да увеличи привлекателността
използване на мултипроцесор.
Има дълга история на изоставане на софтуера при мултипроцесорите, вероятно защото софтуерните
проблеми са много по-трудни. Даваме един пример за
показват тънкостта на проблемите, но има много примери, които можем да изберем
от!
72
Линейно ускорение
64
Ускоряване на TPM
Ускоряване на SPECintRate
56 Ускоряване на SPECfpRate
48
40
ироксУ
32
24
16
0
0 8 16 24 32 40 48 56 64
Брой процесори
1.15
TPM производителност/цена
SPECint производителност/цена
1.10 SPECfp производителност/цена
1.05
1,00
со
/атн ол
рн ти
сец ро
од о
пав иаи
ре
имзм р
ятон пП
тсреиц
чс
0,95
0,90
0,85
0 8 16 24 32 40 48 56 64
Брой процесори
Фигура 5.33 Производителност/цена спрямо 4-процесорна система за три бенчмарка, изпълнявани на IBM eServer
p5 мултипроцесор, съдържащ от 4 до 64 процесора, показва, че по-големият брой процесори може да бъде като цена
ефективен като 4-процесорна конфигурация. За TPC-C конфигурациите са тези, използвани в официалните серии, които
означава, че дискът и паметта се мащабират почти линейно с броя на процесорите и машина с 64 процесора е приблизително два пъти
по-скъпа от версия с 32 процесора. Обратно, дискът и паметта се мащабират по-бавно
(въпреки че все още е по-бърз от необходимото за постигане на най-добрия SPECRate при 64 процесора). По-специално, дисковите
конфигурации преминават от едно устройство за 4-процесорната версия до четири устройства (140 GB) за 64-процесорната версия. Паметта е
мащабиран от 8 GB за 4-процесорната система до 20 GB за 64-процесорната система.
Тактова честота
Фигура 5.34 Характеристики за набор от части на Intel, базирани на микроархитектурата Nehalem. Тази диаграма все още
свива различни записи във всеки ред (от 2 до 8!). Цената е при поръчка на 1000 бр.
Machine Translated by Google
Синхронизация
5.1 [10/10/10/10/10/10/10] <5.2> За всяка част от това упражнение приемете първоначалното състояние
на кеша и паметта, както е показано на фигура 5.35. Всяка част от това упражнение определя
последователност от една или повече операции на процесора във формата:
където P# обозначава CPU (напр. P0), <op> е операцията на CPU (напр. четене или запис),
<address> обозначава адреса на паметта и <value> посочва новата дума, която да бъде
присвоена на операция за запис . Третирайте всяко действие по-долу като независимо
приложено към първоначалното състояние, както е показано на Фигура 5.35. Какво е
резултатното състояние (т.е. състояние на съгласуваност, етикети и данни) на кеш паметта и паметта след даденото д
Показване само на блоковете, които се променят; например P0.B0: (I, 120, 00 01) показва, че
блокът B0 на CPU P0 има крайно състояние I, етикет 120 и думи с данни 00 и 01. Също така,
каква стойност се връща от всяка операция за четене?
Machine Translated by Google
P0 P1 P3
B0 аз 00 10 B0 аз 00 10 B0 С 00 20
B1 С 00 08 B1 М 00 68 B1 С 00 08
B2 М 00 30 B2 аз 00 10 B2 аз 00 10
B3 аз етикет 100 108
00110 11810 B3 С етикет 100 12800
110 118 18 B3 аз етикет 120 108
00110 11810
памет
Адрес Данни
100 00 10
108 00 08
110 00 10
118 00 18
120 00 20
128 00 28
130 00 30
... ... ...
прочетете 110
Пропуските при четене и запис на CPU генерират цикли на спиране на Nmemory и Ncache , ако са задоволителни
управлявани съответно от паметта и кеша.
Ударите при запис на CPU, които генерират невалидна, водят до цикли на спиране на Ninvalidate .
Ncache 40 130
Невалидиране 15 15
Nwriteback 10 10
5.3 [20] <5.2> Много протоколи за подслушване на кохерентност имат допълнителни състояния, преходи
на състояния или шинни транзакции, за да намалят режийните разходи за поддържане на
кохерентността на кеша. В Реализация 1 на Упражнение 5.2, пропуските водят до по-малко цикли
на спиране, когато се доставят от кеша, отколкото когато се доставят от паметта. Някои протоколи
за съгласуваност се опитват да подобрят производителността чрез увеличаване на честотата на
този случай. Обичайна оптимизация на протокола е въвеждането на притежавано състояние
(обикновено означавано O). Състоянието Owned се държи като Споделеното състояние, тъй като
възлите могат да четат само притежавани блокове, но се държи като модифицираното състояние,
тъй като възлите трябва да предоставят данни за пропуски на четене и запис на други възли в
притежавани блокове. Пропускане на четене на блок в състояния Модифициран или Притежаван
доставя данни на искащия възел и преминава към състояние Притежаван. Пропуснат запис в
5.5 [20] <5.2> Някои приложения първо четат голям набор от данни, след което променят повечето или
всички от тях. Базовият протокол за кохерентност на MSI първо ще извлече всички кеш блокове
в споделено състояние и след това ще бъде принуден да извърши невалидна операция, за да ги
надстрои до модифицирано състояние. Допълнителното забавяне оказва значително влияние
върху някои натоварвания. Допълнителна оптимизация на протокола елиминира необходимостта
от надграждане на блокове, които се четат и по-късно записват от един процесор. Тази
оптимизация добавя състоянието Exclusive (E) към протокола, което показва, че никой друг
възел няма копие на блока, но той все още не е модифициран. Кеш блок влиза в изключително
състояние, когато пропуснатото четене е удовлетворено от паметта и никой друг възел няма
валидно копие. Процесорът чете и записва в този блок, продължавайки без по-нататъшен
трафик на шина, но записите на процесора карат състоянието на кохерентност да премине към
Модифицирано. Exclusive се различава от Modified, тъй като възелът може безшумно да замества
Exclusive блокове (докато Modified блоковете трябва да бъдат записани обратно в паметта).
Освен това пропускът при четене на изключителен блок води до преход към споделен, но не
изисква възелът да отговори с данни (тъй като паметта има актуално копие). Начертайте нови
диаграми на протоколи за протокол MESI, който добавя състоянието Exclusive и преминава към
състоянията Modified, Shared и Invalid на базовия MSI протокол.
5.6 [20/20/20/20/20] <5.2> Да приемем съдържанието на кеша на Фигура 5.35 и времето на Реализация 1
на Фигура 5.36. Какви са общите цикли на спиране за следващите кодови последователности
както с основния протокол, така и с новия протокол MESI в упражнение 5.5? Да приемем, че
преходите на състояния, които не изискват транзакции на взаимно свързване, не водят до
допълнителни цикли на спиране.
DADDUI R2,R0,#1
блокировка: EXCH R2,0(R1)
BNEZ R2, lockit
Machine Translated by Google
отключване: SW R0,0(R1)
Както беше обсъдено в раздел 5.5, по-оптимизираното заключване на въртене използва кохерентност на
кеша и използва натоварване, за да провери заключването, което му позволява да се върти със споделена
променлива в кеша:
заключването. ° С. [20] <5.5> Използвайки обикновеното заключване на въртене, приблизително колко свързва
се случват транзакции?
д. [20] <5.5> Използване на функцията за тестване и тестване и задаване на центрофугиране, приблизително как
5.8 [20/20/20/20] <5.6> Последователната последователност (SC) изисква всички четения и записи да
изглеждат изпълнени в някакъв пълен ред. Това може да наложи процесорът да спре в
определени случаи, преди да изпълни инструкция за четене или запис. Разгледайте следната
кодова последователност:
напишете А,
прочетете Б
При SC процесорът трябва да спре четенето B, докато не може да нареди (и по този начин да
извърши) запис A. Простите реализации на SC ще спрат процесора, докато кешът не получи
данните и може да извърши записа. По-слабите модели на последователност облекчават
ограниченията за подреждане при четене и запис, намалявайки случаите, в които процесорът
трябва да спре. Моделът на съгласуваност на Total Store Order (TSO) изисква всички записи да
изглеждат в общ ред, но позволява четенията на процесора да предават свои собствени записи.
Това позволява на процесорите да прилагат буфери за запис, които държат ангажирани записи,
които все още не са подредени по отношение на записи на други процесори. На четенията е
разрешено да преминат (и потенциално да заобиколят) буфера за запис в TSO (което не могат
да направят при SC). Да приемем, че една операция на паметта може да бъде изпълнена на
цикъл и че операциите, които попадат в кеша или които могат да бъдат удовлетворени от
буфера за запис, не въвеждат цикли на спиране. Пропуснатите операции водят до закъсненията, изброени
Machine Translated by Google
Да приемем съдържанието на кеша от Фигура 5.35. Колко цикъла на спиране възникват преди
всяка операция както за моделите на последователност SC, така и за TSO?
д. [20] <5.6> P0: запис 100 <-- 80 P0: запис 110 <--
90
Чип0 Чип1
P0 P1 P0 P1
P3 P2 P3 P2
L2$ L2$
M0 M1
B0 М 00 10 B0 М 00 68 B0 С 120 00 108 00 20
B1 С 00
етикет 100 108 08 B1 С 00
етикет 130 118 18 B1 С 08
L2$, 0 L2$,1
M0 M1
100 DM C0 00 10 120 ДС C1 00 20
108 ДС C0, C1 00 08 128 DI - 00 28
110 DI - 00 10 130 DM C0 00 68
118 ДС C0 00 18 138 DI - 00 96
където P# обозначава CPU (напр. P0,0), <op> е операцията на CPU (напр. четене или запис),
<address> обозначава адреса на паметта и <value> посочва новата дума, която трябва да
бъде присвоена на запис операция. Какво е крайното състояние (т.е. състояние на
кохерентност, споделящи/собственици, тагове и данни) на кеш паметта и паметта след
завършване на дадената последователност от операции на процесора? Също така, каква
стойност се връща от всяка операция за четене?
Machine Translated by Google
80
5.11 [25] <5.4> Упражнение 5.3 ви помоли да добавите състоянието Owned към простия протокол за
наблюдение на MSI. Повторете въпроса, но с простия протокол на директорията по-горе.
5.12 [25] <5.4> Обсъдете защо добавянето на Изключително състояние е много по-трудно да се
направи с простия протокол на директорията, отколкото в протокола за наблюдение. Дайте
пример за видовете проблеми, които възникват.
които значително подобряват честотната лента, но също така въвеждат преходни състояния и неатомични
сделки. Протоколите за кохерентност на кеша на директориите са по-мащабируеми от шпионирането
протоколи за кохерентност на кеша по две причини. Първо, подслушващите протоколи за кохерентност
на кеша излъчват заявки към всички възли, ограничавайки тяхната мащабируемост. Справочни протоколи
използвайте ниво на индиректност - съобщение до директорията - за да сте сигурни, че заявките са
изпраща се само до възлите, които имат копия на блок. Второ, адресната мрежа на a
системата за наблюдение трябва да доставя заявки в общ ред, докато протоколите на директорията
може да облекчи това ограничение. Някои протоколи на директория не предполагат мрежово подреждане,
което е полезно, тъй като позволява адаптивни техники за маршрутизиране за подобряване на мрежата
честотна лента. Други протоколи разчитат на ред от точка до точка (т.е. съобщения от възел
P0 до възел P1 ще пристигне по ред). Дори и с това ограничение за подреждане, директория
протоколите обикновено имат повече преходни състояния от шпионските протоколи. Фигура 5.39
Държавно четене Пишете инв GetS GetM Ack Данни Последно потвърждение
IMAD
M Четене Пишете Изпращане грешка Изпратете Грешка при изпращане на данни/I грешка грешка
MSA
Прочети/С
Данни, направи
Прочети/аз
Данни/
IMA
PutMS PutMS
Състояние GetS GetM PutM (собственик) (несобственик) PutM (собственик) (несобственик)
DI Изпращане на данни, добавяне Изпращане на данни, изчистване грешка Грешка при изпращане на PutM_Ack Изпратете PutM_Ack
към споделящи/DS на споделящите, задаване на собственик/
DM
DS Изпращане на данни, добавяне Изпратете INV до грешка Грешка при изпращане на PutM_Ack Изпратете PutM_Ack
към споделящи/DS споделящите, задайте
собственик, изпратете данни/DM
DM Forward GetS, добави към Препратете GetM, Запазване на данни, изпращане Изпращане на PutM_Ack Запазване на данни, добавяне Изпратете PutM_Ack
споделящите/ изпратете INV до PutM_Ack/DI към споделящи, изпращане
DMSD Forward GetS, добавете Препращане на GetM, Запазване на данни, изпращане Изпращане на PutM_Ack Запазване на данни, добавяне Изпратете PutM_Ack
към споделящите изпращане на INV до PutM_Ack/DS към споделящи, изпращане
DM
48
5.15 [20/20/20/20/20] <5.4> За мултипроцесора, илюстриран на Фигура 5.37 (с дезактивирани L2 кешове), прилагащ
протокола, описан на Фигура 5.39 и Фигура 5.40, приемете следните закъснения: CPU четене и запис
на удари не генерира цикли на застой.
Write) отнема цикли на липса само ако е извършено в отговор на събитието Last Ack (в противен случай
се извършва, докато данните се копират в кеша).
Четене или запис на CPU, което генерира събитие за замяна, издава съответното
съобщение GetShared или GetModified преди съобщението PutModified (например,
използвайки буфер за обратно записване).
Събитие на кеш контролера, което получава съобщение с данни и актуализира кеша, има латентност
Lrcv_data. Контролерът
Съобщение без данни (напр. заявка, невалидност, Ack) има Lreq_msg цикли на мрежово забавяне.
Съобщението с
латентност от 20 цикъла към всяко съобщение, което преминава от чип 0 към чип 1
и обратно.
Действие Латентност
Send_msg 6
Изпращане на данни 20
Rcv_данни 15
Четене на паметта 100
Памет за запис 20
инв 1
акк 4
Req-msg 15
Data-msg 30
5.16 [20] <5.4> В случай на пропуск в кеша, както превключваният протокол за наблюдение
внедряването не направи това. Обяснете как това може да доведе до livelock. Дай
5.17 [20/30] <5.4> Някои протоколи на директория добавят притежавано (O) състояние към proto-col, подобно на
състояние се държи като споделеното състояние, тъй като възлите могат да четат само притежавани блокове,
но се държи като модифицираното състояние, тъй като възлите трябва да предоставят данни на други
възли' Получаване на заявки към притежавани блокове. Притежаваната държава елиминира случая
изпрати данните както към процесора, който иска, така и към паметта. В MOSI
Променен. Този оптимизиран MOSI протокол актуализира паметта само когато възел
5.18 [25/25] <5.4> Усъвършенстваният протокол за директория, описан по-горе, разчита на подредена връзка от точка
какъв проблем може да възникне, ако връзката не успее да поддържа точка до точка
Machine Translated by Google
Упражнения
5.19 [15] <5.1> Да приемем, че имаме функция за приложение от формата F(i, p), която дава частта от времето,
през което точно i процесори са използваеми, като се има предвид, че са налични общо p процесори.
Това означава, че
стр
F(i, p) 1 =
i =1
5.20 [15/20/10] <5.1> В това упражнение ние изследваме ефекта от топологията на мрежата за взаимно
свързване върху тактовите цикли на инструкция (CPI) на програми, изпълнявани на 64-процесорен
мултипроцесор с разпределена памет. Тактовата честота на процесора е 3,3 GHz, а базовият CPI на
приложение с всички препратки, попадащи в кеша, е 0,5. Да приемем, че 0,2% от инструкциите
включват справка за отдалечена комуникация. Цената на отдалечена комуникационна препратка е
(100 + 10h) ns, където h е броят на прехвърлянията в комуникационната мрежа, които отдалечената
препратка трябва да направи към паметта на отдалечения процесор и обратно. Да приемем, че
всички комуникационни връзки са двупосочни.
а. [15] <5.1> Изчислете разходите за отдалечена комуникация в най-лошия случай, когато 64-те
процесора са подредени като пръстен, като 8×8 процесорна мрежа или като хиперкуб.
(Съвет: Най-дългият комуникационен път на 2n хиперкуб има n връзки.)
b. [20] <5.1> Сравнете базовия CPI на приложението без отдалечена комуникация с CPI, постигнат с
всяка от трите топологии в част (a). ° С. [10] <5.1> Колко по-бързо е приложението без
5.21 [15] <5.2> Покажете как основният протокол за наблюдение от Фигура 5.7 може да бъде променен за
кеш за запис. Коя е основната хардуерна функционалност, която не е необходима при кеш за
записване в сравнение с кеша за обратно записване?
5.22 [20] <5.2> Добавяне на чисто ексклузивно състояние към основната кохерентност на шпионския кеш
протокол (Фигура 5.7). Покажете протокола във формата на Фигура 5.7.
5.23 [15] <5.2> Едно предложено решение за проблема с фалшивото споделяне е да се добави валиден бит на
дума. Това би позволило на протокола да обезсили дума, без да премахва целия блок, позволявайки
на процесора да запази част от блок в своя
Machine Translated by Google
кеш, докато друг процесор записва различна част от блока. Какви допълнителни усложнения се въвеждат
в основния протокол за кохерентност на кеша за наблюдение (Фигура 5.7), ако тази възможност е
включена? Не забравяйте да вземете предвид всички възможни действия на протокола.
5.24 [15/20] <5.3> Това упражнение изучава въздействието на агресивните техники за използване на паралелизма
на ниво инструкции в процесора, когато се използва при проектирането на многопроцесорни системи
със споделена памет. Помислете за две идентични системи с изключение на процесора. Система A
използва процесор с обикновен редов конвейер с единичен проблем, докато система B използва
процесор с четирипосочен проблем, изпълнение извън реда и буфер за пренареждане с 64 записа. а.
[15] <5.3> Следвайки конвенцията от Фигура 5.11, нека
обработката на транзакции (OLTP) в раздел 5.3, каква е важната разлика между работното
натоварване на OLTP и други показатели, които ограничават ползата от по-агресивен дизайн на
процесора?
5.25 [15] <5.3> Как бихте променили кода на приложение, за да избегнете фалшиво споделяне? Какво може да се
направи от компилатор и какво може да изисква програмни директиви?
5.26 [15] <5.4> Да приемем базиран на директория протокол за кохерентност на кеша. В момента директорията
има информация, която показва, че процесорът P1 има данните в „изключителен“ режим. Ако сега
директорията получи заявка за същия кеш блок от процесор P1, какво може да означава това? Какво
трябва да прави контролерът на директория?
(Такива случаи се наричат състезателни условия и са причината, поради която протоколите за
съгласуваност са толкова трудни за проектиране и проверка.)
5.27 [20] <5.4> Контролер на директория може да изпраща невалидни за редове, които са били заменени от
локалния кеш контролер. За да се избегнат подобни съобщения и да се поддържа последователност на
директорията, се използват съвети за заместване. Такива съобщения казват на контролера, че даден
блок е сменен. Променете протокола за съгласуваност на директорията от раздел 5.4 , за да използвате
такива подсказки за заместване.
5.28 [20/30] <5.4> Един недостатък на директното внедряване на директории, използващи напълно попълнени
битови вектори, е, че общият размер на информацията на директорията се мащабира като продукт (т.е.
брой процесор × блокове памет). Ако паметта се увеличава линейно с броя на процесорите, общият
размер на директорията нараства квадратично в броя на процесорите. На практика, тъй като
директорията се нуждае само от 1 бит на блок памет (който обикновено е от 32 до 128 байта), този
проблем не е сериозен за малък до умерен брой процесори. Например, ако приемем 128-байтов блок,
обемът на съхранението на директорията в сравнение с основната памет е броят на процесорите/1024,
или около 10% допълнително място за съхранение със 100 процесора. Този проблем може да бъде
избегнат, като се отбележи, че трябва да съхраняваме само количество информация, което е
пропорционално на размера на кеша на всеки процесор. Ние изследваме някои решения в тези
упражнения.
Machine Translated by Google
битове на вектор. Използвайки следи, можете да сравните тези схеми. Първо, внедрите
директорията като четирипосочен асоциативен кеш, съхраняващ пълни битови вектори,
но само за блоковете, които са кеширани извън началния възел. Ако директория
възникне пропуск в кеша, изберете запис в директория и анулирайте записа. Второ,
внедрите директорията, така че всеки запис да има 8 бита. Ако даден блок е кеширан
само един възел извън своя дом, това поле съдържа номера на възела. Ако
блокът е кеширан в повече от един възел извън своя дом, това поле е бит вектор, като всеки бит
5.29 [10] <5.5> Приложете класическата инструкция за тестване и задаване, като използвате load-linked/
двойка условни инструкции магазин .
5.30 [15] <5.5> Една често използвана оптимизация на производителността е да се добавят променливи за
синхронизиране, за да няма други полезни данни в същия кеш ред като променливата за
синхронизиране. Конструирайте патологичен пример, когато не правите това, можете
наранено представяне. Да приемем протокол за подслушване на невалиден запис.
5.32 [10/12/10/12] <5.6> Както беше обсъдено в Раздел 5.6, моделът на последователност на паметта
предоставя спецификация за това как системата памет ще изглежда на програмиста. Разгледайте следния
A=флаг=C=0.
P1 P2
флаг=1 C=A
а. [10] <5.6> В края на кодовия сегмент каква е стойността, която бихте искали
очаквам за C?
b. [12] <5.6> Система с мрежа за взаимно свързване с общо предназначение, базиран на директория
5.33 [25] <5.7> Докажете, че в кеш йерархия на две нива, където L1 е по-близо до
процесор, включването се поддържа без допълнително действие, ако L2 има поне толкова
асоциативност като L1, и двата кеша използват замяна на заменяема единица (LRU) и
и двата кеша имат еднакви размери на блокове.
на операции с памет. Тези следи могат да се възпроизвеждат чрез кеш симулатор или
и така нататък. Какви са компромисите между точността и скоростта между тези подходи?
5.35 [40] <5.7, 5.9> Мултипроцесорите и клъстерите обикновено показват повишение на производителността
по-лоша производителност при добавяне на процесори. Това означава, например, че един процесор на
Никълъс Кар
The Big Switch: Rewiring the World, от
Edison to Google (2008)
432 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
6.1 Въведение
Сиймор Крей
Считан за бащата на суперкомпютъра
1
Тази глава се основава на материал от книгата Центърът за данни като компютър: Въведение в дизайна на
Warehouse-Scale Machines, от Луиз Андре Барозу и Урс Хьолцле от Google [2009]; блогът Perspectives at
mvdirona.com и разговорите „Икономиите от мащаба на компютърните облаци“ и „Мрежите на центрове за данни са на пътя ми“,
от Джеймс Хамилтън от Amazon Web Services [2009, 2010]; и техническия доклад Над облаците: Бъркли
Изглед на облачните изчисления, от Майкъл Армбруст и др. [2009].
Machine Translated by Google
Мрежов вход/изход – архитектите на сървъра трябва да осигурят добър мрежов интерфейс към външния
свят, както и архитектите на WSC също. Необходима е работа в мрежа, за да се поддържат
последователни данни между множество WSC, както и за интерфейс с обществеността. Работни
натоварвания както при интерактивна, така и при пакетна обработка – докато очаквате високо
интерактивни натоварвания за услуги като търсене и социални мрежи с милиони потребители,
WSC, подобно на сървърите, също изпълняват масивни паралелни пакетни програми за изчисляване
на метаданни, полезни за такива услуги. Например, задачите на MapReduce се изпълняват, за да
преобразуват страниците, върнати от обхождане на мрежата, в индекси за търсене (вижте раздел
6.2).
434 Глава шеста Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
услуги. Четенето и записването рядко са зависими в SaaS, така че SaaS рядко трябва да се
синхронизира. Например търсенето използва индекс само за четене, а имейлът обикновено е
информация, независима от четене и писане. Ние наричаме този тип лесен паралелизъм
паралелизъм на ниво заявка, тъй като много независими усилия могат да протичат паралелно
естествено с малка нужда от комуникация или синхронизация; например актуализирането на
базата на журнал може да намали изискванията за пропускателна способност.
Като се има предвид успехът на SaaS и WSC, по-традиционните приложения като релационни бази
данни са отслабени, за да разчитат на паралелизъм на ниво заявка.
Дори зависещите от четене/запис функции понякога отпадат, за да предложат съхранение, което
може да се мащабира до размера на съвременните WSC.
Фигура 6.1 показва годишния процент на отказ на диска като 2% до 10%. Ако имаше 4 диска на
сървър и техният годишен процент на отказ е 4%, при 50 000 сървъра WSC архитектът би трябвало
да очаква да види един диск да се поврежда на час .
Отговор Можем да оценим наличността на услугата, като изчислим времето на прекъсвания поради повреда на всеки
компонент. Ще вземем консервативно най-ниското число във всяка категория на Фигура 6.1 и ще
разделим 1000 прекъсвания поравно между четири компонента. Ние игнорираме бавните дискове -
петият компонент от 1000 прекъсвания - оттогава
Machine Translated by Google
1 или 2 Неизправности в електрозахранването Загуба на мощност на целия WSC; не сваля WSC, ако UPS и генераторите работят
(генераторите работят около 99% от времето).
Неизправности на твърдия диск 2% до 10% годишен процент на повреда на диска [Pinheiro 2007]
Лоши спомени Една некоригируема DRAM грешка на година [Schroeder et al. 2009]
1000-те
Неправилно конфигурирани машини Конфигурацията доведе до ~30% от прекъсванията на обслужването [Barroso и HÖlzle
2009]
Слаби машини 1% от сървърите се рестартират повече от веднъж седмично [Barroso and HÖlzle 2009]
5000 Индивидуален сървър се срива Рестартиране на машината, обикновено отнема около 5 минути
Фигура 6.1 Списък на прекъсванията и аномалиите с приблизителната честота на възникване през първата година на
нов клъстер от 2400 сървъра. Означаваме това, което Google нарича клъстер, като масив; виж Фигура 6.5. (Въз основа на Barroso [2010].)
+
= ( + ( 4 250 250 250 +++ × 1) час 250 5000 ) × 5
Часове прекъсване на услугатаминути
Тоест, без излишък на софтуер, който да маскира многото прекъсвания, услугата е включена
тези 2400 сървъра ще бъдат изключени средно един ден в седмицата или нула девет
наличност!
436 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Днес най-популярната рамка за групова обработка в WSC е Map-Reduce [Dean and Ghemawat
2008] и нейният близнак с отворен код Hadoop. Фигура 6.2
показва нарастващата популярност на MapReduce в Google с течение на времето. (Фейсбук
изпълнява Hadoop на 2000 сървъра за пакетна обработка от 60 000 сървъра, които се очаква да
има през 2011 г.) Вдъхновен от функциите на Lisp със същото име, Map
първо прилага предоставена от програмиста функция към всеки запис на логически вход. Карта
работи на хиляди компютри, за да произведе междинен резултат от ключ-стойност
двойки. Reduce събира изхода от тези разпределени задачи и ги свива
използвайки друга функция, дефинирана от програмиста. С подходяща софтуерна поддръжка,
и двете са силно паралелни, но лесни за разбиране и използване. В рамките на 30 минути, a
начинаещ програмист може да изпълни задача MapReduce на хиляди компютри.
Например една програма MapReduce изчислява броя на срещанията на
всяка английска дума в голяма колекция от документи. По-долу е дадена опростена версия на
тази програма, която показва само вътрешния цикъл и предполага само едно срещане на всички
английски думи, намерени в документ [Dean and Ghemawat 2008]:
Брой задания на MapReduce 29 000 171 000 2 217 000 3 467 000
Фигура 6.2 Годишно използване на MapReduce в Google с течение на времето. Повече от пет години
броят на заданията на MapReduce се увеличи с коефициент 100 и средният брой на
сървъри на работно място са се увеличили с фактор 3. През последните две години увеличенията бяха фактори
от 1,6 и 1,2, съответно [Dean 2009]. Фигура 6.16 на страница 459 оценява, че работи
работното натоварване за 2009 г. на услугата за облачни изчисления EC2 на Amazon ще струва 133 милиона долара.
Machine Translated by Google
438 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
задачи и редуцирайте задачата до възлите на WSC. (Пълната версия на програмата се намира в Dean and
Ghemawat [2004].)
операция с множество данни (SIMD) (глава 4)—с изключение на това, че предавате функция на
да се приложи към данните - което е последвано от функция, която се използва при редукция
Планировчикът на MapReduce задава нови задачи въз основа на това колко бързо възлите изпълняват
предишни задачи. Очевидно една бавна задача може да задържи изпълнението на голяма
задачите, които все още не са изпълнени, и вземете резултата от това, което завърши
Друг пример за това как WSC се различават е използването на репликация на данни за преодоляване
оперативни разходи, всички WSC използват автоматизиран софтуер за наблюдение, така че един оператор
В допълнение към GFS, примери за такива мащабируеми системи за съхранение включват системата
система за съхранение на записи Bigtable [Chang 2006]. Имайте предвид, че такива системи често се изграждат
един върху друг. Например Bigtable съхранява своите регистрационни файлове и данни в GFS, както и
релационна база данни може да използва файловата система, предоставена от операционното ядро
система.
Тези вътрешни услуги често вземат различни решения от подобен софтуер
работещи на единични сървъри. Като пример, вместо да приемем, че съхранението е надеждно, като
например чрез използване на RAID сървъри за съхранение, тези системи често правят пълно
Machine Translated by Google
реплики на данните. Репликите могат да помогнат при производителността на четене, както и при
наличност; с правилно разположение репликите могат да преодолеят много други системи
повреди, като тези на фигура 6.1. Някои системи използват кодиране за изтриване вместо
пълни реплики, но константата е излишък между сървъри, а не резервиране в рамките на сървър или в
рамките на масив за съхранение. Следователно, повреда на целия сървър или
устройството за съхранение не влияе отрицателно върху наличността на данните.
Друг пример за различен подход е, че WSC софтуерът за съхранение често
използва спокойна последователност, вместо да следва всички изисквания на ACID (атомарност,
консистенция, изолация и издръжливост) на конвенционалните системи за бази данни.
Отговор Фигура 6.4 показва оригиналните тегла и новите тегла, които съвпадат
Фигура 6.3. Тези претегляния намаляват обобщената производителност с 30% от
3210 ssj_ops/ват до 2454.
Като се има предвид мащабът, софтуерът трябва да се справя с повреди, което означава, че има малко
440 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
0,03
0,025
0,02
0,015
тЧ
сар
отемте о
в
0,01
0,005
0
0 0,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1.0
Използване на процесора
Фигура 6.4 SPECPower резултат от Фигура 6.17, използвайки теглата от Фигура 6.3 вместо четни
тежести.
Machine Translated by Google
Такива WSC услуги също са склонни да разработват собствен софтуер, вместо да купуват
търговски софтуер на трети страни, отчасти за да се справят с огромния мащаб и отчасти за
да спестят пари. Например, дори при най-добрата цена-производителност платформа за TPC-C
през 2011 г., включително цената на базата данни Oracle и операционната система Windows
удвоява цената на сървъра Dell Poweredge 710. За разлика от тях Google използва Bigtable и
операционната система Linux на своите сървъри, за които не плаща лицензионни такси.
19-инчовият (48,26 см) шкаф все още е стандартната рамка за съхранение на сървъри,
въпреки че този стандарт се връща към железопътния хардуер от 30-те години на миналия
век. Сървърите се измерват в броя стелажни единици (U), които заемат в стелаж. Един U е
висок 1,75 инча (4,45 см) и това е минималното пространство, което един сървър може
заемат.
7-футов (213,36 см) шкаф предлага 48 U, така че не е случайно, че най-популярният
комутатор за шкаф е 48-портов Ethernet комутатор. Този продукт се превърна в стока, която
струва само $30 на порт за 1 Gbit/sec Ethernet връзка през 2011 г. [Barroso and Hölzle 2009].
Обърнете внимание, че честотната лента в стелажа е една и съща за всеки сървър, така че
няма значение къде софтуерът поставя изпращача и получателя, стига да са в един и същи
стелаж. Тази гъвкавост е идеална от гледна точка на софтуера.
Тези комутатори обикновено предлагат две до осем връзки нагоре, които напускат
стелажа, за да отидат до следващия по-висок комутатор в мрежовата йерархия. По този начин
честотната лента, излизаща от стелажа, е 6 до 24 пъти по-малка - 48/8 до 48/2 - от честотната
лента в стелажа. Това съотношение се нарича свръхзаписване. Уви, големият прекомерен
абонамент означава, че програмистите трябва да са наясно с последиците за
производителността, когато поставят податели и получатели в различни стелажи. Това
повишено натоварване на софтуерното планиране е друг аргумент за мрежовите комутатори,
проектирани специално за центъра за данни.
Machine Translated by Google
442 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Раков
Превключвател на масив
превключвател
1U сървър
Стелаж
Фигура 6.5 Йерархия на комутаторите в WSC. (Въз основа на фигура 1.2 от Barroso и Hölzle
[2009].)
Съхранение
Естественият дизайн е да запълните стелаж със сървъри, без каквото и да е пространство, от което се
нуждаете за основния Ethernet суич за стелажи. Този дизайн оставя отворен въпроса къде да се постави
хранилището. От гледна точка на хардуерната конструкция, най-простото решение би било да се
включат дискове в сървъра и да се разчита на Ethernet свързаност за достъп до информация на
дисковете на отдалечени сървъри. Алтернативата би била да се използва мрежово прикачено
хранилище (NAS), може би през мрежа за съхранение като Infiniband. NAS решението обикновено е по-
скъпо на терабайт място за съхранение, но предоставя много функции, включително RAID техники за
подобряване на надеждността на хранилището.
система. Моделите на локален достъп също означават висока честотна лента към локалното хранилище, както ще направим
Array Switch
Една от причините е, че цената на честотната лента на комутатора за n порта може да нарасне с n2.
444 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
10000000
100 000
10 000
Закъснение на диска (μsec)
100
10
1
DRAM честотна лента
(MB/сек)
0
Местен Стелаж Масив
Фигура 6.7 Графика на латентност, честотна лента и капацитет на йерархията на паметта на WSC за данни на Фигура
6.6 [Barroso and Hölzle 2009].
Всеки сървър съдържа 16 GB памет с време за достъп от 100 наносекунди и трансфери с 20 GBytes/
sec и 2 терабайта диск, който предлага време за достъп от 10 милисекунди и трансфери с 200
MBytes/sec. Има два гнезда на платка и те споделят един 1 Gbit/sec Ethernet порт.
Всяка двойка стелажи включва един суич за стелажи и побира 80 2U сървъра (вижте
раздел 6.7). Мрежовият софтуер плюс разходите за превключване увеличават
латентността към DRAM до 100 микросекунди и латентността на достъпа до диска до
11 милисекунди. По този начин общият капацитет за съхранение на стелаж е
приблизително 1 терабайт DRAM и 160 терабайта дисково пространство. 1 Gbit/sec
Ethernet ограничава дистанционната честотна лента към DRAM или диск в стелажа до 100 MBytes/sec.
интернет интернет
CR CR
Център за данни
Слой 3
AR AR AR AR
...
Слой 2
LB С С LB
Ключ:
• CR = L3 основен рутер
• AR = L3 рутер за достъп
С С С С
... • S=Превключвател за масив
• LB= балансиращо натоварване
• A= Стелаж с 80 сървъра
с превключвател за стелажи
АА A AA A
.. ..
Фигура 6.8 Мрежата от слой 3, използвана за свързване на масиви заедно и към Интернет [Greenberg et al. 2009]. някои
WSC използват отделен граничен рутер за свързване на интернет към комутаторите на ниво 3 на центъра за данни.
Пример Каква е средната латентност на паметта, ако приемем, че 90% от достъпите са локални към
сървъра, 9% са извън сървъра, но в стелажа, а 1% са извън него
багажник, но в рамките на масива?
( () 9%
90%100
0,1××)++ ( 1% 300 × ) = 0,09 9 3 + + = 12,09 микросекунди
или коефициент повече от 120 забавяне спрямо 100% локален достъп. ясно,
местоположението на достъпа в сървъра е жизненоважно за производителността на WSC.
Machine Translated by Google
446 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Пример Колко време отнема прехвърлянето на 1000 MB между дискове в сървъра, между сървъри в стелажа и между
сървъри в различни стелажи в масива?
Колко по-бързо е прехвърлянето на 1000 MB между DRAM в трите случая?
По този начин, за блокови трансфери извън един сървър, дори няма значение дали данните са в
паметта или на диска, тъй като превключвателят на стелажа и превключвателят на масива са тесните
места. Тези ограничения на производителността засягат дизайна на софтуера WSC и вдъхновяват
необходимостта от превключватели с по-висока производителност (вижте раздел 6.6).
Като се има предвид архитектурата на ИТ оборудването, сега сме готови да видим как да го
приютим, захранваме и охладим и да обсъдим разходите за изграждане и експлоатация на целия
WSC в сравнение само с ИТ оборудването в него.
Разпределение
на високо напрежение
ИТ
Генератори
натоварване (сървъри, съхранение, мрежа, ...)
13,2
115
кв
кв
UPS & Gen
често на 480 v
апаратура и проводници
80V
2
Подстанция UPS:
Трансформърс Трансформърс
Ротационен или акумулаторен
Фигура 6.9 Разпределение на мощността и къде възникват загуби. Имайте предвид, че най-доброто подобрение е 11%. (От Хамилтън
[2010].)
4. Има още една стъпка надолу към двуфазно захранване при 208 волта, което сървърите могат да
използват, отново при 98% ефективност. (Вътре в сървъра има още стъпки за намаляване на
напрежението до това, което чиповете могат да използват; вижте раздел 6.7.)
загуба
Machine Translated by Google
изпар
съоръ 448 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Проду
~200
при
ден
gal/ 5. Конекторите, прекъсвачите и електрическото окабеляване към сървъра имат колектив
ефективност 99%.
Първична
Топлообменник
помпа
Охладителна (Икономайзер от страната на водата)
кула
CWS A/C
компресор
Изтичане
Фенове Климатизатор
за
Студ компютърна зала
ощероГ
Фигура 6.10 Механичен дизайн за охладителни системи. CWS означава циркулираща водна система. (От Хамилтън
[2010].)
Machine Translated by Google
много. Някои WSC използват оборудването си при значително над 71°F (22°C).
използва по-студения външен въздух за охлаждане на водата, преди да бъде изпратена към чилърите. The
температурата, която има значение, се нарича температура на мокрия термометър. Температурата на мокрия
вода върху него. Това е най-ниската температура, която може да се постигне чрез изпаряване на водата
с въздух.
Топлата вода тече върху голяма повърхност в кулата, пренасяйки топлина към
външен въздух чрез изпаряване и по този начин охлаждане на водата. Тази техника се нарича
икономия на зоната за излитане и кацане. Алтернатива е да използвате студена вода вместо студен въздух.
WSC на Google в Белгия използва междинен охладител вода-вода, който приема студена вода
от индустриален канал за охлаждане на топлата вода от вътрешността на WSC.
дори при използване на симулатори на въздушен поток. Ефективните конструкции запазват температурата на
хладен въздух, като намали шансовете за смесване с горещ въздух. Например WSC може
има редуващи се канали за горещ въздух и студен въздух чрез ориентиране на сървъри в противоположни
посоки в редуващи се редове стелажи, така че горещият отработен въздух духа в редуващи се посоки.
CRAC представлява 10% до 20% от мощността на ИТ оборудването, което се дължи най-вече на феновете.
поддръжка, след като извадите режийните разходи за разпределение на мощността и охлаждане. The
максималната мощност, която един сървър може да черпи. Тогава първата стъпка е да
измерване на един сървър при различни работни натоварвания, които да бъдат разгърнати в
игнориран, за да започне.)
че има значителна разлика между това, което хиляди сървъри теоретично биха могли да направят в най-
лошия случай, и това, което ще направят на практика, тъй като никакви реални работни натоварвания няма
450 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Hölzle [2009] докладва следното за Google WSC, внедрен през 2007 г.:
10% за дискове
5% за работа в мрежа
Широко използван прост показател за оценка на ефективността на център за данни или WSC се нарича
Следователно PUE трябва да бъде по-голямо или равно на 1 и колкото по-голямо е PUE, толкова по-малко
ефективен е WSC.
Greenberg et al. [2006] докладва за PUE на 19 центъра за данни и частта от режийните разходи, които
отиват в инфраструктурата за охлаждане. Фигура 6.11 показва какво са открили, сортирани по PUE от най-до
най-малко ефективни. Средният PUE е 1,69, като инфраструктурата за охлаждане използва повече от
половината енергия от самите сървъри – средно 0,55 от 1,69 е за охлаждане. Имайте предвид, че това са
средни PUE, които могат да варират ежедневно в зависимост от натоварването и дори температурата на
Тъй като ефективността на долар е най-добрият показател, ние все още трябва да измерваме
ефективността. Както показва фигура 6.7 по-горе, честотната лента спада и латентността се увеличава в
зависимост от разстоянието до данните. В WSC честотната лента на DRAM в сървър е 200 пъти по-голяма,
отколкото в стелаж, който от своя страна е 10 пъти по-голям, отколкото в масив. По този начин има друг вид
местоположение, което трябва да се има предвид при разполагането на данни и програми в WSC.
Докато дизайнерите на WSC често се фокусират върху честотната лента, програмистите, разработващи
приложения на WSC, също се интересуват от латентността, тъй като латентността е видима за потребителите.
на човек, време за реакция на системата и време, необходимо на човека да обмисли отговора, преди да влезе
системата за рязане с 30% намалява времето на взаимодействие със 70%. Този неправдоподобен резултат се
обяснява с човешката природа: хората се нуждаят от по-малко време за мислене, когато им се даде по-бърз
Фигура 6.12 показва резултатите от такъв експеримент за търсачката Bing, където закъснения от 50 ms
1.33 ТО
1.35 AC
1.43 други
1.47
1.49
1.52
1.59
1.67
1,69
1,69
со
ети ев
нн лбе
яи тг)р аPн
кEетUф
н
о п
е
Е(
1,69
1.82
2.04
2.04
2.13
2.33
2.38
2.63
3.03
Фигура 6.11 Ефективност на използване на мощността на 19 центъра за данни през 2006 г. [Greenberg et al. 2006]. Силата за въздуха
кондициониране (AC) и други употреби (като разпределение на електроенергия) се нормализира към мощността за ИТ оборудването в
изчисляване на PUE. По този начин мощността за ИТ оборудване трябва да бъде 1,0 и AC варира от около 0,30 до 1,40 пъти
мощност на ИТ оборудването. Мощността за „други” варира от около 0,05 до 0,60 от ИТ оборудването.
от предишни проучвания, времето до следващото щракване приблизително удвоява забавянето; тоест 200
спадна линейно с нарастващо забавяне, както и удовлетвореността на потребителите. Отделно изследване върху
търсачката на Google установи, че тези ефекти се задържат дълго след 4-те седмици
експериментът приключи. Пет седмици по-късно имаше 0,1% по-малко търсещи на ден
потребители, които са имали закъснения от 400 ms. Като се има предвид сумата пари, спечелени при търсене,
дори такива малки промени са обезпокоителни. Всъщност резултатите бяха толкова отрицателни, че
50 -- -- -- -- --
Фигура 6.12 Отрицателно въздействие на закъсненията в сървъра за търсене на Bing върху поведението на потребителите
452 Глава шеста Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
Цената на WSC
Цената е приблизително 2 долара на ват година. По този начин, за да намалите разходите, като пестите енергия
$5000. Разходите за интернет честотна лента варират според приложението, така че не са включени тук. The
на конструкцията на сградата. Добавихме разходи за хора за сигурност и управление на съоръжения във Фигура 6.14,
конкретна фирма.
454 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Фигура 6.14 Месечни OPEX за Фигура 6.13, закръглени до най-близките $5000. Имайте предвид, че 3-годишната амортизация за
сървъри означава, че трябва да купувате нови сървъри на всеки 3 години, докато съоръжението се амортизира за 10 години. следователно
амортизираните капиталови разходи за сървъри са около 3 пъти повече от тези за съоръжението. Разходите за хора включват 3 охрана
охранява позиции непрекъснато 24 часа в денонощието, 365 дни в годината, на $20 на час на човек и 1 лице на съоръженията
за 24 часа на ден, 365 дни в годината, при $30 на час. Обезщетенията са 30% от заплатите. Това изчисление не включва
цена на честотната лента на мрежата до интернет, тъй като тя варира в зависимост от приложението, нито такси за поддръжка на доставчика, тъй като тя варира в зависимост от
оборудване и по договаряне.
Пример Цената на електроенергията варира според региона в Съединените щати от $0,03 до $0,15 на
киловатчас. Какво е въздействието върху почасовите разходи за сървър на тези две екстремни ставки?
След това месечните разходи за енергия преминават от $475 000 на фигура 6.14 до $205 000
при 0,03 долара за киловатчас и до 1 015 000 долара при 0,15 долара за киловатчас. Тези
промените в разходите за електроенергия променят почасовите разходи за сървър от $0,11 на $0,10 и
$0,13, съответно.
Пример Какво би се случило с месечните разходи, ако всички времена за амортизация бъдат направени
да е същото - да речем, 5 години? Как това променя почасовите разходи за сървър?
и общите месечни OPEX са $3,422,000. Ако подменяме всичко на всеки 5 години, цената ще бъде $0,103
на сървърен час, като по-голямата част от амортизираните разходи сега са за съоръжението, а не за
сървърите, както е на фигура 6.14.
Цената от $0,11 на сървър на час може да бъде много по-ниска от цената за много компании, които
притежават и управляват свои собствени (по-малки) конвенционални центрове за данни.
Ценовото предимство на WSC накара големите интернет компании да предложат компютри като
полезност, при която, подобно на електричеството, плащате само за това, което използвате. Днес
комуналните изчисления са по-известни като облачни изчисления.
Ако компютрите от вида, който защитавам, станат компютрите на бъдещето, тогава компютрите може
някой ден да бъдат организирани като обществена услуга, точно както телефонната система е
обществена услуга. . . . Компютърната програма може да се превърне
в основата на нова и важна индустрия.
Джон Маккарти
Честване на стогодишнината на MIT (1961)
Водени от търсенето на все по-голям брой потребители, интернет компании като Amazon, Google и
Microsoft изградиха все по-големи компютри от стандартни компоненти за складове. Това търсене
доведе до иновации в системния софтуер за поддръжка на работа в този мащаб, включително Bigtable,
Dynamo, GFS и MapReduce. Той също така изисква подобряване на оперативните техники за предоставяне
на услуга, налична поне 99,99% от времето, въпреки повреди на компоненти и атаки за сигурност.
Примери за тези техники включват отказ, защитни стени, виртуални машини и защита срещу
разпределени атаки за отказ на услуга. Със софтуера и експертизата, осигуряващи възможност за
мащабиране и нарастващото клиентско търсене, което оправда инвестицията, WSC с 50 000 до 100 000
сървъра станаха обичайни през 2011 г.
5,7 пъти намаление на разходите за съхранение — струваше на WSC $4,6 на GByte на година за
дисково съхранение срещу $26 на GByte за центъра за данни.
7,3 пъти намаление на мрежовите разходи—Интернет честотната лента струва на WSC $13 за Mbit/
sec/месец срещу $95 за центъра за данни. Не е изненадващо, че можете да договорите много по-
добра цена за Mbit/sec, ако поръчате 1000 Mbit/sec, отколкото ако поръчате 10 Mbit/sec.
Machine Translated by Google
456 Глава шеста Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
Друга икономия от мащаба идва по време на покупката. Високото ниво на закупуване води
до цени с отстъпка за обем на сървърите и мрежовото оборудване. Освен това позволява
оптимизиране на веригата за доставки. Dell, IBM и SGI ще доставят новите поръчки за една
седмица до WSC вместо за 4 до 6 месеца. Краткото време за доставка прави много по-лесно
разрастването на помощната програма, за да отговори на търсенето.
Икономиите от мащаба се отнасят и за оперативните разходи. От предишния раздел видяхме,
че много центрове за данни работят с PUE 2.0. Големите фирми могат да оправдаят наемането на
механични и енергийни инженери за разработване на WSC с по-ниски PUE от порядъка на 1,2
(вижте раздел 6.7).
Интернет услугите трябва да бъдат разпределени до множество WSC както за способност за
зависимост, така и за намаляване на латентността, особено за международните пазари. Поради
тази причина всички големи фирми използват множество WSC. За отделните фирми е много по-
скъпо да създават множество малки центрове за данни по целия свят, отколкото един център за
данни в корпоративната централа.
И накрая, поради причините, представени в раздел 6.1, сървърите в центровете за данни са
склонни да се използват само 10% до 20% от времето. Като предоставят WSC на разположение на
обществеността, некорелирани пикове между различни клиенти могат да повишат средното
използване над 50%.
Много ниска цена. Когато AWS обяви тарифа от $0,10 на час за инстанция през 2006 г., това беше
изумително ниска сума. Един екземпляр е една виртуална машина и при $0,10 на час AWS разпредели
два екземпляра на ядро на многоядрен сървър. Следователно, едно компютърно устройство EC2 е
еквивалентно на 1,0 до 1,2 GHz AMD Opteron или Intel Xeon от онази епоха. (Първоначално)
разчитане на софтуер с отворен код.
Наличието на софтуер с добро качество, който няма проблеми с лицензирането или разходи, свързани с
работата на стотици или хиляди сървъри, направи изчисленията с помощни програми много по-
икономични както за Amazon, така и за неговите клиенти. Съвсем наскоро AWS започна да предлага
инстанции, включително търговски софтуер на трети страни, на по-високи цени. Без (първоначална)
гаранция за обслужване. Първоначално Amazon обеща само максимални усилия. Ниската цена беше
толкова привлекателна, че мнозина можеха да живеят без гаранция за обслужване. Днес AWS предоставя
SLA за наличност до 99,95% на услуги като Amazon EC2 и Amazon S3. Освен това Amazon S3 е проектиран
за 99,999999999% издръжливост чрез запазване на множество реплики на всеки обект на множество
места. Тоест шансовете за окончателна загуба на обект са едно на 100 милиарда. AWS също така
предоставя табло за управление на състоянието на услугата, което показва текущото работно
състояние на всяка от услугите на AWS в реално време, така че времето за работа и производителността
на AWS са напълно прозрачни.
Не се изисква договор. Отчасти защото разходите са толкова ниски, всичко, което е необходимо, за да
започнете да използвате EC2, е кредитна карта.
Фигура 6.15 показва почасовата цена на много видове инстанции на EC2 през 2011 г. В допълнение
към изчисленията, EC2 таксува за дългосрочно съхранение и за интернет трафик. (Няма разходи за мрежов
трафик в регионите на AWS.) Elastic Block Storage струва $0,10 за GByte на месец и $0,10 за милион I/O
заявки. Интернет трафикът струва $0,10 на гигабайт към EC2 и $0,08 до $0,15 на гигабайт напускащ EC2, в
зависимост от обема. Поставяйки това в историческа перспектива, за $100 на месец можете да използвате
еквивалентния капацитет на сумата от капацитетите на всички магнитни дискове, произведени през 1960
г.!
Machine Translated by Google
458 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Стандартен малък 0,085 долара 1.0 1.0 1 1,00 1.7 160 32 бита
Standard Large 0,340 долара 4.0 4.0 2 2.00 7.5 850 64 бита
Standard Extra Large High- 0,680 долара 8.0 8.0 4 2.00 15.0 1690 64 бита
Memory Extra Large $0,500 High-Memory 5.9 6.5 2 3.25 17.1 420 64 бита
Double Extra Large $1000 11.8 13.0 4 3.25 34.2 850 64 бита
High-Memory Quadruple 2000 долара 23.5 26.0 8 3.25 68.4 1690 64 бита
Много голям
Среден с висок процесор 0,170 долара 2.0 5.0 2 2.50 1.7 350 32 бита
High-CPU Extra Large 0,680 долара 8.0 20.0 8 2.50 7.0 1690 64 бита
Cluster Quadruple Extra 1600 долара 18.8 33.5 8 4.20 23.0 1690 64 бита
Голям
Фигура 6.15 Цена и характеристики на екземпляри на EC2 по заявка в Съединените щати в региона на Вирджиния през
Януари 2011 г. Микро екземплярите са най-новата и евтина категория и предлагат кратки пакети до 2.0
изчислителни единици само за $0,02 на час. Клиентите съобщават, че Micro Instances са средно около 0,5 изчислителни единици.
Cluster-Compute Instances в последния ред, които AWS идентифицира като специализирани сървъри с двоен сокет Intel Xeon X5570 с четири
ядра на сокет, работещи на 2,93 GHz, предлагат 10 Gigabit/sec мрежи. Те са предназначени за HPC приложения. AWS предлага също спот
инстанции на много по-ниска цена, където вие задавате цената, която сте готови да платите, и
брой инстанции, които сте готови да стартирате, и след това AWS ще ги стартира, когато спот цената падне под вашата
ниво. Те работят, докато не ги спрете или спот цената надвиши лимита ви. Една проба през деня през януари
2011 установи, че спот цената е коефициент от 2,3 до 3,1 по-ниска, в зависимост от типа екземпляр. AWS също предлага
Запазени инстанции за случаи, когато клиентите знаят, че ще използват по-голямата част от инстанцията за една година. Вие плащате годишно
такса за екземпляр и след това почасова ставка, която е около 30% от колона 1, за да го използвате. Ако сте използвали резервиран екземпляр
100% за цяла година, средната цена на час, включително амортизацията на годишната такса, ще бъде около 65% от
процентът в първата колона. Сървърът, еквивалентен на тези на фигури 6.13 и 6.14, ще бъде стандартна екстра
Голям или изключително голям екземпляр с висок процесор, който изчислихме да струва $0,11 на час.
Отговор Първият въпрос е какъв е правилният размер на екземпляра, който да съответства на типичния сървър
Google? Фигура 6.21 на страница 467 в раздел 6.7 показва, че през 2007 г. типичен
Сървърът на Google имаше четири ядра, работещи на 2,2 GHz с 8 GB памет. Тъй като а
единичен екземпляр е едно виртуално ядро, което е еквивалентно на 1 до 1,2 GHz AMD
Opteron, най-близкото съответствие на Фигура 6.15 е High-CPU Extra Large с осем
виртуални ядра и 7.0 GB памет. За простота ще приемем средното
Достъпът до EBS хранилище е 64 KB, за да се изчисли броят I/O.
Machine Translated by Google
Цена на час за инстанция EC2 High-CPU XL 0,68 долара 0,68 долара 0,68 долара 0,68 долара
Средна цена EC2 за работа в MapReduce 16,35 долара 38,47 долара 25,56 долара 38,07 долара
Среден брой EBS I/O заявки (милиони) 2.34 5.80 3.26 3.19
Средна I/O цена на EBS за задача на MapReduce 0,23 долара 0,58 долара 0,33 долара 0,32 долара
Средна обща цена за задача на MapReduce 16,58 долара 39,05 долара 25,89 долара 38,39 долара
Годишен брой задания на MapReduce 29 000 171 000 2 217 000 3 467 000
Обща цена на работните места на MapReduce на EC2/EBS 480 910 долара $6 678 011 $57,394,985 $133,107,414
Фигура 6.16 Прогнозна цена, ако сте изпълнили работното натоварване на Google MapReduce (Фигура 6.2), използвайки цени от 2011 г. за AWS
ECS и EBS (Фигура 6.15). Тъй като използваме цени от 2011 г., тези оценки са по-малко точни за по-ранни години, отколкото за
по-новите.
AWS. Имайте предвид, че достъпът до EBS е около 1% от общите разходи за тези работни места.
Пример Като се има предвид, че разходите за работни места в MapReduce растат и вече надхвърлят $100 милиона
на година, представете си, че вашият шеф иска да проучите начини за намаляване на разходите.
Две потенциално по-евтини опции са или AWS Reserved Instances, или AWS
Отговор AWS Reserved Instances таксува фиксирана годишна ставка плюс почасова ставка за използване.
часова ставка е $0,24. Тъй като ние плащаме за екземплярите, независимо дали са използвани или не,
Използване 80%
По този начин спестяванията при използване на резервирани екземпляри биха били приблизително 17% или 23 милиона долара
Вземане на проби от няколко дни през януари 2011 г., почасовата цена на High-CPU Extra
Голям спот екземпляр е средно $0,235. Тъй като това е минималната цена за наддаване
вземете един сървър, това не може да бъде средната цена, тъй като обикновено искате да изпълнявате задачи
Спот инстансите за натоварването през 2009 г. ще бъдат приблизително 31% или $41 милиона.
Machine Translated by Google
460 Глава шеста Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
По този начин вие условно препоръчвате Spot Instances на вашия шеф, тъй като има по-малко
предварителен ангажимент и те потенциално могат да спестят повече пари. Вие обаче казвате на
шефа си, че трябва да опитате да стартирате задания на MapReduce на Spot инстанции, за да видите
какво всъщност плащате в крайна сметка, за да сте сигурни, че задачите се изпълняват докрай и
че наистина има налични стотици високопроцесорни екстра големи инстанции за изпълнение на
тези задания ежедневно.
В допълнение към ниската цена и модела „плащане срещу използване“ на полезни изчисления,
друг силен привлекател за потребителите на облачни изчисления е, че доставчиците на облачни
изчисления поемат рисковете от свръх или недостатъчно предоставяне. Избягването на риска е
божи дар за стартиращите компании, тъй като всяка грешка може да бъде фатална. Ако твърде
много от ценната инвестиция се изразходва за сървъри, преди продуктът да е готов за интензивна
употреба, компанията може да остане без пари. Ако услугата изведнъж стане популярна, но няма
достатъчно сървъри, за да отговори на търсенето, компанията може да направи много лошо
впечатление с потенциалните нови клиенти, от които отчаяно се нуждае, за да расте.
Плакатът за този сценарий е FarmVille от Zynga, игра за социална мрежа във Facebook. Преди
обявяването на FarmVille, най-голямата социална игра имаше около 5 милиона играчи всеки ден.
FarmVille имаше 1 милион играчи 4 дни след старта и 10 милиона играчи след 60 дни. След 270 дни
имаше 28 милиона играчи всеки ден и 75 милиона играчи месечно. Тъй като бяха внедрени в AWS,
те успяха да растат безпроблемно с броя на потребителите. Освен това, той намалява натоварването
въз основа на търсенето на клиентите.
462 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
протича вътре в самото ИТ оборудване. По този начин друг източник на електрическа неефективност, който
не е обхванат във Фигура 6.9 , е захранването вътре в сървъра, което преобразува входа от 208 волта или 110
2007 г. много захранвания бяха с 60% до 80% ефективност, което означаваше, че има
по-големи загуби вътре в сървъра, отколкото при преминаването през многото стъпки и
чиповете и дисковете, тъй като нямат представа какво има на дънната платка. Втората причина е, че
какво има на дъската. Нещо повече, такива захранващи устройства често са с най-лоша ефективност при 25%
натоварване или по-малко, въпреки че, както показва Фигура 6.3 на страница 440, много
WSC сървърите работят в този диапазон. Компютърните дънни платки също имат модули за регулиране на
За да се подобри състоянието на техниката, Фигура 6.17 показва стандартите на Climate Savers Computing
време. Имайте предвид, че стандартът определя изисквания при 20% и 50% натоварване
целият сървър трябва да бъде енергийно пропорционален; тоест сървърите трябва да консумират енергия
колко далеч сме от постигането на тази идеална цел с помощта на SPECpower, сървърен бенчмарк, който
измерва използваната енергия при различни нива на производителност (Глава 1). The
беше до 2,5 пъти по-добър от други системи, сравнени през тази година, и късно през a
памет! Въпреки това, тази много ефективна система все още използва почти 30% от пълното
Фигура 6.17 Оценки на ефективност и цели за захранващи устройства във времето на климата
Savers Computing Initiative. Тези оценки са за захранващи блокове с множество изходи,
които се отнасят до настолни и сървърни захранвания в нередундантни системи. Има
малко по-висок стандарт за PSU с един изход, които обикновено се използват като резервни
конфигурации (1U/2U единични, двойни и четирисокетни и блейд сървъри).
Machine Translated by Google
700
600
500
400
Действителна мощност
евотав
300
100
0
0 300 600 900 1200 1500 1800 2100 2400 2700 3000
Работно натоварване: 1000 операции/секунда
Фигура 6.18 Най-добрите резултати на SPECpower към юли 2010 г. спрямо идеалната енергия
пропорционално поведение. Системата беше HP ProLiant SL2x170z G6, която използва a
клъстер от четири процесора Intel Xeon L5640 с двоен сокет, като всеки сокет има шест работещи ядра
на 2,27 GHz. Системата имаше 64 GB DRAM и малък 60 GB SSD за вторично съхранение. (Фактът, че
основната памет е по-голяма от капацитета на диска, предполага, че тази система
беше съобразен с този показател.) Използваният софтуер беше IBM Java Virtual Machine версия 9 и
Windows Server 2008, Enterprise Edition.
мощност при неактивност и почти 50% от пълната мощност при само 10% натоварване. По този начин енергията
Пример Използвайки данните от типа на Фигура 6.18, от какво идва спестяването на енергия
пет сървъра при 10% използване срещу един сървър при 50% използване?
Отговор Един сървър при 10% натоварване е 308 вата, а при 50% натоварване е 451 вата. Спестяванията са тогава
или около коефициент 3,4. Ако искаме да бъдем добри стопани на околната среда в нашите
WSC, ние трябва да консолидираме сървъри, когато усвояването спадне, да закупим сървъри
са по-пропорционални на енергията или намерете нещо друго, което е полезно за бягане в периоди
на ниска активност.
Machine Translated by Google
464 Шеста глава Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
Имайки предвид предисторията на тези шест раздела, вече сме готови да оценим
работата на архитектите на Google WSC.
Контейнери
104
100
146
137
107
164 142
111 116
101
134 140
119
116
143
107
113
131 125
155 122
161 152
158 143
128
149
155
152
Фигура 6.19 Google персонализира стандартен контейнер 1AAA: 40 x 8 x 9,5 фута (12,2 x 2,4 x 2,9 метра). Сървърите са подредени на
височина до 20 в стелажи, които образуват два дълги реда от по 29 стелажа всеки, с по един ред от всяка страна на контейнера.
Охладената пътека минава надолу по средата на контейнера, като връщането на горещия въздух е от външната страна. Структурата
на висящия стелаж улеснява ремонта на охладителната система, без да се премахват сървърите. За да позволи на хората вътре в
контейнера да ремонтират компоненти, той съдържа системи за безопасност за откриване на пожар и потискане на основата на
мъгла, аварийно излизане и осветление и аварийно изключване на захранването. Контейнерите също имат много сензори:
температура, налягане на въздушния поток, откриване на изтичане на въздух и осветление със сензор за движение. Видео обиколка
на центъра за данни може да бъде намерена на http://www.google.com/corporate/green/datacenters/summit.html . Microsoft, Yahoo! и
много други сега изграждат модулни центрове за данни въз основа на тези идеи, но те са спрели да използват стандартни контейнери
по ISO, тъй като размерът им е неудобен.
Фигура 6.20 е напречен разрез на контейнера, който показва въздушния поток. Компютърните
стелажи са прикрепени към тавана на контейнера. Охлаждането е под повдигнат под, който духа в
коридора между стелажите. Горещият въздух се връща зад стелажите. Ограниченото пространство
466 Шеста глава Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
н
|76a79a1808a45f9ed593fb73e46533eа а
:,71е0
8
нн 3
в
ръ т,ъ
у,и
86
р н
т8 нгр
9т8 ъ
к
с3
5 ае
тfн ю
дсм
еи
8
2
1
,в им
8
1
и
4
о
ач N
ф
8
0
в
7
и
х
:гн
трсп
| лм
u
р
1о
ей
1
4
8
х
л
д
о
ртB
ун
d ж
ке
р
9
0
3
7
оw
ъ
а
о S..©
;,еМ П
Л
Д
А
гХ
п
К
g
Б
о
0
2
1
9
e
аI
Фигура 6.20 Въздушен поток в контейнера, показан на Фигура 6.19. Тази диаграма на напречното
сечение показва две стелажи от всяка страна на контейнера. Студеният въздух духа в коридора в
средата на контейнера и след това се засмуква в сървърите. Топлият въздух се връща по краищата
на контейнера. Този дизайн изолира студените и топлите въздушни потоци.
Външните охладители имат изрези, така че, ако времето е подходящо, само външните
охладителни кули трябва да охлаждат водата. Охладителите се пропускат, ако температурата на
водата, напускаща охладителната кула, е 70°F (21°C) или по-ниска.
Имайте предвид, че ако навън е твърде студено, охладителните кули се нуждаят от
нагреватели, за да предотвратят образуването на лед. Едно от предимствата на поставянето на
WSC в The Dalles е, че годишната температура по мокър термометър варира от 15°F до 66°F (–9°C
до 19°C) със средна стойност от 41°F (5°C) , така че охладителите често могат да се изключват. За разлика,
Machine Translated by Google
Фигура 6.21 Сървър за Google WSC. Захранването е отляво, а двата диска са отгоре. Двата
вентилатора под левия диск покриват двата цокъла на микропроцесора AMD Bar-celona,
всеки с по две ядра, работещи на 2.2 GHz. Осемте DIMM модула в долния десен ъгъл
съдържат по 1 GB, което дава общо 8 GB. Няма допълнителен метален лист, тъй като
сървърите са включени към батерията и отделен пленум има в багажника за всеки сървър,
за да помогне за контролиране на въздушния поток. Отчасти поради височината на
батериите, 20 сървъра се побират в стелаж.
Лас Вегас, Невада, варира от –42°F до 62°F (–41°C до 17°C) със средна стойност от 29°F (–2°C). В
допълнение, необходимостта от охлаждане само до 81°F (27°C) вътре в контейнера прави много по-
вероятно майката природа да успее да охлади водата.
Фигура 6.21 показва сървъра, проектиран от Google за този WSC. За да се подобри ефективността
на захранването, той доставя само 12 волта на дънната платка, а дънната платка доставя достатъчно
за броя на дисковете, които има на платката.
(Лаптопите захранват своите дискове по подобен начин.) Нормата на сървъра е да доставя много
нива на напрежение, необходими на дисковете и чиповете директно. Това опростяване означава, че
захранването от 2007 г. може да работи с 92% ефективност, което е далеч над рейтинга Gold за
захранвания през 2010 г. (Фигура 6.17).
Инженерите на Google разбраха, че 12 волта означава, че UPS може просто да бъде стандартна
батерия на всеки рафт. Следователно, вместо да има отделно помещение за батерии, което Фигура
6.9 показва като 94% ефективност, всеки сървър има собствена оловно-киселинна батерия, която е
99,99% ефективност. Този „разпределен UPS“ се внедрява постепенно с всяка машина, което означава,
че няма изразходвани пари или енергия за свръхкапацитет. Те използват стандартни готови UPS
устройства за защита на мрежовите комутатори.
Какво ще кажете за пестенето на енергия чрез използване на динамично мащабиране на
напрежението и честотата (DVFS), което е описано в глава 1 ? DVFS не беше внедрен в това семейство
машини, тъй като въздействието върху латентността беше такова, че беше осъществимо само в
региони с много ниска активност за онлайн работни натоварвания и дори в тези случаи
спестяванията за цялата система бяха много малки. Поради това сложната верига за контрол на
управлението, необходима за внедряването му, не може да бъде оправдана.
Machine Translated by Google
468 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
1.4
А д аз
б Е Дж
°С Ж
д з
1.3
1.2
1.1
1.0
Q3 '07 Q4 '07Q1 '08 Q2 '08Q3 '08Q4 '08 Q1 '09Q2 '09Q3 '09Q4 '09 Q1 '10Q2 '10 Q3 '10Q4 '10
Фигура 6.22 Ефективност на потребление на енергия (PUE) на 10 Google WSC във времето. Google A е WSC,
описан в този раздел. Това е най-високата линия през Q3 '07 и Q2 '10. (От www.google.com/corporate/green/
datacenters/measuring.htm.) Facebook наскоро обяви нов център за данни, който трябва да осигури
впечатляващ PUE от 1.07 (вижте http://opencompute.org/).
Съоръжението в Приневил Орегон няма климатик и охладена вода. Той разчита стриктно на външен въздух,
който се вкарва от едната страна на сградата, филтрира се, охлажда се чрез смесители, изпомпва се през ИТ
оборудването и след това се изпраща навън от сградата чрез смукателни вентилатори. Освен това
сървърите използват персонализирано захранване, което позволява на системата за разпределение на
захранването да пропусне една от стъпките за преобразуване на напрежението на Фигура 6.9.
Базовият дизайн има единична мрежова интерфейсна карта (NIC) за 1 Gbit/sec Ethernet
връзка. Въпреки че снимката на Фигура 6.21 показва две SATA дискови устройства, базовият
сървър има само едно. Пиковата мощност на базовата линия е около 160 вата, а мощността на
празен ход е 85 вата.
Този базов възел е допълнен, за да предложи възел за съхранение (или „пълен диск“).
Първо към сървъра е свързана втора тава, съдържаща 10 SATA диска. За да получите още един
диск, втори диск се поставя на празното място на дънната платка, давайки на възела за
съхранение 12 SATA диска. И накрая, тъй като възелът за съхранение може да насити една
единствена Ethernet връзка от 1 Gbit/sec, беше добавен втори Ethernet NIC. Пиковата мощност за
възел за съхранение е около 300 вата, а на празен ход е 198 вата.
Обърнете внимание, че възелът за съхранение заема два слота в стелажа, което е една от
причините Google да разположи 40 000 вместо 52 200 сървъра в 45-те контейнера. В това
съоръжение съотношението беше около два изчислителни възела за всеки възел за съхранение,
но това съотношение варираше значително между WSC на Google. Следователно Google A имаше
около 190 000 диска през 2007 г. или средно почти 5 диска на сървър.
40 000 сървъра са разделени на три масива с повече от 10 000 сървъра всеки. (Масивите се
наричат клъстери в терминологията на Google.) 48-портовият стелажен превключвател използва
40 порта за свързване със сървъри, оставяйки 8 за връзка нагоре към масивните превключватели.
Array комутаторите са конфигурирани да поддържат до 480 1 Gbit/sec Ethernet връзки и
няколко 10 Gbit/sec порта. 1 Gigabit портовете се използват за свързване към стелажните суичове,
тъй като всеки стелажен суич има една връзка към всеки от масивните суичове. 10 Gbit/sec
портовете се свързват към всеки от двата рутера на центъра за данни, които обединяват всички
масиви от рутери и осигуряват връзка с външния свят. WSC използва два рутера за център за
данни за надеждност, така че един отказ на рутер за център за данни не премахва целия WSC.
За да отговаря един оператор за повече от 1000 сървъра, имате нужда от обширна инфраструктура
за наблюдение и известна автоматизация, за да помогнете с рутинни събития.
Machine Translated by Google
470 Глава шеста Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
Целта е да имате по-малко от 1% от всички възли в опашката за ръчни поправки във всеки един
момент. Средното време на опашката за ремонт е една седмица, въпреки че отнема много по-малко
време на ремонтния техник да го поправи. По-дългата латентност предполага значението на
производителността на ремонта, което се отразява на разходите за операции. Имайте предвид, че
автоматизираните ремонти на първата стъпка отнемат минути за рестартиране/преинсталиране до
часове за провеждане на насочени стрес тестове, за да се уверите, че машината наистина работи.
Тези закъснения не отчитат времето за бездействие на повредените сървъри.
Причината е, че голяма променлива е количеството състояние в възела. Възел без състояние отнема
много по-малко време от възел за съхранение, чиито данни може да се наложи да бъдат евакуирани,
преди да могат да бъдат заменени.
Резюме
Към 2007 г. Google вече демонстрира няколко иновации за подобряване на енергийната ефективност
на своите WSC, за да достави PUE от 1,23 в Google A:
Работата на сървъри при по-високи температури означава, че въздухът трябва да се охлади само до
81°F (27°C) вместо традиционните 64°F до 71°F (18°C до 22°C).
Проектиране на дънни платки, които се нуждаят само от едно 12-волтово захранване, така че
UPS функцията може да бъде осигурена от стандартни батерии, свързани с всяка от тях
сървър вместо стая за батерии, като по този начин намалява разходите и намалява един
източник на неефективност на разпределението на електроенергия в WSC.
Дизайнът на WSC трябва да се е подобрил през следващите години като най-добрият WSC на Google
намали PUE от 1,23 за Google A на 1,12. Facebook обяви през
2011, че са намалили PUE до 1,07 в новия си център за данни (вижте http://
opencompute.org/). Ще бъде интересно да видим какви иновации остават
подобри допълнително ефективността на WSC, така че да бъдем добри пазители на нашата околна среда.
Може би в бъдеще дори ще вземем предвид енергийните разходи за производство на оборудване в WSC
[Chang et al. 2010].
Популярен въпрос относно облачните изчисления е дали е печелившо при тези ниски цени
цени.
Въз основа на ценообразуването на AWS от Фигура 6.15, бихме могли да таксуваме $0,68 на час на
сървър за изчисления. (Цената от $0,085 на час е за виртуална машина
еквивалентно на една изчислителна единица EC2, а не на пълен сървър.) Ако можехме да продадем 50% от
сървърните часове, това ще генерира $0,34 доход на час на сървър. (Забележка
че клиентите плащат независимо колко малко използват сървърите, които заемат, така че продажбата на
50% от сървърните часове не означава непременно, че средното използване на сървъра е 50%.)
472 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
час, за да го използвате. Комбинирайки таксите заедно, AWS ще получи $0,45 доход на час на сървър за цяла
година.
допълнение към приходите от изчисления, това ще генерира още $75 на месец на сървър или още $0,10 на час.
Тези числа предполагат среден доход от $0,44 на час на сървър (чрез екземпляри при поискване) до $0,55
на час (чрез резервирани инстанси). От Фигура 6.13 изчислихме цената на сървър като $0,11 на час за WSC в
Раздел 6.4. Въпреки че разходите във Фигура 6.13 са приблизителни оценки, които не се основават на
действителните разходи за AWS, а 50% продажби за сървърна обработка и 750 GB използване на съхранение
на сървър са само примери, тези допускания предполагат брутен марж от 75% до 80%. Ако приемем, че тези
Заблуда Капиталовите разходи на WSC съоръжението са по-високи отколкото за сървърите, които се помещават.
Докато един бърз поглед към Фигура 6.13 на страница 453 може да ви доведе до това заключение, този поглед
Съоръжението обаче издържа от 10 до 15 години, докато сървърите трябва да се изкупуват отново на всеки 3
или 4 години. Използвайки времената на амортизация във Фигура 6.13 съответно за 10 години и 3 години,
капиталовите разходи за едно десетилетие са $72 милиона за съоръжението и 3,3 × $67 милиона, или $221
милиона, за сървъри. По този начин капиталовите разходи за сървъри в WSC за едно десетилетие са фактор
Клопка Опитвайки се да спестите енергия с неактивни режими на ниска мощност срещу активна ниска мощност
режими.
Фигура 6.3 на страница 440 показва, че средното използване на сървърите е между 10% и 50%. Като се има
предвид загрижеността относно оперативните разходи на WSC от раздел 6.4, бихте помислили, че режимите с
Както се споменава в глава 1 , не можете да получите достъп до DRAM или дискове в тези неактивни
режими на ниска мощност, така че трябва да се върнете към напълно активен режим, за да четете или пишете,
без значение колко ниска е скоростта. Клопката е, че времето и енергията, необходими за връщане към
напълно активен режим, правят неактивните режими с ниска мощност по-малко привлекателни. Фигура 6.3
показва, че почти всички сървъри имат средно поне 10% използване, така че може да очаквате дълги периоди
За разлика от това, процесорите все още работят в режими с по-ниска мощност с малко кратно на
нормалната скорост, така че активните режими с ниска мощност са много по-лесни за използване. Обърнете
внимание, че времето за преминаване към напълно активен режим за процесорите също се измерва в
микросекунди, така че активните режими с ниска мощност също се справят с опасенията за забавяне на
Клопка Използване на твърде слаб процесор, когато се опитвате да подобрите разходната производителност на WSC.
Законът на Amdahl все още се прилага за WSC, тъй като ще има известна серийна работа за всяка заявка и това
може да увеличи латентността на заявката, ако тя работи на бавен сървър [Hölzle 2010] [Lim et al. 2008]. Ако
серийната работа увеличава латентността, тогава разходите за използване на wimpy процесор трябва да
код, за да го върне към по-ниската латентност. По-големият брой нишки на много бавни сървъри също
може да бъде по-труден за планиране и балансиране на натоварването и по този начин променливостта
Това поведение се превежда директно в качеството на търсенето. Като се има предвид значението
на латентността за потребителя, както показва Фигура 6.12 , търсачката Bing използва множество
стратегии за прецизиране на резултатите от търсенето, ако латентността на заявката все още не е
надвишила граничната латентност. По-ниската латентност на по-големите Xeon възли означава, че те
могат да отделят повече време за прецизиране на резултатите от търсенето. Следователно, дори когато
Atom почти не беше натоварен, той даде по-лоши отговори в 1% от заявките от Xeon. При нормални
натоварвания 2% от отговорите са по-лоши.
Заблуда Предвид подобренията в надеждността на DRAM и устойчивостта на грешки на WSC системния софтуер, не
е нужно да харчите допълнително за ECC памет в WSC.
Тъй като ECC добавя 8 бита към всеки 64 бита DRAM, потенциално бихте могли да спестите една девета
от разходите за DRAM чрез елиминиране на кода за коригиране на грешки (ECC), особено след като
измерванията на DRAM твърдят, че процентът на отказ е от 1000 до 5000 FIT (повреди на милиард
Schroeder, Pinheiro и Weber [2009] проучиха измерванията на DRAM с ECC защита в повечето WSC
на Google, което със сигурност беше много стотици хиляди сървъри, за период от 2,5 години. Те откриха
15 до 25 пъти по-високи нива на FIT от публикуваните, или 25 000 до 70 000 повреди на мегабит.
Повредите засегнаха повече от 8% от DIMM модулите, а средният DIMM имаше 4000 коригираеми
грешки и 0,2 некоригируеми грешки на година. Измерени на сървъра, около една трета са имали DRAM
грешки всяка година, със средно 22 000 коригираеми грешки и 1 некоригируема грешка на година.
Тоест за една трета от сървърите една грешка в паметта се коригира на всеки 2,5 часа. Обърнете
внимание, че тези системи използват по-мощните кодове за унищожаване на чипове, а не по-простите
кодове SECDED. Ако беше използвана по-простата схема, процентът на некоригируеми грешки щяха да
бъдат 4 до 10 пъти по-високи.
В WSC, който има само защита срещу грешка при паритет, сървърите ще трябва да се рестартират
за всяка грешка при паритет на паметта. Ако времето за рестартиране беше 5 минути, една трета от
машините биха прекарали 20% от времето си в рестартиране! Подобно поведение би
Machine Translated by Google
474 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
понижи производителността на съоръжението на стойност $150 милиона с около 6%. Освен това, тези
системи биха претърпели много непоправими грешки, без операторите да бъдат уведомени
че са се случили.
В първите години Google използваше DRAM, която дори нямаше паритетна защита. През 2000 г., по
бъдещето. Тъй като WSC нарастваше по размер и ECC DIMM модулите ставаха по-достъпни,
ECC стана стандарт в Google WSC. ECC има допълнителното предимство да прави много по-лесно намирането
Такива данни подсказват защо Fermi GPU (глава 4) добавя ECC към своята памет
където неговите предшественици дори нямаха паритетна защита. Освен това тези FIT
процентите хвърлят съмнения върху усилията за използване на процесора Intel Atom в WSC - поради неговата
Заблуда Изключването на хардуера по време на периоди на ниска активност подобрява ефективността на разходите на
WSC.
Следователно, въпреки че със сигурност ще спести малко пари за компактиране на работните натоварвания и обръщане
изключени от неактивни машини, дори и да можете да спестите половината енергия, това само ще намали
месечна оперативна сметка със 7%. Ще има и практически проблеми за преодоляване, тъй като обширната
което описва надписът на Фигура 6.15 на страница 458. Потребителите на AWS, които са гъвкави относно
това кога се изпълняват техните задачи, могат да спестят коефициент от 2,7 до 3 за изчисление
като позволи на AWS да планира задачите по-гъвкаво с помощта на Spot Instances, като напр
когато WSC иначе би имал ниско използване.
Заблуда Замяната на всички дискове с флаш памет ще подобри разходната производителност на WSC.
Флаш паметта е много по-бърза от диска за някои работни натоварвания на WSC, като тези
памет, пакетирана като твърдотелни дискове (SSD) като кеш за обратно записване, наречен Flash-cache, като
част от неговата файлова система в своя WSC, така че горещите файлове остават във Flash, а студените
файловете остават на диска. Въпреки това, тъй като всички подобрения на производителността в WSC трябва
Machine Translated by Google
Дори когато включите мощността в уравнението, е трудно да се оправдае замяната на диск с Flash
за данни, които са рядко достъпни. Диск от един терабайт използва около 10 вата мощност, така че,
използвайки основното правило за $2 на ват година от раздел 6.4, най-многото, което можете да спестите
от намалена енергия, е $20 на година на диск.
Въпреки това, CAPEX разходите през 2011 г. за терабайт място за съхранение са $2000 за Flash и само $90
за диск.
Нещо повече, икономиите от мащаба, открити от WSC, са реализирали дълго мечтаната цел за
компютри като полезност. Облачните изчисления означават, че всеки навсякъде с добри идеи и бизнес
модели може да използва хиляди сървъри, за да представи своята визия почти мигновено. Разбира се,
има важни пречки, които биха могли да ограничат растежа на облачните изчисления около стандартите,
поверителността и скоростта на растеж на интернет честотната лента, но ние предвиждаме да бъдат
разгледани, така че облачните изчисления да могат да процъфтяват.
Предвид нарастващия брой ядра на чип (вижте глава 5), клъстерите ще се увеличат, за да включват
хиляди ядра. Ние вярваме, че технологиите, разработени за управление на WSC, ще се окажат полезни и
ще преминат към клъстери, така че клъстерите да изпълняват същите виртуални машини и системен
софтуер, разработен за WSC. Едно предимство би било лесната поддръжка на „хибридни“ центрове за
данни, където работното натоварване може лесно да бъде изпратено в облака в крачка и след това да се
свие обратно, за да разчита само на локални изчисления.
476 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
използвани от собствениците на центрове за данни, за да решат кои опции са най-добри; TCO обаче е a
многомерно изчисление, което взема предвид много различни фактори.
Целта на този казус е да се разгледа подробно WSCs, колко различни са
архитектурите влияят на TCO и как TCO управлява решенията на оператора. Този случай
изследването ще използва числата от Фигура 6.13 и Раздел 6.4 и предполага, че
описаният WSC постига целевото ниво на производителност на оператора. TCO е
често се използва за сравняване на различни сървърни опции, които имат множество измерения.
Упражненията в този казус изследват как се правят подобни сравнения в
контекста на WSC и сложността, свързана с вземането на решения.
6.1 [5/5/10] <6.2, 6.4> В тази глава паралелизмът на ниво данни беше обсъден като
начин WSC да постигнат висока производителност при големи проблеми. Вероятно,
още по-голяма производителност може да се постигне чрез използване на сървъри от висок клас; въпреки това,
а. [5] <6.4> Ако приемем сървъри, които са с 10% по-бързи при същото използване, но
20% по-скъпо, какъв е CAPEX за WSC?
b. [5] <6.4> Ако тези сървъри също използват 15% повече енергия, какъв е OPEX?
° С. [10] <6.2, 6.4> Като се има предвид подобрението на скоростта и увеличаването на мощността, какво трябва
6.2 [5/10] <6.4, 6.8> За да постигнете по-ниски OPEX, една привлекателна алтернатива е да използвате
версии на сървъри с ниска мощност, за да се намали общата електроенергия, необходима за работа на
сървъри; обаче, подобно на сървъри от висок клас, версии с ниска мощност на висок клас
компонентите също имат нелинейни компромиси.
а. [5] <6.4, 6.8> Ако опциите за сървър с ниска мощност предлагат 15% по-ниска мощност при
същата производителност, но са с 20% по-скъпи, добър компромис ли са?
6.3 [5/10/15] <6.4, 6.6> Сървърите, които имат различни режими на работа, предлагат възможности за
динамично изпълнение на различни конфигурации в клъстера, за да съответстват
използване на работното натоварване. Използвайте данните от Фигура 6.23 за режимите мощност/производителност
а. [5] <6.4, 6.6> Ако оператор на сървър реши да спести разходи за енергия, като стартира всички
сървъри със средна производителност, колко сървъра ще са необходими
постигнете същото ниво на производителност?
478 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
b. [10] <6.4, 6.6> Какви са CAPEX и OPEX на такава конфигурация? ° С. [15] <6.4, 6.6> Ако има
6.4 [Дискусия] <6.4> Обсъдете компромисите и ползите от двете опции в Упражнение 6.3, като
приемем, че на сървърите се изпълнява постоянно работно натоварване.
6.5 [Дискусия] <6.2, 6.4> За разлика от клъстерите за високопроизводителни изчисления (HPC), WSC
често изпитват значителни колебания в работното натоварване през целия ден. Обсъдете
компромисите и ползите от двете опции в Упражнение 6.3, като този път приемете работно
натоварване, което варира.
6.6 [Дискусия] <6.4, 6.7> TCO моделът, представен досега, абстрахира значително количество
подробности от по-ниско ниво. Обсъдете въздействието на тези абстракции върху общата
точност на модела TCO. Кога тези абстракции са безопасни за правене? В какви случаи по-
голямата подробност би дала значително различни отговори?
която рядко се среща. а. [5] <6.4> Оценете как се променя TCO за сървър, ако сървърът с табелка
мощността е 200 вата и цената е $3000.
b. [5] <6.4> Също така помислете за по-висока мощност, но по-евтин вариант, чиято мощност е
300 вата и струва $2000.
° С. [10] <6.4> Как се променя TCO за сървър, ако действителното средно потребление на
енергия от сървърите е само 70% от мощността, посочена в табелата?
6.8 [15/10] <6.2, 6.4> Едно предположение в модела TCO е, че критичното натоварване на съоръжението е фиксирано
съоръжение, може да варира във всеки един момент. Операторите трябва първоначално да осигурят центъра за данни
Machine Translated by Google
въз основа на неговите критични енергийни ресурси и оценка на това колко енергия се използва от
компонентите на центъра за данни. а.
[15] <6.2, 6.4> Разширете модела TCO, за да осигурите първоначално WSC на базата на сървър с мощност
от 300 вата, но също така изчислете действителната месечна използвана критична мощност и TCO,
като приемете, че сървърът е средно 40% използване и 225 вата . Колко капацитет остава неизползван?
b. [10] <6.2, 6.4> Повторете това упражнение с 500-ватов сървър, който е средно 20%
оползотворяване и 300 вата.
6.9 [10] <6.4, 6.5> WSC често се използват по интерактивен начин с крайни потребители, както е споменато в раздел
6.5. Това интерактивно използване често води до колебания на времето от деня, като пиковете са
свързани с конкретни периоди от време. Например, за наемането на Netflix има пик през вечерните
периоди от 8 до 22 часа; съвкупността от тези ефекти на времето от деня е значителна. Сравнете TCO на
сървър на център за данни с капацитет, съответстващ на използването в 4 сутринта в сравнение с 21:00
6.10 [Дискусия/15] <6.4, 6.5> Обсъдете някои опции за по-добро използване на излишните сървъри по време на
ненатоварените часове или опции за спестяване на разходи. Предвид интерактивния характер на WSC,
какви са някои от предизвикателствата пред агресивното намаляване на потреблението на енергия?
6.11 [Дискусия/25] <6.4, 6.6> Предложете един възможен начин за подобряване на TCO чрез фокусиране върху
намаляване на мощността на сървъра. Какви са предизвикателствата при оценяването на вашето предложение?
Оценете подобренията на TCO въз основа на вашето предложение. Какви са предимствата и недостатъците?
Упражнения
6.12 [10/10/10] <6.1> Един от важните фактори на WSC е широкият паралелизъм на ниво заявка, за разлика от
паралелизма на ниво инструкция или нишка. Този въпрос изследва значението на различните типове
паралелизъм върху компютърната архитектура и системния дизайн. а. [10] <6.1> Обсъдете сценарии, при
които подобряването на
паралелизма на ниво инструкция или нишка би осигурило по-големи ползи от постижимите чрез
паралелизъм на ниво заявка.
b. [10] <6.1> Какви са последиците от увеличаването на паралелизма на ниво заявка върху софтуерния
дизайн?
6.13 [Дискусия/15/15] <6.2> Когато доставчик на облачни изчислителни услуги получи задания, състоящи се от
множество виртуални машини (VM) (напр. задание MapReduce), съществуват много опции за планиране.
Виртуалните машини могат да бъдат планирани по кръгов начин, за да се разпространяват между всички
налични процесори и сървъри, или могат да бъдат консолидирани, за да използват възможно най-малко
процесори. Използвайки тези опции за планиране, ако е изпратено задание с 24 VM и 30 процесора са
налични в облака (всеки може да работи с до 3 VM), кръговият режим ще използва 24 процесора,
Machine Translated by Google
480 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
° С. [15] <6.2> Ако приемем, че изпратените задания са тежки натоварвания на мрежата, какви са
плюсовете и минусите на кръговото планиране спрямо консолидираното планиране, в различни
обхвати?
6.14 [15/15/10/10] <6.2, 6.3> MapReduce позволява голямо количество паралелизъм, като изпълнява независими
от данни задачи на множество възли, често използвайки стандартен хардуер; обаче има ограничения
за нивото на паралелизъм. Например, за излишък, MapReduce ще записва блокове данни в множество
възли, консумирайки диск и потенциално мрежова честотна лента. Да приемем общ размер на набора
от данни от 300 GB, честотна лента на мрежата от 1 Gb/сек, скорост на карта 10 сек/ГБ и скорост на
намаляване от 20 сек/ГБ. Да предположим също, че 30% от данните трябва да бъдат прочетени от
отдалечени възли и всеки изходен файл се записва на два други възела за излишък. Използвайте
фигура 6.6 за всички останали параметри. а. [15] <6.2, 6.3> Да приемем, че всички възли са в една и
съща стойка. Какво е
очакваното време за изпълнение с 5 възела? 10 възела? 100 възли? 1000 възли? Обсъдете тесните
b. [15] <6.2, 6.3> Да приемем, че има 40 възела на стелаж и че всяко отдалечено четене/запис има
еднакъв шанс да отиде до всеки възел. Какво е очакваното време за изпълнение при 100 възела?
1000 възли?
° С. [10] <6.2, 6.3> Важно съображение е минимизиране на движението на данни, доколкото е възможно.
Като се има предвид значителното забавяне на преминаването от локален към стелаж към достъп
до масив, софтуерът трябва да бъде силно оптимизиран, за да увеличи максимално локалността.
Да приемем, че има 40 възела на багажник и 1000 възела се използват в задачата MapReduce.
Какво е времето за изпълнение, ако отдалечените достъпи са в рамките на една и съща стойка
през 20% от времето? 50% от времето? 80% от времето?
д. [10] <6.2, 6.3> Като се има предвид простата програма MapReduce в раздел 6.2, обсъдете някои
възможни оптимизации за максимално увеличаване на локалността на работното натоварване.
6.15 [20/20/10/20/20/20] <6.2> WSC програмистите често използват репликация на данни, за да преодолеят
грешките в софтуера. Hadoop HDFS, например, използва трипосочна репликация (едно локално копие,
едно отдалечено копие в стелажа и едно отдалечено копие в отделен стелаж), но си струва да се проучи
кога е необходима такава репликация. а. [20] <6.2> Проучване сред присъстващите на Hadoop
World 2010 показа, че над половината от клъстерите на Hadoop имат 10 възела или по-малко, с размер
на набора от данни от 10 TB или по-малко.
Machine Translated by Google
Използвайки данните за честотата на отказите на Фигура 6.1, какъв вид наличност има
Hadoop клъстер с 10 възела с едно-, дву- и трипосочни репликации? b. [20] <6.2> Ако
приемем данните за неизправност във Фигура 6.1 и Hadoop клъстер с 1000 възела, какъв вид
наличност има при едно-, дву- и трипосочни репликации?
д. [20] <6.2> Като използвате фигура 6.6, изчислете времето за двупосочни и трипосочни
репликации. Като използвате нивата на неуспех, показани на Фигура 6.1, сравнете
очакваните времена за изпълнение при липса на репликация спрямо дву- и трипосочни
репликации.
д. [20] <6.2> Сега помислете за система от бази данни, прилагаща репликация върху
регистрационни файлове, като приемем, че всяка транзакция средно има достъп до
твърдия диск веднъж и генерира 1 KB регистрационни данни. Изчислете режийното време
за дву- и трипосочни репликации. Какво става, ако транзакцията се изпълнява в паметта и
отнема 10 μs? f. [20] <6.2> Сега помислете за система от бази данни с ACID консистенция, която
изисква две обиколки на мрежата за двуфазов ангажимент. Какво е режийното време за
поддържане на последователност, както и репликации?
6.16 [15/15/20/15/] <6.1, 6.2, 6.8> Въпреки че паралелизмът на ниво заявка позволява на много машини
да работят паралелно върху един проблем, като по този начин се постига по-голяма цялостна
производителност, едно от предизвикателствата е избягването на разделяне проблемът е
твърде фин. Ако разгледаме този проблем в контекста на споразуменията за ниво на обслужване
(SLA), използването на по-малки размери на проблема чрез по-голямо разделяне може да
изисква повече усилия за постигане на целевото SLA. Да приемем, че SLA от 95% от заявките
отговарят за 0,5 секунди или по-бързо и паралелна архитектура, подобна на MapReduce, която
може да стартира множество излишни задания, за да постигне същия резултат. За следните
въпроси приемете кривата на времето за заявка-отговор, показана на Фигура 6.24. Кривата
показва латентността на отговора въз основа на броя заявки в секунда за базов сървър, както и
за „малък“ сървър, който използва по-бавен процесорен модел.
а. [15] <6.1, 6.2, 6.8> Колко сървъра са необходими за постигане на това SLA, ако се приеме, че
WSC получава 30 000 заявки в секунда и кривата заявка – време за отговор, показана на
Фигура 6.24 ? Колко „малки“ сървъра са необходими за постигане на това SLA, като се има
предвид тази крива на вероятността за време за реакция?
Разглеждайки само разходите за сървъри, колко по-евтини трябва да бъдат „слабите“
сървъри от нормалните сървъри, за да се постигне предимство в разходите за целевото SLA?
b. [15] <6.1, 6.2, 6.8> Често „малките“ сървъри също са по-малко надеждни поради по-евтините
компоненти. Използвайки числата от Фигура 6.1, приемете, че броят на събитията, дължащи
се на нестабилни машини и лоши спомени, се увеличава с 30%. Колко „малки“ сървъра са
необходими сега? Колко по-евтини трябва да са тези сървъри от стандартните сървъри?
Machine Translated by Google
482 Шеста глава Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
3
Базово ниво
2.5 малък
1.5
)иЛ(
тсонтнета
1
0,5
0
1 2 3 4 5 6 7 8 9 10
Заявки в секунда, за един сървър
° С. [20] <6.1, 6.2, 6.8> Сега приемете среда за пакетна обработка. „Малките“ сървъри осигуряват
30% от общата производителност на обикновените сървъри. Все още приемайки числата
за надеждност от част (b) на упражнение 6.15, колко „слаби“ възли са необходими, за да
осигурят същата очаквана пропускателна способност на масив от 2400 възела от стандартни
сървъри, като се приеме перфектно линейно мащабиране на производителността спрямо
размера на възела и средна задача дължина от 10 минути на възел?
Ами ако скалирането е 85%? 60%? д. [15]
<6.1, 6.2, 6.8> Често скалирането не е линейна функция, а вместо това е логаритмична функция.
Естествен отговор може вместо това да бъде закупуване на по-големи възли, които имат
повече изчислителна мощност на възел, за да се минимизира размерът на масива.
Обсъдете някои от компромисите с тази архитектура.
6.17 [10/10/15] <6.3, 6.8> Една тенденция при сървърите от висок клас е към включването на
енергонезависима флаш памет в йерархията на паметта, или чрез твърдотелни дискове (SSD),
или PCI Express-прикрепени карти. Типичните SSD имат честотна лента от 250 MB/сек и
латентност от 75 μs, докато PCIe картите имат честотна лента от 600 MB/сек и латентност от 35
μs. а. [10] Вземете Фигура 6.7 и включете
масив? b. [10] Обсъдете някои базирани на софтуер оптимизации, които могат да използват новото ниво
на йерархията на паметта.
° С. [25] Повторете част (a), като вместо това приемете, че всеки възел има 32 GB PCIe карта
който е в състояние да кешира 50% от всички достъпи до диска.
д. [15] Както беше обсъдено в „Заблуди и капани“ (раздел 6.8), замяната на всички дискове със
SSD не е непременно рентабилна стратегия. Помислете за WSC оператор, който го използва
за предоставяне на облачни услуги. Обсъдете някои сценарии, при които използването на
SSD или друга флаш памет би имало смисъл.
Machine Translated by Google
6.18 [20/20/Дискусия] <6.3> Йерархия на паметта: Кеширането се използва силно в някои проекти на WSC
за намаляване на латентността и има множество опции за кеширане, за да се задоволят различни
модели и изисквания за достъп. а. [20] Нека
разгледаме дизайнерските опции за поточно предаване на богата медия от мрежата (напр. Netflix).
Първо трябва да преценим броя на филмите, броя на кодираните формати на филм и
потребителите, които гледат едновременно. През 2010 г. Netflix имаше 12 000 заглавия за
онлайн стрийминг, като всяко заглавие имаше поне четири кодирани формата (при 500, 1000,
1600 и 2200 kbps). Да приемем, че има 100 000 едновременни зрители за целия сайт и средно
един филм е с продължителност един час. Оценете общия капацитет за съхранение, I/O и
мрежовите честотни ленти, както и изчислителните изисквания, свързани с поточно видео.
° С. [Дискусия] Какви опции за съхранение на филми съществуват чрез използване на DRAM, SSD и
твърди дискове? Сравнете ги по производителност и TCO.
6.19 [10/20/20/Дискусия/Дискусия] <6.3> Помислете за уеб сайт за социални мрежи със 100 милиона активни
потребители, които публикуват актуализации за себе си (в текст и снимки), както и разглеждат и
взаимодействат с актуализации в своите социални мрежи .
За да осигурят ниска латентност, Facebook и много други уеб сайтове използват memcached като
кеширащ слой преди нивата за съхранение/база данни в задната
b. [20] Колко DRAM е необходима за уеб сайта за социални мрежи, обсъждан тук, за да хоства
работния си набор? Използвайки сървъри, всеки от които има 96 GB DRAM, преценете колко
достъпа до локална спрямо отдалечена памет са необходими за генериране на начална
страница на потребител?
д. [Дискусия] Днешното тясно свързване между модулите памет и процесорите често изисква
увеличаване на броя на процесорните гнезда, за да се осигури поддръжка на голяма памет.
Избройте други проекти за осигуряване на голяма физическа памет без пропорционално
увеличаване на броя на гнездата в сървъра. Сравнете ги въз основа на производителност,
мощност, разходи и надеждност.
484 Глава шеста Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
6.20 [5/5/10/10/Дискусия/Дискусия] <6.3, 6.6> Мрежа на центъра за данни: Map-Reduce и WSC са мощна
комбинация за справяне с широкомащабна обработка на данни; например Google през 2008 г.
сортира един петабайт (1 PB) записи за малко повече от 6 часа, използвайки 4000 сървъра и 48 000
твърди диска. а. [5] Извлечете честотната лента на диска от Фигура 6.1 и
b. [5] Ако приемем, че всеки сървър има две 1 Gb/sec Ethernet мрежови интерфейсни карти (NIC) и
инфраструктурата на WSC комутатора е презаписана с коефициент 4, колко секунди са необходими
за разбъркване на целия набор от данни в 4000 сървъра?
д. [10] Сега нека разгледаме ползите от наличието на 10 Gb/sec Ethernet без прекомерен абонамент –
например използване на 48-портов 10 Gb/sec Ethernet (както се използва от победителя в
бенчмарка Indy sort 2010 TritonSort). Колко време отнема разбъркването на 1 PB данни?
д. [Дискусия] Сравнете двата подхода тук: (1) подходът за мащабно мащабиране с висок коефициент
на свръхабонамент на мрежата и (2) сравнително малка по мащаб система с мрежа с висока
честотна лента. Какви са техните потенциални затруднения? Какви са техните предимства и
недостатъци по отношение на скалируемостта и TCO?
6.21 [10/25/Дискусия] <6.4, 6.6> Поради огромния мащаб на WSC е много важно да се разпределят правилно
мрежовите ресурси въз основа на работните натоварвания, които се очаква да бъдат изпълнени.
Различните разпределения могат да окажат значително въздействие както върху производителността,
така и върху общите разходи за притежание. а. [10]
Използвайки числата в електронната таблица, подробно описана на Фигура 6.13, какъв е коефициентът
на презаписване при всеки комутатор на ниво за достъп? Какво е въздействието върху TCO, ако
коефициентът на презаписване бъде намален наполовина? Ами ако се удвои?
междинни/изходни данни, както на Фигура 6.2, Септември 2009 г., и използвайте Фигура 6.6, за
да дефинирате честотните ленти на йерархията на паметта. За четене на данни приемете, че 50%
от данните се четат от отдалечени дискове; от тях 80% се четат от стелажа и 20% се четат от
масива. За междинни данни и изходни данни приемете, че 30% от данните използват отдалечени
дискове; от тях 90% са в стелажа и 10% в масива. Какво е цялостното подобрение на
производителността
Machine Translated by Google
° С. [Дискусия] Виждаме тенденцията към повече ядра на система. Виждаме също нарастващо
приемане на оптична комуникация (с потенциално по-висока честотна лента и подобрена
енергийна ефективност). Как мислите, че тези и други нововъзникващи технологични
тенденции ще повлияят на дизайна на бъдещите WSC?
6.22 [5/15/15/20/25] <6.5> Осъзнаване на възможностите на уеб услугите на Amazon: Представете си, че сте
оператор на сайт и мениджър на инфраструктура на Alexa.com топ сайт и обмислят използването
на Amazon Web Services (AWS). Какви фактори трябва да имате предвид, за да решите дали да
мигрирате към AWS, какви услуги и типове инстанции да използвате и колко разходи бихте могли
да спестите? Можете да използвате Alexa и информация за трафика на сайта (напр. Wikipedia
предоставя статистика за показване на страница), за да оцените количеството трафик, получен от
най-популярния сайт, или можете да вземете конкретни примери от мрежата, като например
следния пример от DrupalCon San Francisco 2010: http://2bits.com/sites/2bits.com/files/drupal-single-
server-2.8-million-page-views-a-day.pdf . Слайдовете описват сайт на Alexa #3400, който получава 2,8
милиона показвания на страници на ден, използвайки един сървър. Сървърът има два четириядрени
процесора Xeon 2,5 GHz с 8 GB DRAM и три 15 K RPM SAS твърди диска в конфигурация RAID1 и
струва около $400 на месец. Сайтът използва интензивно кеширане и използването на процесора
варира от 50% до 250% (приблизително 0,5 до 2,5 ядра заети). а. [5] Разглеждайки наличните
екземпляри на EC2 (http://aws.amazon.com/ec2/instance-types/ ), какви типове екземпляри
° С. [15] Сега добавете разходите за IP адрес и мрежов трафик към уравнението и да предположим,
че сайтът прехвърля 100 GB/ден в Интернет. Каква е месечната цена за сайта сега?
д. [20] AWS също предлага Micro Instance безплатно за 1 година на нови клиенти и 15 GB честотна
лента всеки за трафик, влизащ и изходящ през AWS. Въз основа на вашата оценка за пиков и
среден трафик от уеб сървъра на вашия отдел, можете ли да го хоствате безплатно на AWS? д.
[25] Много по-голям сайт, Netflix.com,
също мигрира своята инфраструктура за стрийминг и кодиране към AWS. Въз основа на техните
характеристики на услугата, какви AWS услуги могат да се използват от Netflix и за какви цели?
ниска латентност. а. [Дискусия] Вземайки уеб търсенето като пример, какви са възможните начини
за намаляване на забавянето на заявката?
Machine Translated by Google
486 Шеста глава Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
[20] Ако приемем, че броят достъпи до диска на заявка следва нормално разпределение със средно
2 и стандартно отклонение 3, какъв вид латентност на достъпа до диска е необходима, за да се
удовлетвори SLA за латентност от 0,1 секунди за 95% от заявките ?
д. [20] Кеширането в паметта може да намали честотата на събития с дълга латентност (напр. достъп
до твърди дискове). Ако приемем, че процентът на попадение в стабилно състояние е 40%,
латентност на попадение от 0,05 сек и латентност на пропуск от 0,2 сек, кеширането помага ли
да се постигне SLA за латентност от 0,1 сек за 95% от заявките?
д. [Дискусия] Кога кешираното съдържание може да стане остаряло или дори непоследователно?
Колко често може да се случи това? Как можете да откриете и обезсилите такова съдържание?
6.24 [15/15/20] <6.4> Ефективността на типичните захранващи блокове (PSU) варира в зависимост от промяната
на натоварването; например, ефективността на PSU може да бъде около 80% при 40% натоварване
(напр. мощност 40 вата от 100-ватов PSU), 75%, когато натоварването е между 20% и 40%, и 65%,
когато натоварването е под 20 %. а. [15] Да приемем сървър
b. [15] Да предположим, че сървърът използва 2N излишък за PSU (т.е. удвоява броя на PSU), за да
осигури стабилно захранване, когато едно PSU откаже. Каква е средната ефективност на PSU?
° С. [20] Доставчиците на блейд сървъри използват споделен пул от PSU не само за осигуряване на
резервиране, но и за динамично съпоставяне на броя на PSU с действителната консумация на
енергия на сървъра. Корпусът HP c7000 използва до шест PSU за общо 16 сървъра. В този
случай каква е средната ефективност на PSU за корпуса на сървъра със същата крива на
използване?
° С. [10] Помислете за колекция от машини на ниво масив, където общите машини никога не
използват повече от 72% от съвкупната мощност (това понякога се нарича също съотношение
между пиковата сума и сумата на пиковото използване) .
Използвайки модела на разходите в казуса, изчислете икономиите на разходи от сравняване
на център за данни, осигурен за пиков капацитет, и такъв, осигурен за действително използване.
Machine Translated by Google
1 1
0,8 0,99
0,6 0,98
F DC
FDC
0,4 0,97
ж. [Дискусия] Какво се случва с общата напрегната мощност, ако системите станат по-пропорционални
на енергията (приемете работни натоварвания, подобни на тези от Фигура 6.4)?
6.26 [5/20/Дискусия] <6.4, 6.7> Раздел 6.7 обсъжда използването на източници на батерии на сървър в дизайна
на Google. Нека разгледаме последствията от този дизайн. а. [5] Да приемем, че използването на
батерия като UPS на ниво мини сървър е 99,99% ефективно и елиминира необходимостта от UPS за
цялото съоръжение, който е само 92% ефективен. Да приемем, че превключването на
подстанцията е 99,7% ефективно и че ефективността за PDU, понижаващите стъпала и други
електрически прекъсвачи е съответно 98%, 98% и 99%. Изчислете цялостните подобрения на
ефективността на енергийната инфраструктура от използването на резервна батерия за сървър.
Machine Translated by Google
488 Шеста глава Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
° С. [Дискусия] Какви са другите компромиси между тези два подхода? По-специално, как мислите, че
моделът на управляемост и отказ ще се промени в тези два различни дизайна?
6.27 [5/5/Дискусия] <6.4> За това упражнение разгледайте опростено уравнение за общата оперативна мощност на
WSC, както следва: Обща оперативна мощност = (1 + множител за неефективност на охлаждане) * мощност
на ИТ оборудване. а. [5] Да приемем 8 MW център за данни при 80% потребление
6.28 [5/5/Дискусия] <6.4> Както беше обсъдено в тази глава, самото охлаждащо оборудване в WSC може да
консумира много енергия. Разходите за охлаждане могат да бъдат намалени чрез проактивно управление
на температурата. Разполагането на работното натоварване в зависимост от температурата е една
оптимизация, която е предложена за управление на температурата, за да се намалят разходите за
охлаждане. Идеята е да се идентифицира профилът на охлаждане на дадено помещение и да се
картографират по-горещите системи към по-хладните точки, така че на ниво WSC изискванията за
цялостно охлаждане да бъдат
намалени. а. [5] Коефициентът на ефективност (COP) на модул CRAC се определя като съотношението на
отведената топлина (Q) към необходимото количество работа (W) за отстраняване на тази топлина.
COP на CRAC модул се увеличава с температурата на въздуха, който CRAC модулът изтласква в
камерата. Ако въздухът се върне към модула CRAC при 20 градуса по Целзий и ние премахнем 10 KW
топлина с COP от 1,9, колко енергия изразходваме в модула CRAC? Ако охлаждането на същия обем
въздух, но сега връщане на 25 градуса по Целзий, отнема COP от 3,1, колко енергия изразходваме в
модула CRAC сега?
° С. [Дискусия] Предвид мащаба на WSC системите, управлението на мощността може да бъде сложен,
многостранен проблем. Оптимизации за подобряване на енергийната ефективност
Machine Translated by Google
6.29 [5/10/15/20] <6.2> Енергийната пропорционалност (понякога наричана още намаляване на енергийния
мащаб) е характеристиката на системата да не консумира енергия, когато е неактивна, но по-важното
е постепенно да консумира повече енергия пропорционално на ниво на активност и свършена
работа. В това упражнение ще изследваме чувствителността на потреблението на енергия спрямо
различните модели на пропорционалност на енергията. В упражненията по-долу, освен ако не е
посочено друго, използвайте данните от Фигура 6.4 като стандартни. а. [5] Лесен начин
д. [20] Потенциално може да се проектира система, която има сублинейна връзка между мощността и
натоварването в областта на нивата на натоварване между 0% и 50%. Това ще има крива на
енергийна ефективност, която достига връх при по-ниско използване (за сметка на по-високо
използване). Създайте нова версия на колона 3 от Фигура 6.4 , която показва такава крива на
енергийна ефективност. Да приемем комбинацията от използване на системата в колона 7 на
Фигура 6.4. За простота приемете дискретно разпределение между 1000 сървъра, със 109 сървъра
при 0% използване, 80 сървъра при 10% използване и т.н. Изчислете общата производителност
490 Глава шеста Компютри с мащаб на склад за използване на паралелизма на ниво заявка и ниво данни
Мощност, кутия A (W) 181 308 351 382 416 451 490 533 576 617 662
Мощност, кутия B (W) 250 275 325 340 395 405 415 425 440 445 450
6.30 [15/20/20] <6.2, 6.6> Това упражнение илюстрира взаимодействията на моделите за енергийна
пропорционалност с оптимизации като консолидация на сървъри и енергийно ефективни
сървърни проекти. Разгледайте сценариите, показани на Фигура 6.26 и
Фигура 6.27.
6.31 [10/Дискусия] <6.2, 6.4, 6.6> Тенденции в енергийната пропорционалност на системно ниво:
Помислете за следните разбивки на консумацията на енергия на сървър:
излишни компоненти
охлаждането
Фигура 6.28 Преглед на класификациите на нивата на центъра за данни. (Адаптирано от Пит Търнър IV
et al. [2008].)
6.32 [30] <6.4> Pitt Turner IV et al. [2008] представи добър преглед на центъра за данни
класификации на нива. Класификациите на нива определят производителността на инфраструктурата на сайта. За
6.33 [Дискусия] <6.4> Въз основа на наблюденията на Фигура 6.13, какво можете да кажете
качествено относно компромисите между загуба на приходи от престой и разходи
направени за време на работа?
6.34 [15/Дискусия] <6.4> Някои скорошни проучвания са дефинирали показател, наречен TPUE,
което означава „истинска PUE“ или „обща PUE“. TPUE се определя като PUE * SPUE.
492 Шеста глава Компютри с мащаб на склад за използване на паралелизъм на ниво заявка и ниво данни
* ns * ns – 75 * * ns ns,
Мощност на вентилатора ns
вентилатора в rpm/18 000 и базова сървърна мощност от 350 W. Изчислете SPUE, ако скоростта на вентилатора
се увеличава от (1) 10 000 rpm до 12 500 rpm и (2) 10 000 rpm до 18 000
об/мин. Сравнете PUE и TPUE и в двата случая. (За простота, игнорирайте
неефективността с доставката на енергия в модела SPUE.)
b. [Дискусия] Част (a) илюстрира, че докато PUE е отлична метрика за улавяне на режийните разходи
на съоръжението, тя не улавя неефективността в рамките
самото ИТ оборудване. Можете ли да идентифицирате друг дизайн, където е TPUE
потенциално по-ниска от PUE? (Съвет: Вижте упражнение 6.26.)
b. [30] <6.2> JouleSort измерва общата системна енергия за извършване на извънядрено сортиране и
се опитва да извлече показател, който позволява сравнението на системите
вариращи от вградени устройства до суперкомпютри. Вижте описанието на
метриката JouleSort на http://sortbenchmark.org. Изтеглете публично достъпна версия на
алгоритъма за сортиране и я стартирайте на различни класове машини –
лаптоп, компютър, мобилен телефон и др.—или с различни конфигурации. Какво може
учите ли се от оценките на JouleSort за различни настройки?
6.36 [10/10/15] <6.1, 6.2> Фигура 6.1 е списък на прекъсванията в масив от сървъри.
Когато се работи с големия мащаб на WSC, е важно да се балансира клъстерът
дизайн и софтуерни архитектури за постигане на необходимия ъптайм без значителни разходи. Този
въпрос изследва последиците от постигането на наличност само чрез хардуер.
а. [10] <6.1, 6.2> Ако приемем, че оператор желае да постигне 95% наличност
само чрез подобрения на сървърния хардуер, колко събития от всеки тип
трябва ли да се намали? Засега приемете, че отделните сривове на сървъра са
b. [10] <6.1, 6.2> Как се променя отговорът на част (a), ако индивидът
сривовете на сървъра се обработват чрез резервиране в 50% от времето? 20% от времето?
Нито един път?
Machine Translated by Google
6.37 [15] <6.1, 6.8> Потърсете текущите цени на стандартната DDR3 DRAM спрямо DDR3 DRAM,
която има код за коригиране на грешки (ECC). Какво е увеличението на цената на бит за
постигане на по-висока надеждност, която предоставя ECC? Използвайки само цените на
DRAM и данните, предоставени в раздел 6.8, какво е времето за работа на долар на WSC
с не-ECC спрямо ECC DRAM?
а. [5] Помислете за клъстер от сървъри, струващ $2000 всеки. Ако приемем годишен
процент на повреда от 5%, средно един час време за обслужване на ремонт и
резервни части, изискващи 10% от системните разходи за повреда, какви са
годишните разходи за поддръжка на сървър? Да приемем почасова ставка от $100
на час за сервизен техник.
А
Принципи на набора от инструкции 1
Уилкс и Ренуик
Избор от списъка с 18 машини
Инструкции за EDSAC (1949)
Machine Translated by Google
А.1 Въведение
Архитектурата MIPS, която управлява това приложение, се използва успешно в настолни компютри, сървъри
и вградени приложения.
Законът на Мур накара Intel да използва набор от RISC инструкции вътрешно, като същевременно поддържа
Външен набор от инструкции 80x86. Последните 80x86 микропроцесори, като Pen-tium 4, използват хардуер
за превод от 80x86 инструкции към RISC-подобни инструкции и след това изпълняват преведените операции
След като фонът е зададен, започваме с изследване на начина, по който се задават инструкциите
архитектурите могат да бъдат класифицирани.
само изрични операнди - или регистри, или места в паметта. Фигура A.1 показва a
комплекти. Явните операнди могат да бъдат достъпни директно от паметта или може да са необходими
Както показват цифрите, наистина има два класа регистрационни компютри. един
класът може да има достъп до паметта като част от всяка инструкция, наречена архитектура регистър-
днес съхранява всички операнди в паметта и се нарича архитектура памет-памет . Някои архитектури на
набори от инструкции имат повече регистри от единичен акумулатор, но поставят ограничения върху
Въпреки че повечето ранни компютри са използвали архитектури в стил стек или акумулатор,
на практика всяка нова архитектура, проектирана след 1980 г., използва регистър за зареждане
(GPR) компютрите са двойни. Първо, регистрите - подобно на други форми на вътрешно съхранение на
... ...
Процесор
TOS
... ...
...
Фигура A.1 Разположения на операнд за четири архитектурни класа на набор от инструкции. Стрелките показват дали oper-and е вход или резултат
от операцията на аритметично-логическата единица (ALU), или едновременно вход и резултат. По-светли нюанси
обозначават входове, а тъмният нюанс показва резултата. В (a) регистър Top Of Stack (TOS) сочи към горния вход
операнд, който се комбинира с операнда по-долу. Първият операнд се премахва от стека, резултатът се взема
мястото на втория операнд и TOS се актуализира, за да сочи към резултата. Всички операнди са имплицитни. В (b) акумулаторът е едновременно
косвен входен операнд и резултат. В (c) един входен операнд е регистър, един е в паметта и
резултатът отива в регистър. Всички операнди са регистри в (d) и, подобно на стековата архитектура, могат да бъдат прехвърлени към
памет само чрез отделни инструкции: натиснете или изскочете за (a) и заредете или съхранете за (d).
Регистър
Стек Акумулатор (регистър-памет) Регистриране (зареждане-съхранение)
разпределени към регистрите, трафикът на паметта намалява, програмата се ускорява (тъй като
регистрите са по-бързи от паметта) и плътността на кода се подобрява (тъй като регистър
може да се наименува с по-малко битове, отколкото място в паметта).
Както е обяснено в Раздел A.8, авторите на компилатори биха предпочели всички регистри
да бъде еквивалентен и безрезервен. По-старите компютри компрометират това желание, като отделят
регистрите за специални цели, като ефективно намаляват броя на регистрите с общо предназначение.
Ако броят на наистина регистрите с общо предназначение е твърде малък,
опитите за разпределяне на променливи към регистрите няма да бъдат печеливши. Вместо това,
компилаторът ще запази всички некоммитирани регистри за използване при оценка на израз.
Колко регистъра са достатъчни? Отговорът, разбира се, зависи от
ефективност на компилатора. Повечето компилатори запазват някои регистри за оценка на израза,
използват някои за предаване на параметри и позволяват на останалите да бъдат
разпределени за задържане на променливи. Съвременната технология на компилатор и нейната
способност да използва ефективно по-голям брой регистри доведе до увеличаване на броя на регистрите в
по-нови архитектури.
Фигура A.3 Типични комбинации от операнди на паметта и общи операнди за типична ALU инструкция с
примери за компютри. Компютрите без препратка към памет за ALU инструкция се наричат компютри за зареждане или регистър-
регистр. Инструкциите с множество операнди на паметта за типична ALU инструкция се наричат регистър-памет или памет-памет,
според това дали имат един или повече от един операнд на паметта.
Регистрирайте се-регистрирайте се Просто кодиране на инструкции с фиксирана дължина. По-голям брой инструкции в сравнение с архитектурите с
(0, 3) Прост модел за генериране на код. Инструкциите препратки към паметта в инструкциите. Повече инструкции и
изискват подобен брой часовници за изпълнение по-ниската плътност на инструкциите водят до по-
(вижте Приложение C). големи програми.
Регистър-памет Данните могат да бъдат достъпни без първо отделна Операндите не са еквивалентни, тъй като операнд
(12) инструкция за зареждане. Форматът на инструкциите източник в двоична операция се унищожава.
обикновено е лесен за кодиране и дава добра плътност. Кодирането на номер на регистър и адрес на паметта
във всяка инструкция може да ограничи броя на регистрите.
Тактовете на инструкция варират според местоположението на операнда.
Памет-памет Най-компактен. Не губи регистри за временни Голяма вариация в размера на инструкцията, особено за
(2, 2) или (3, 3) лица. инструкции с три операнда. В допълнение, голяма
вариация в работата по инструкция. Достъпите до паметта
създават тесни места в паметта. (Не се използва днес.)
Фигура A.4 Предимства и недостатъци на трите най-разпространени типа регистриращи компютри с общо предназначение. Нотацията
(m, n) означава m операнда от паметта и n общо операнда. Като цяло компютрите с по-малко алтернативи опростяват задачата на
компилатора, тъй като има по-малко решения, които компилаторът трябва да вземе (вижте раздел A.8).
Компютрите с голямо разнообразие от гъвкави формати на инструкции намаляват броя на битовете, необходими за кодиране на
програмата. Броят на регистрите също влияе върху размера на инструкцията, тъй като имате нужда от log2 (брой регистри) за всеки
спецификатор на регистър в инструкция. По този начин удвояването на броя на регистрите отнема 3 допълнителни бита за регистър-регистър
архитектура, или около 10% от 32-битова инструкция.
Тук и в края на раздели A.3 до A.8 ние обобщаваме тези характеристики, които бихме
очаквали да открием в нова архитектура на набор от инструкции, изграждайки
основа за MIPS архитектурата, въведена в раздел A.9. От този раздел трябва ясно да очакваме
Независимо от това дали архитектурата е със зареждане или позволява всеки операнд да
бъде препратка към паметта, тя трябва да дефинира как се интерпретират адресите на
паметта и как се специфицират. Представените тук измервания са до голяма степен, но не
напълно, независими от компютъра. В някои случаи измерванията са значително
повлияни от технологията на компилатора. Тези измервания са направени с помощта на
оптимизиращ компилатор, тъй като технологията на компилатора играе критична роля.
Как се интерпретира адресът на паметта? Тоест кой обект е достъпен като функция на
адреса и дължината? Всички набори от инструкции, обсъдени в тази книга, са байтово
адресирани и осигуряват достъп до байтове (8 бита), половин думи (16 бита) и думи (32
бита). Повечето от компютрите предоставят достъп и за двойни думи (64 бита).
76543210
Редът на байтовете Big Endian поставя байта, чийто адрес е „x“. . . x000” в най-значимата
позиция в двойната дума (големият край). Байтовете са номерирани:
01234567
Ширина на обекта 0 1 2 3 4 5 6 7
1 байт (байт) 2 Подравнени Подравнени Подравнени Подравнено Подравнено Подравнени Подравнено Подравнено
байта (половин дума) 4 Неправилно подравнен Неправилно подравнен Неправилно подравнен Неправилно подравнен
Неправилно подравнен
Неправилно подравнен
Неправилно подравнен
Фигура A.5 Подравнени и неподравнени адреси на обекти от байтове, половин дума, дума и двойна дума за компютри с байт адрес. За всеки неправилно подравнен пример някои
подравненият обект винаги може да завърши с един достъп до паметта, стига паметта да е толкова широка, колкото и обектът. Фигурата
показва паметта, организирана като широка 8 байта. Отместванията в байтовете, които обозначават колоните, указват 3-те бита от нисък ред на
адресът.
следователно може да приема множество подравнени препратки към паметта. По този начин, дори в
компютри, които позволяват неправилно подравнен достъп, програмите с подравнен достъп работят по-бързо.
Дори ако данните са подравнени, поддържа се достъп до байтове, половин думи и думи
изисква мрежа за подравняване за подравняване на байтове, половин думи и думи в 64-битов
регистри. Например, на фигура A.5 да предположим, че четем байт от адрес
с неговите 3 бита от нисък ред със стойност 4. Ще трябва да преместим надясно 3 байта към
подравнете байта на правилното място в 64-битов регистър. В зависимост от инструкцията може да
се наложи компютърът да подпише и удължи количеството. Магазините са лесни:
Могат да се променят само адресираните байтове в паметта. На някои компютри байт,
половин дума и операцията с дума не засяга горната част на регистъра.
Въпреки че всички компютри, обсъдени в тази книга, позволяват байт, половин дума и
word достъп до паметта, само IBM 360/370, Intel 80x86 и поддръжка на VAX
ALU операции върху регистърни операнди, по-тесни от пълната ширина.
След като обсъдихме алтернативни интерпретации на адресите на паметта,
можем да обсъдим начините, по които адресите се определят чрез инструкции, наречени режими
на адресиране.
Machine Translated by Google
Режими на адресиране
При даден адрес вече знаем до кои байтове да имаме достъп в паметта. В този подраздел ще
разгледаме режимите на адресиране – как архитектурите определят адреса
на обект, до който ще имат достъп. Режимите на адресиране определят константи и регистри в
допълнение към местоположения в паметта. Когато се използва място в паметта, действителното
адресът на паметта, определен от режима на адресиране, се нарича ефективен адрес.
Фигура A.6 показва всички режими на адресиране на данни, използвани напоследък
компютри. Непосредствените или литералите обикновено се считат за адресиране на паметта
Регистрирайте индиректно Добавете R4, (R1) Правила[R4] Правила[R4] Достъп с помощта на указател или
+ Mem[Regs[R1]] изчислен адрес.
Индексиран Добавете R3, (R1 + R2) Правила[R3] Правила[R3] Понякога е полезно при
+ Mem[Regs[R1] + Regs[R2]] адресиране на масив: R1 = основа на
масива; R2 = сума на индекса.
Директно или Добавете R1, (1001) Правила[R1] Правила[R1] Понякога е полезно за достъп до
абсолютен + Mem [1001] статични данни; може да се наложи
адресната константа да е голяма.
Индиректна памет Добавете R1,@(R3) Правила[R1] Правила[R1] Ако R3 е адресът на указател p, тогава
+ Mem[Mem[Regs[R3]]] mode дава *p.
Автоматично увеличаване Добавете R1,(R2)+ Правила[R1] Правила[R1] Полезно за преминаване през масиви в
+ Mem[Regs[R2]] рамките на цикъл. R2 сочи към началото
Regs[R2] Regs[R2] + d на масива; всяка препратка увеличава R2
с размер на елемент, d.
Автодекремент Добавете R1, –(R2) Regs[R2] Regs[R2] – d Същата употреба като автоинкремент.
Основният въпрос, който възниква при режим на адресиране в стил на изместване, е този за
обхвата на използваните измествания. Въз основа на използването на различни размери на
изместване може да се вземе решение какви размери да се поддържат. Изборът на размерите
на полето за изместване е важен, защото те пряко влияят върху дължината на инструкцията.
Фигура A.8 показва измерванията, направени при достъпа до данни в архитектура за зареждане,
TeX 1%
Памет индиректна подправка 6%
1%
gcc
TeX 0%
Мащабена
подправка
16%
6%
gcc
TeX 24%
Регистрирайте индиректна 3%
подправка
11%
gcc
TeX 43%
Незабавна 17%
подправка
39%
gcc
TeX 32%
Изместване 55%
подправка
40%
gcc
0% 10% 20% 30% 40% 50% 60%
Честота на режима на адресиране
Първо, поради тяхната популярност бихме очаквали нова архитектура да поддържа поне следните
режими на адресиране: изместване, незабавно и индиректно регистриране. Фигура A.7 показва, че
те представляват 75% до 99% от режимите на адресиране, използвани в нашите измервания. Второ,
бихме очаквали размерът на адреса за режим на изместване да бъде поне 12 до 16 бита, тъй като
надписът на Фигура A.8 предполага, че тези размери ще уловят 75% до 99% от изместванията.
Machine Translated by Google
40%
35%
Средно цяло число
30%
25%
20%
мразП
енатвнтесцео и
н
10%
5%
0%
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Брой битове на изместване
Фигура A.8 Стойностите на преместването са широко разпространени. Има както голям брой малки стойности, така и справедлив
брой големи стойности. Широкото разпределение на стойностите на изместване се дължи на множество области за съхранение на
променливи и различни измествания за достъп до тях (вижте раздел A.8), както и на цялостната схема за адресиране, използвана от
компилатора. Оста x е log2 на изместването, тоест размерът на полето, необходим за представяне на величината на изместването.
Нулата на оста x показва процента на измествания със стойност 0. Графиката не включва знаковия бит, който е силно повлиян от
оформлението на паметта. Повечето измествания са положителни, но повечето от най-големите измествания (14+ бита) са
отрицателни. Тъй като тези данни са събрани на компютър с 16-битови измествания, те не могат да ни кажат за по-големи
измествания. Тези данни бяха взети на архитектура Alpha с пълна оптимизация (вижте раздел A.8) за SPEC CPU2000, показвайки
средната стойност на целочислените програми (CINT2000) и средната стойност на програмите с плаваща запетая (CFP2000).
22%
Натоварвания
23%
19%
ALU операции 25%
16%
Всички инструкции
21%
Фигура A.9 Около една четвърт от трансферите на данни и ALU операциите имат непосредствен
операнд. Долните ленти показват, че целочислените програми използват непосредствени в около
една пета от инструкциите, докато програмите с плаваща запетая използват непосредствени в
около една шеста от инструкциите. За зареждания инструкцията за незабавно зареждане зарежда
16 бита във всяка половина на 32-битов регистър. Незабавното зареждане не е зареждане в тесен
смисъл, защото няма достъп до паметта. Понякога се използва двойка незабавни зареждания за
зареждане на 32-битова константа, но това е рядко. (За ALU операции, премествания с постоянна
стойност са включени като операции с непосредствени операнди.) Програмите и компютърът,
използвани за събиране на тези статистически данни, са същите като на фигура A.8.
Machine Translated by Google
45%
40%
35%
Средна стойност с плаваща запетая
30%
25%
интвнаебцаозреП
н
20%
15%
Средно цяло число
10%
5%
0%
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Брой битове, необходими за незабавно
Фигура A.10 Разпределението на непосредствените стойности. Оста x показва броя на битовете, необходими за представяне
на величината на непосредствена стойност - 0 означава, че непосредствената стойност на полето е била 0. Повечето от
непосредствените стойности са положителни. Около 20% са отрицателни за CINT2000 и около 30% са отрицателни за
CFP2000. Тези измервания са направени на Alpha, където максимумът непосредствено е 16 бита, за същите програми като
на Фигура A.8. Подобно измерване на VAX, който поддържа 32-битови незабавни съобщения, показа, че около 20% до 25%
от незабавните данни са по-дълги от 16 бита. Така 16 бита биха уловили около 80%, а 8 бита около 50%.
плаваща запетая (2 думи). Целите числа са почти универсално представени като две
допълващи двоични числа. Символите обикновено са в ASCII, но 16-битов
Unicode (използван в Java) набира популярност с интернационализацията на
компютри. До началото на 80-те години повечето производители на компютри избираха своите
представяне с плаваща запетая. Почти всички компютри оттогава следват същото
стандарт за плаваща запетая, IEEE стандарт 754. IEEE стандарт за плаваща запетая
се обсъжда подробно в Приложение J.
Някои архитектури предоставят операции върху символни низове, въпреки че такива
операциите обикновено са доста ограничени и третират всеки байт в низа като единичен
характер. Типични операции, поддържани върху символни низове, са сравненията
и се движи.
изчисленията, които са точни в десетична система, могат да бъдат близки, но неточни в двоична система, което може да бъде
както е на фигура A.12. Едно основно правило във всички архитектури е, че най-много
широко изпълняваните инструкции са простите операции на набор от инструкции. За
Например, Фигура A.13 показва 10 прости инструкции, които представляват 96% от
Machine Translated by Google
Слово 29%
(32 бита) 26%
Половин дума 0%
(16 бита) 5%
Средна стойност с плаваща запетая
(8 бита) 10%
Аритметични и логически Аритметични и логически операции с цели числа: събиране, изваждане и, или,
умножавам, разделям
Фигура A.12 Категории оператори с инструкции и примери за всеки. Всички компютри обикновено предоставят
пълен набор от операции за първите три категории. Подкрепата
за системните функции в набора от инструкции варира значително в различните архитектури, но всички
компютрите трябва да имат някаква поддръжка на инструкции за основни системни функции. Сумата
на поддръжка в набора от инструкции за последните четири категории може да варира от нито една до an
обширен набор от специални инструкции. Инструкции с плаваща запетая ще бъдат предоставени във всеки
компютър, който е предназначен за използване в приложение, което използва много плаващ
точка. Тези инструкции понякога са част от незадължителен набор от инструкции. Десетичен и
инструкциите за низове понякога са примитивни, както във VAX или IBM 360, или могат да бъдат
синтезирани от компилатора от по-прости инструкции. Типични графични инструкции
работят с много по-малки елементи от данни паралелно - например извършване на осем 8-битови
допълнения към два 64-битови операнда.
Machine Translated by Google
1 натоварване 22%
3 сравнявам 16%
4 магазин 12%
5 добавете 8%
6 и 6%
7 суб 5%
8 преместване регистър-регистър 4%
9 обадете се 1%
10 връщане 1%
Условни разклонения
Скокове
Machine Translated by Google
10%
скочи
6%
82%
Условен клон
75%
Фигура A.14 Разбивка на инструкциите на контролния поток в три класа: извиквания или връщания,
прескачане и условни разклонения. Ясно доминират условните разклонения.
Всеки тип се брои в една от трите ленти. Програмите и компютърът, използвани за събиране на
тези статистически данни, са същите като тези на фигура A.8.
Извиквания на процедури
Процедура за връщане
Искаме да знаем относителната честота на тези събития, тъй като всяко събитие е различно, може да
използва различни инструкции и може да има различно поведение. Фигура A.14 показва честотите на тези
Тази дестинация е посочена изрично в инструкцията в по-голямата част от случаите - връщането на процедура
е основното изключение, тъй като за връщане целта не е известна по време на компилиране. Най-често
програмния брояч (PC). Инструкциите за контролен поток от този вид се наричат PC-относителни. Свързаните
с PC разклонения или скокове са изгодни, тъй като целта често е близо до текущата инструкция и уточняването
също позволява на кода да работи независимо от това къде е зареден. Това свойство, наречено независимост
на позицията, може да елиминира част от работата, когато програмата е свързана и също е полезно в
компилиране, е необходим метод, различен от PC-относителното адресиране. Тук трябва да има начин да се
Този динамичен адрес може да бъде толкова прост, колкото именуване на регистър, който съдържа адреса
Тези индиректни скокове в регистъра също са полезни за четири други важни функции:
Виртуални функции или методи в обектно-ориентирани езици като C++ или Java (които позволяват
извикване на различни процедури в зависимост от типа на аргумента)
Функции от висок ред или функционални указатели в езици като C или C++ (които позволяват
функциите да бъдат предавани като аргументи, давайки част от вкуса на обектно-ориентираното
програмиране)
30%
25%
20%
Средно
цяло число
15%
но
еинтя етцсозраП
н
р
10%
5%
0%
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15, 16, 17, 18, 19, 20
Части от изместване на клона
Фигура A.15 Разстояния на разклоняване по отношение на броя на инструкциите между целта и инструкцията за разклоняване.
Най-честите разклонения в целочислените програми са към цели, които могат да бъдат кодирани в 4 до 8 бита. Този резултат ни казва,
че късите полета за изместване често са достатъчни за разклонения и че дизайнерът може да получи известна плътност на кодиране,
като има по-кратка инструкция с по-малко изместване на разклоненията. Тези измервания бяха направени на компютър за зареждане
(Alpha архитектура) с всички инструкции, подравнени по границите на думите. Архитектура, която изисква по-малко инструкции за
една и съща програма, като например VAX, ще има по-къси разклонения. Въпреки това, броят на битовете, необходими за
изместването, може да се увеличи, ако компютърът има инструкции с променлива дължина, които да бъдат подравнени на която и да
е граница на байт. Програмите и компютърът, използвани за събиране на тези статистически данни, са същите като тези на фигура A.8.
Machine Translated by Google
Тъй като повечето промени в контролния поток са разклонения, решаването как да се уточни
По този начин някои архитектури избират да третират тези сравнения като специални случаи,
състояние; като минимум обратният адрес трябва да бъде записан някъде, понякога в a
специален регистър на връзките или просто GPR. Някои по-стари архитектури предоставят механизъм за
Има две основни конвенции, които се използват за запазване на регистрите: или на сайта за повикване
повикване трябва да запише регистрите, които иска да бъдат запазени за достъп след повикването, и
обратното: извиканата процедура трябва да запише регистрите, които иска да използва, оставяйки
обаждащият се необуздан. Има моменти, когато запазването на обаждащия се трябва да се използва поради
Код на 80x86, ARM, Тества специални битове, Понякога условието е CC е допълнително състояние.
условието (CC) PowerPC, зададени от ALU операции, безплатно. Кодовете на условия ограничават
SPARC, SuperH вероятно под контрол на програмата. подреждането на инструкциите,
тъй като те предават информация от една
инструкция към разклонение.
Сравнете PA-RISC, VAX Compare е част от клона. Често Една инструкция вместо Може да е твърде много работа за
и разклонете сравнението е ограничено две за клон. една инструкция за конвейерно
до подмножество. изпълнение.
Фигура A.16 Основните методи за оценка на условията в бранша, техните предимства и недостатъци.
Въпреки че кодовете на условия могат да бъдат зададени от ALU операции, които са необходими за други цели, измерванията на
програмите показват, че това се случва рядко. Основните проблеми с внедряването на кодовете на условия възникват, когато кодът на
условието е зададен от голямо или произволно избрано подмножество от инструкции, вместо да се контролира от бит в
инструкцията. Компютрите със сравняване и разклоняване често ограничават набора от сравнения и използват регистър на условия за
по-сложни сравнения. Често се използват различни техники за разклонения, базирани на сравнение с плаваща запетая спрямо тези,
базирани на сравнение на цели числа. Тази дихотомия е разумна, тъй като броят на клоновете зависи от
сравненията с плаваща запетая е много по-малък от числото, зависещо от целочислените сравнения.
Machine Translated by Google
16%
Равен
18%
0%
По-голямо или равно 11%
0%
По-велик от
0%
44%
По-малко или равно
33%
34%
По-малко от
35%
Фигура A.17 Честота на различни видове сравнения в условни разклонения. По-малко от (или
равни) разклонения доминират тази комбинация от компилатор и архитектура.
Тези измервания включват както цяло число, така и сравнение с плаваща запетая в клонове.
Програмите и компютърът, използвани за събиране на тези статистически данни, са същите
като тези на фигура A.8.
над или под клона. Това изискване предполага изместване на клона спрямо PC от поне 8 бита.
Също така бихме очаквали да видим непряко адресиране на регистъра и свързано с PC
адресиране за инструкции за прескачане, за да поддържаме връщания, както и много други
функции на настоящите системи.
Вече завършихме нашата обиколка на архитектурата на инструкциите на нивото, виждано
от програмист на асемблер или автор на компилатор. Склоняме се към архитектура за
съхранение на зареждане с режими на изместване, незабавно и индиректно адресиране при
регистриране. Тези данни са 8-, 16-, 32- и 64-битови цели числа и 32- и 64-битови данни с
плаваща запетая. Инструкциите включват прости операции, условни разклонения, свързани с
PC, инструкции за прескачане и свързване за извикване на процедура и регистриране на
косвени скокове за връщане на процедура (плюс няколко други приложения).
Сега трябва да изберем как да представим тази архитектура във форма, която прави
лесно за изпълнение от хардуера.
дължина, за да получат предимства при внедряването, като същевременно жертват средния размер на кода.
Фигура A.18 показва три популярни варианта за кодиране на набора от инструкции. Първият наричаме
променлив, тъй като позволява почти всички режими на адресиране да бъдат с всички операции. Този стил е най-
добър, когато има много режими и операции на адресиране. Вторият избор наричаме фиксиран, тъй като той
комбинира операцията и режима на адресиране в кода на операцията. Често фиксираното кодиране ще има само
един размер за всички инструкции; работи най-добре, когато има малко режими и операции на адресиране.
Компромисът между променливо кодиране и фиксирано кодиране е размерът на програмите спрямо лекотата на
програмата, но индивидуалните инструкции могат да варират значително както по размер, така и по обем на
добавете EAX,1000(EBX)
Операция Адресно
поле
Спецификатор на адрес
Операция Адресно
Спецификатор
Спецификатор на адрес 1 поле
на адрес 2
Спецификатор на адрес (c) Хибриден (напр. IBM 360/370, MIPS16, Thumb, TI TMS320C54x)
Фигура A.18 Три основни вариации в кодирането на инструкции: променлива дължина, фиксирана
дължина и хибрид. Променливият формат може да поддържа произволен брой операнди, като всеки
спецификатор на адрес определя режима на адресиране и дължината на спецификатора за този
операнд. Обикновено позволява най-малкото представяне на код, тъй като не е необходимо да се
включват неизползвани полета. Фиксираният формат винаги има един и същ брой операнди, като
режимите на адресиране (ако съществуват опции) са посочени като част от кода на операцията.
Обикновено това води до най-големия размер на кода. Въпреки че полетата обикновено не се различават
по местоположението си, те ще бъдат използвани за различни цели чрез различни инструкции.
Хибридният подход има множество формати, определени от кода на операцията, добавяйки едно или
две полета за указване на режима на адресиране и едно или две полета за указване на адреса на операнда.
Machine Translated by Google
Името add означава 32-битова инструкция за добавяне на цяло число с два операнда и този код
на операцията отнема 1 байт. Спецификаторът на адрес 80x86 е 1 или 2 байта, определящ
регистъра източник/дестинация (EAX) и режима на адресиране (изместване в този случай) и
основния регистър (EBX) за втория операнд. Тази комбинация отнема 1 байт за указване на
операндите. Когато сте в 32-битов режим (вижте Приложение K), размерът на адресното поле е
1 байт или 4 байта. Тъй като 1000 е по-голямо от 28 , дължината на инструкцията е , общото
1 + 1 + 4 = 6 байта
Тъй като RISC компютрите започнаха да се използват във вградени приложения, 32-битовият
фиксиран формат се превърна в пасив, тъй като разходите и следователно по-малкият код са
важни. В отговор няколко производители предложиха нова хибридна версия на своите набори
от RISC инструкции, както с 16-битови, така и с 32-битови инструкции. Тесните инструкции
поддържат по-малко операции, по-малък адрес и непосредствени полета, по-малко регистри и
двуадресния формат вместо класическия триадресен формат на RISC компютрите. Приложение
K дава два примера, ARM Thumb и MIPS MIPS16, които и двата претендират за намаляване на
размера на кода до 40%.
За разлика от тези разширения на набора от инструкции, IBM просто компресира своя
стандартен набор от инструкции и след това добавя хардуер за декомпресиране на инструкции,
тъй като те се извличат от паметта при пропуснат кеш на инструкции. По този начин кешът на
инструкциите съдържа пълни 32-битови инструкции, но компресираният код се съхранява в
основната памет, ROM и диска. Предимството на MIPS16 и Thumb е, че кешовете на инструкции
действат така, сякаш са с около 25% по-големи, докато CodePack на IBM означава, че
компилаторите не трябва да се променят, за да обработват различни набори инструкции и
декодирането на инструкции може да остане просто.
CodePack започва с компресия на кодиране по дължина на изпълнение на всяка PowerPC
програма и след това зарежда получените таблици за компресиране в 2 KB таблица на чип.
Следователно всяка програма има свое собствено уникално кодиране. За да обработва
разклонения, които вече не са към подравнена граница на думата, PowerPC създава хеш
таблица в паметта, която картографира компресирани и некомпресирани адреси. Подобно на
TLB (вижте глава 2), той кешира най-скоро използваните адресни карти, за да намали броя на
достъпите до паметта. IBM твърди, че общата цена на производителността е 10%, което води
до намаляване на размера на кода от 35% до 40%.
Hitachi просто изобрети набор от RISC инструкции с фиксиран 16-битов формат, наречен
SuperH, за вградени приложения (вижте Приложение K). Има 16, а не
Machine Translated by Google
32 регистъра, за да пасне на по-тесния формат и по-малко инструкции, но иначе изглежда като класическа
RISC архитектура.
производителността, отколкото от размера на кода, ще избере фиксирано кодиране. Приложение E дава 13 примера
ще бъде полезно да разгледаме накратко технологията на компилатора и нейния ефект върху свойствата на
програмата.
сървърни приложения. Това развитие означава, че тъй като повечето изпълнени инструкции са резултат от
често се правят за улесняване на програмирането на асемблер или за конкретно ядро. Тъй като компилаторът
Някога беше популярно да се опитваме да изолираме технологията на компилатора и нейния ефект върху
по същество невъзможно с днешните настолни компилатори и компютри. Архитектурният избор влияе върху
компилатори. След това обсъждаме как технологията на компилатора влияе върху решенията на
архитект и как архитектът може да затрудни или улесни компилатора да създаде добър код. Завършваме с
между компилаторите
писатели и архитекти.
Като начало, нека да разгледаме какви са оптимизиращите компилатори днес. Фигура A.19
Зависимости функция
Междинно
представителство
Фигура A.19 Компилаторите обикновено се състоят от две до четири преминавания, като по-
високо оптимизиращите компилатори имат повече преминавания. Тази структура максимизира
вероятността програма, компилирана на различни нива на оптимизация, да произведе един и
същ изход, когато се даде същия вход. Оптимизиращите пропуски са предназначени да бъдат
незадължителни и могат да бъдат пропуснати, когато целта е по-бърза компилация и кодът с по-
ниско качество е приемлив. Преминаването е просто една фаза, в която компилаторът чете и
трансформира цялата програма. (Терминът фаза често се използва взаимозаменяемо с пропуск.)
Тъй като проходите за оптимизиране са разделени, множество езици могат да използват едни и
същи проходи за оптимизиране и генериране на код. За нов език е необходим само нов преден край.
архитектура? Добър пример е с оптимизацията, наречена елиминиране на глобален общ подизраз. Тази
израз, който изчислява същата стойност и записва стойността от първото изчисление във временен. След това
тъй като разпределението на регистъра обикновено се извършва близо до края на преминаването за глобална
оптимизация, точно преди генерирането на код. По този начин, оптимизаторът, който извършва тази
регистрирам.
Оптимизации на високо ниво често се правят на източника, като изходът се предава по-късно
пропуски за оптимизация.
Локалните оптимизации оптимизират кода само в рамките на кодов фрагмент с права линия
архитектурни познания.
Регистрирайте Разпределение
разпределение към регистър и след това да използвате графиката за разпределяне на регистри. Приблизително
казано, проблемът е как да се използва ограничен набор от цветове, така че да няма два съседни
графика като цяло може да отнеме експоненциално време като функция на размера на
Взаимодействието на компилатори и езици от високо ниво значително влияе върху това как
програмите използват архитектура на набор от инструкции. Има два важни въпроса:
Как се разпределят и адресират променливите? Колко регистъра са необходими за
разпределете променливите по подходящ начин? За да отговорим на тези въпроси, трябва да разгледаме
три отделни области, в които текущите езици на високо ниво разпределят своите данни:
Зоната за глобални данни се използва за разпределяне на статично декларирани обекти, като напр
глобални променливи и константи. Голям процент от тези обекти са масиви
или други структури от обобщени данни.
Фигура A.20 Основни типове оптимизации и примери във всеки клас. Тези данни ни казват за относителната честота на възникване на различни
оптимизации. Третата колона изброява статичната честота, с която някои от
общи оптимизации се прилагат в набор от 12 малки програми Fortran и Pascal. Има девет местни и глобални
оптимизации, направени от компилатора, включен в измерването. Шест от тези оптимизации са обхванати във фигурата, а останалите три
представляват 18% от общите статични събития. Съкращението NM означава, че
броят на случаите на тази оптимизация не е измерен. Обикновено се правят оптимизации в зависимост от процесора
в генератор на кодове и нито едно от тях не е измерено в този експеримент. Процентът е частта от статиката
оптимизации, които са от посочения тип. Данни от Chow [1983] (събрани с помощта на компилатора Stanford UCODE).
са множество начини за препращане към адреса на променлива, което прави поставянето й незаконно
в регистър. (Повечето променливи на купчина са ефективно псевдоними за днешния компилатор
технология.)
Например, разгледайте следната кодова последователност, където & връща
адрес на променлива и * дереферира указател:
Machine Translated by Google
Клонове/обаждания
Лукас, ниво 3 11%
ALU операции с плаваща запетая
рц
яаи зи
о,атм
а рп
м
лаи о аоП
п
и
втр
м
гио н
о
к
mcf, ниво 3 76%
режими - трябва да са ортогонални. Твърди се, че има два аспекта на една архитектура
помага за опростяване на генерирането на код и е особено важно, когато решението за това какъв код
добър контрапример за това свойство е ограничаването на това какви регистри могат да се използват
правилен вид!
конструкция или функция на ядрото често са неизползваеми. Опитите за поддръжка на езици от високо
ниво може да работят само с един език или да направят повече или по-малко, отколкото е
необходими за правилното и ефективно изпълнение на езика. Пример за това как подобни опити са
сегмент от кода, който възниква. В по-ранните дни инструкцията се брои или общият размер на кода
може да са добри показатели, но – както видяхме в глава 1 – това вече не е вярно. С кеш паметта и
конвейера компромисите станаха много сложни. Всичко, което дизайнерът може да направи, за да
Осигурете инструкции, които обвързват количествата, известни по време на компилиране като константи
този принцип включва инструкции, които интерпретират стойности, които са били фиксирани по
динамично интерпретира маска, казваща какво регистрира, за да запазите при повикване, но маската е
Уви, дизайнерите на SIMD инструкциите (вижте Раздел 4.3 в Глава 4) основно игнорират предишния
подраздел. Тези инструкции обикновено са решения, а не примитиви; липсват им регистри; и
типовете данни не съответстват на съществуващите езици за програмиране. Архитектите се
надяваха да намерят евтино решение, което да помогне на някои потребители, но често само
няколко рутинни графични библиотеки на ниско ниво ги използват.
Инструкциите SIMD всъщност са съкратена версия на елегантен стил на архитектура, който
има своя собствена технология за компилиране. Както е обяснено в раздел 4.2, векторните
архитектури оперират с вектори от данни. Изобретени първоначално за научни кодове,
мултимедийните ядра често също могат да бъдат векторизирани, макар и често с по-къси вектори.
Както подсказва раздел 4.3 , можем да мислим за MMX и SSE на Intel или AltiVec на PowerPC като
просто кратки векторни компютри: MMX с вектори от осем 8-битови елемента, четири 16-битови
елемента или два 32-битови елемента и AltiVec с вектори два пъти тази дължина. Те се изпълняват
като просто съседни, тесни елементи в широки регистри.
Intel реши да разшири до 128-битови вектори, той добави изцяло нов набор от инструкции, наречен
Streaming SIMD Extension (SSE).
Основно предимство на векторните компютри е скриването на латентността на достъпа до
паметта чрез зареждане на много елементи наведнъж и след това припокриване на изпълнението
с прехвърляне на данни. Целта на режимите на векторно адресиране е да събират данни,
разпръснати в паметта, да ги поставят в компактна форма, така че да могат да се оперират
ефективно, и след това да поставят резултатите обратно, където им е мястото.
Векторните компютри включват последователно адресиране и събиране/разпръснато
адресиране (вижте раздел 4.2), за да се увеличи броят на програмите, които могат да бъдат векторизирани.
При последователното адресиране се пропуска фиксиран брой думи между всеки достъп, така че
последователното адресиране често се нарича адресиране с единична стъпка. Съберете и
разпръснете, намерете техните адреси в друг векторен регистър: Мислете за това като за
индиректно адресиране на регистъра за векторни компютри. От векторна гледна точка, за разлика
от тях, тези SIMD компютри с къс вектор поддържат само еднократен достъп: достъпът до паметта
зарежда или съхранява всички елементи наведнъж от едно място с широка памет.
Тъй като данните за мултимедийни приложения често са потоци, които започват и завършват в паметта,
режимите на стъпаловидно и събиране/разпръснато адресиране са от съществено значение за
успешното векторизиране (вижте раздел 4.7).
Пример Като пример, сравнете векторен компютър с MMX за преобразуване на цветово представяне на пиксели
от RGB (червено, зелено, синьо) към YUV (цветност на осветеността), като всеки пиксел е представен
от 3 байта. Преобразуването е само три реда C код, поставени в цикъл:
конвертиране на 8 пиксела [Kozyrakis 2000]. (Тъй като един вектор може да има 32 64-битови елемента, този
За разлика от това, уеб сайтът на Intel показва, че рутинната библиотека изпълнява същото
технология. Следователно е по-вероятно тези SIMD инструкции да бъдат намерени в ръчно кодирани
задайте архитектурата да има най-малко 16 регистъра с общо предназначение - без да броите отделните
режимите на адресиране се прилагат за всички инструкции, които прехвърлят данни. И накрая, последните три
В този раздел ние описваме проста 64-битова архитектура за съхранение на данни, наречена MIPS. The
Архитектурата на набора от инструкции на роднините на MIPS и RISC се основава на наблюдения
защо тези архитектури станаха популярни.) Преглед на нашите очаквания от всеки раздел за настолни
приложения:
Раздел A.4—Поддържа тези размери и типове данни: 8-, 16-, 32- и 64-битови цели числа и 64-битови IEEE
прости инструкции, тъй като те ще доминират в броя на изпълнените инструкции: зареждане, съхраняване,
Раздел A.6—Сравнете равно, сравнете неравно, сравнете по-малко, разклоняване (с относителен към PC
Раздел A.8—Осигурете най-малко 16 регистъра с общо предназначение, уверете се, че всички режими на
често използват отделни регистри с плаваща запетая. Обосновката е да се увеличи общият брой на
регистрите, без да се създават проблеми във формата на инструкциите или в скоростта на регистровия
Представяме MIPS, като показваме как той следва тези препоръки. Подобно на най-новите компютри,
MIPS подчертава
MIPS предоставя добър архитектурен модел за изучаване не само поради популярността на този тип
В годините след първия MIPS процесор през 1985 г. имаше много версии на MIPS (вижте Приложение
K). Ще използваме подмножество от това, което сега се нарича MIPS64, което често ще се съкращава само
Регистрира за MIPS
MIPS64 има 32 64-битови регистъра с общо предназначение (GPR), наречени R0, R1, . . . , R31.
GPR понякога са известни и като цели числа. Освен това има набор от 32 регистъра с плаваща
запетая (FPR), наречени F0, F1, . . . , F31, който може да
съдържа 32 стойности с единична точност (32 бита) или 32 стойности с двойна точност (64 бита).
(Когато се съхранява едно число с единична точност, другата половина от FPR не се използва.)
Предоставят се както операции с плаваща запетая с единична, така и с двойна точност (32-
битови и 64-битови). MIPS също така включва инструкции, които работят с два операнда с
единична точност в един 64-битов регистър с плаваща запетая.
Стойността на R0 винаги е 0. Ще видим по-късно как можем да използваме този регистър за
синтезирайте различни полезни операции от прост набор от инструкции.
Няколко специални регистъра могат да бъдат прехвърлени към и от регистрите с общо
предназначение. Пример е регистърът за състояние с плаваща запетая, използван за
съхраняване на информация за резултатите от операциите с плаваща запетая. Има също
инструкции за преминаване между FPR и GPR.
Типовете данни са 8-битови байтове, 16-битови половин думи, 32-битови думи и 64-битови
двойни думи за целочислени данни и 32-битова единична точност и 64-битова двойна точност
за плаваща запетая. Бяха добавени половин думи, защото се намират в езици като C и са
популярни в някои програми, като операционните системи, загрижени за размера на структурите
от данни. Те също ще станат по-популярни, ако Unicode стане широко използван. Операндите с
плаваща запетая с единична точност бяха добавени по подобни причини. (Запомнете ранното
предупреждение, че трябва да измервате много повече програми, преди да проектирате набор
от инструкции.)
Операциите MIPS64 работят с 64-битови цели числа и 32- или 64-битова плаваща запетая.
Байтове, полудуми и думи се зареждат в регистрите с общо предназначение или с нули, или със
знаковия бит, репликиран за запълване на 64-те бита на GPR. Веднъж заредени, те се оперират
с 64-битови цели числа.
I-тип инструкция
6 5 5 16
Инструкция тип R
6 55 5 5 6
Инструкция тип J
6 26
Фигура A.22 Оформление на инструкции за MIPS. Всички инструкции са кодирани в един от трите
типове, с общи полета на едно и също място във всеки формат.
Тъй като MIPS има само два режима на адресиране, те могат да бъдат кодирани в
операционен код. Следвайки съветите за улесняване на конвейера на процесора и
декодиране, всички инструкции са 32 бита с 6-битов основен код на операцията. Фигура А.22
показва оформлението на инструкциите. Тези формати са прости, като същевременно осигуряват 16 бита
полета за адресиране на изместване, непосредствени константи или PC-относително разклонение
адреси.
MIPS операции
MIPS поддържа списъка с прости операции, препоръчани по-горе, плюс няколко други. Има четири
широки класа инструкции: зареждания и съхранявания, ALU операции, разклонения и скокове и
операции с плаваща запетая.
Machine Translated by Google
Всеки от регистрите с общо предназначение или с плаваща запетая може да бъде зареден или
се съхранява, с изключение на това, че зареждането на R0 няма ефект. Фигура А.23 дава примери за
инструкции за зареждане и съхранение. Числата с плаваща запетая с единична точност заемат половината
регистър с плаваща запетая. Преобразувания между единична и двойна точност трябва
да се направи изрично. Форматът с плаваща запетая е IEEE 754 (вижте Приложение J). Списък
на всички MIPS инструкции в нашия поднабор се появява на фигура A.26 (страница A-40).
За да разберем тези цифри, трябва да въведем няколко допълнителни разширения
към нашия C език за описание, използван първоначално на страница A-9:
Долен индекс се добавя към символа винаги, когато дължината на базата данни
прехвърлянето може да не е ясно. Така n означава прехвърляне на n-битово количество.
Използваме x, y z , за да посочим, че z трябва да се прехвърли към x и y.
(напр. Regs[R4]0 дава знаковия бит на R4) или поддиапазон (напр. Regs[R3]56..63
дава най-малко значимия байт на R3).
Променливата Mem, използвана като масив, който означава основна памет, се индексира от
байтов адрес и може да прехвърля произволен брой байтове.
Горен индекс се използва за репликиране на поле (напр. 048 дава поле от нули на
дължина 48 бита).
Фигура A.23 Инструкциите за зареждане и съхраняване в MIPS. Всички използват един режим на адресиране и изискват стойността на паметта да
бъде подравнена. Разбира се, както зарежданията, така и съхраняванията са налични за всички показани типове данни.
Machine Translated by Google
DADDU R1,R2,R3 Добавете неподписан Регламенти [R1] Регламенти [R2] + Регламенти [R3]
MIPS предоставя инструкции за сравнение, които сравняват два регистъра, за да видят дали
първото е по-малко от второто. Ако условието е вярно, тези инструкции поставят 1 в
дестинационният регистър (за представяне на истината); в противен случай те поставят стойността 0.
Тъй като тези операции „задават“ регистър, те се наричат set-equal, set-not-equal,
набор-по-малко-от и т.н. Има и непосредствени форми на тези сравнения.
Контролът се управлява чрез набор от скокове и набор от разклонения. Фигура A.25
дава някои типични инструкции за разклоняване и прескачане. Четирите инструкции за скок са
разграничени от двата начина за указване на адреса на местоназначението и от това дали
или не е направена връзка. Два скока използват 26-битово отместване, изместено с 2 бита и след това заместват
Machine Translated by Google
Пример
инструкция Име на инструкция Значение
BNE R3,R4,име Разклонение не е равно на нула ако (Regs[R3]!= Regs[R4]) PC name; ((PC+4)–217)
име < ((PC+4)+217)
Фигура A.25 Типични инструкции за контролен поток в MIPS. Всички инструкции за контрол, с изключение на
прескачане на адрес в регистър, са свързани с PC. Обърнете внимание, че разстоянията на клоновете са
по-дълъг, отколкото предполага полето за адрес; тъй като MIPS инструкциите са дълги 32 бита,
адресът на клона на байта се умножава по 4, за да се получи по-голямо разстояние.
(MOV.D) регистър с плаваща запетая към друг регистър от същия тип. Операциите MFC1, MTC1, DMFC1
и DMTC1 преместват данни между единичен или двоен регистър с плаваща запетая и регистър на
цели числа. Осигурени са и преобразувания от цяло число към плаваща запетая и обратно.
За да се даде представа кои инструкции са популярни, Фигура A.27 показва честотата на инструкциите
и класовете инструкции за пет SPECint2000 програми, а Фигура A.28 показва същите данни за пет
SPECfp2000 програми.
Клопка Проектиране на функция за набор от инструкции на „високо ниво“, специално ориентирана към поддръжка
езикова структура на високо ниво.
Опитите за включване на езикови функции от високо ниво в набора от инструкции накараха архитектите
да осигурят мощни инструкции с широк диапазон от гъвкавост.
Често обаче тези инструкции вършат повече работа, отколкото се изисква в честите случаи, или не
отговарят точно на изискванията на някои езици. Много подобни усилия бяха насочени към премахване
на това, което през 70-те години на миналия век се наричаше семантична празнина. Въпреки че идеята
е да се допълни наборът от инструкции с допълнения, които издигат хардуера до нивото на езика,
допълненията
Machine Translated by Google
Трансфери на данни Преместване на данни между регистри и памет или между цяло число и FP или специални регистри; единственият
режим на адрес на паметта е 16-битово изместване + съдържание на GPR
LB,LBU,SB Зареждане на байт, зареждане на байт без знак, съхраняване на байт (към/от целочислени регистри)
LH,LHU,SH Зареждане на половин дума, зареждане на половин дума без знак, съхраняване на половин дума (към/от целочислени регистри)
LW,LWU,SW Зареждане на дума, зареждане на неподписана дума, съхраняване на дума (към/от целочислени регистри)
LD,SD Зареждане на двойна дума, съхраняване на двойна дума (към/от целочислени регистри)
LS,LD,SS,SD MFC0,MTC0 Заредете SP float, заредете DP float, запазете SP float, запазете DP float
логическо Операции с целочислени или логически данни в GPR; аритметично прихващане със знак при препълване
DMUL,DMULU,DDIV, Умножение и деление, със знак и без знак; умножение-събиране; всички операции вземат и дават 64-
ДДИВУ,МАДД битови стойности
И,ANDI И, и незабавно
ИЛИ,ORI,XOR,XORI LUI Или, или незабавно, изключително или, изключително или незабавно
Заредете горната част незабавно; зарежда битове от 32 до 47 от регистъра с незабавно, след което разширява знака
DSLL, DSRL, DSRA, DSLLV, Промени: незабавни (DS__) и променлива форма (DS__V); отместванията са отместване наляво логическо, дясно
DSRLV, DSRAV логическо, дясно аритметично
BC1T, BC1F Бит за тестово сравнение в регистъра на състоянието на FP и разклонението; 16-битово отместване от PC + 4
MOVN,MOVZ Копирайте GPR в друг GPR, ако третият GPR е отрицателен, нула
ДЖАЛ, ДЖАЛР Прескачане и връзка: запазване на PC + 4 в R31, целта е свързана с PC (JAL) или регистър (JALR)
Фигура A.26 Поднабор от инструкции в MIPS64. Фигура A.22 изброява форматите на тези инструкции. SP = единичен
прецизност; DP = двойна точност. Този списък може да се намери и на задната вътрешна корица.
Machine Translated by Google
Цяло число
Инструкция празнина gcc gzip mcf perlbmk средно аритметично
натоварване FP 0%
магазин FP 0%
добавете FP 0%
под FP 0%
mul FP 0%
div FP 0%
mov reg-reg FP 0%
сравнете FP 0%
cond mov FP 0%
други FP 0%
Фигура A.27 MIPS динамичен микс от инструкции за пет SPECint2000 програми. Обърнете внимание, че целочислен регистър-регистър
инструкциите за преместване са включени в инструкцията ИЛИ . Празните записи имат стойност 0,0%.
може да генерира това, което Wulf, Levin и Harbison [1981] наричат семантика
сблъсък:
скок 0,1% 0%
обадете се 0,7% 0%
връщане 0,7% 0%
И 0,2% 1,8% 0%
други FP 1,6% 0%
Фигура A.28 MIPS динамична комбинация от инструкции за пет програми от SPECfp2000. Обърнете внимание, че целочислен регистър-регистър
инструкциите за преместване са включени в инструкцията ИЛИ . Празните записи имат стойност 0,0%.
3. Запазете регистрите, посочени от маската за извикване на процедура в стека (както е споменато в раздел
отделна компилация.
4. Натиснете адреса за връщане в стека и след това натиснете горната и основата на стека
отгоре. Повечето процедури знаят своя брой аргументи и може да се установи много по-бърза конвенция за
да се използва за свързване, докато много езици изискват само един регистър за свързване.
тъй като само избутва компютъра за връщане в стека и прескача към процедурата.
споразумение между авторите на компилатора и без да се изискват допълнителни разходи за сложна, много
Много хора биха искали да вярват, че има една единствена „типична“ програма, която
програмите могат да се различават значително по начина, по който използват набор от инструкции. Например,
Фигура A.29 показва комбинацията от размери на трансфер на данни за четири от програмите SPEC2000: Би
вариациите са още по-големи при набор от инструкции, който поддържа клас приложения, като десетични
Клопка Иновации в архитектурата на набора от инструкции за намаляване на размера на кода без отчитане на компилатора.
набор от инструкции. Докато архитектите се борят да намалят размера на кода с 30% до 40%,
различните стратегии на компилатора могат да променят размера на кода с много по-големи фактори. Подобен
спестете място.
Machine Translated by Google
60%
Двойна дума 94%
(64 бита) 31%
62%
40%
Слово 6%
(32 бита) 28%
18% приложение
изравнявам се
0%
Половин дума 0% gzip
0%
Байт 0%
(8 бита) 22%
18%
Фигура A.29 Референтен размер на данни на четири програми от SPEC2000. Въпреки че можете
изчислете среден размер, би било трудно да се твърди, че средният размер е типичен за програмите.
Зелени хълмове
Фигура A.30 Размер на кода спрямо Apogee Software Version 4.1 C компилатор за Telecom приложение на EEMBC
бенчмаркове. Архитектурите на набора от инструкции са почти идентични, но размерите на кода варират с коефициенти 2. Тези
резултатите бяха докладвани февруари-юни 2000 г.
Въпреки тези големи трудности, архитектурата 80x86 беше изключително успешна. Причините са
три: Първо, изборът му като микропроцесор в първоначалния IBM PC прави двоичната съвместимост
80x86 изключително ценна. Второ, законът на Мур осигурява достатъчно ресурси за микропроцесорите
80x86, за да се преобразуват във вътрешен набор от RISC инструкции и след това да изпълняват
подобни на RISC инструкции. Тази комбинация позволява двоична съвместимост с ценната
компютърна софтуерна база и производителност, равна на RISC процесорите. Трето, много големите
обеми микропроцесори за персонални компютри означават, че Intel може лесно да плати увеличените
разходи за проектиране на хардуерен превод. В допълнение, големите обеми позволяват на
производителя да върви нагоре по кривата на обучение, което намалява цената на продукта.
архитектура. През 80-те години на миналия век се появиха по-сложни компилаторни технологии и a
Размерът на адреса се удвоява – 32-битовите набори от адресни инструкции за повечето настолни компютри
пропуск в кеша на някои компютри, които отнемат толкова време на инструкции, колкото страница
грешки, възникнали на по-ранни компютри. Следователно бяха добавени инструкции за предварително извличане
опитайте се да скриете цената на пропуските в кеша чрез предварително извличане (вижте Глава 2).
Между 1970 и 1985 г. мнозина смятаха, че основната работа на компютърния архитект е проектирането
на набори от инструкции. В резултат на това учебниците от онази епоха подчертават размера на набора от
на книгата в първото й издание през 1990 г., но сега е включена в приложение предимно като справочен
материал!
описва различни набори от инструкции, които са или важни на пазара днес, или исторически важни, и
компютри с MIPS.
Machine Translated by Google
A.1 [15] <A.9> Изчислете ефективния CPI за MIPS, като използвате фигура A.27. Да предположим, че ние
са направили следните измервания на средния CPI за типове инструкции:
Товари-магазини 1.4
Условни клонове
Взета 2.0
Не е взето 1.5
скокове 1.2
A.2 [15] <A.9> Изчислете ефективния CPI за MIPS, като използвате Фигура A.27 и таблицата
по-горе. Осреднете честотите на инструкциите на gzip и perlbmk, за да получите
микс от инструкции.
A.3 [20] <A.9> Изчислете ефективния CPI за MIPS, като използвате фигура A.28. Да предположим, че ние
са направили следните измервания на средния CPI за типове инструкции:
Товари-магазини 1.4
Условни разклонения:
Взета 2.0
Не е взето 1.5
скокове 1.2
FP умножение 6.0
FP доп 4.0
FP разделение 20.0
Заредете FP 1.5
Други FP 2.0
Machine Translated by Google
A.4 [20] <A.9> Изчислете ефективния CPI за MIPS, като използвате фигура A.28 и таблицата по-горе.
Осреднете честотите на инструкциите на applu и art, за да получите микса от инструкции.
A.5 [10] <A.8> Разгледайте тази кодова последователност на високо ниво от три израза:
A = B + C;
B = A + C;
D = A – B;
A.6 [30] <A.8> Оптимизациите на компилатора могат да доведат до подобрения в размера на кода
и/или производителността. Помислете за една или повече от програмите за сравнение от
пакета SPEC CPU2006. Използвайте достъпен за вас процесор и GNU C компилатора, за да
оптимизирате програмата без оптимизация, –O1, –O2 и –O3. Сравнете производителността
и размера на получените програми. Също така сравнете вашите резултати с фигура A.21.
A.9> Напишете кода за MIPS. Колко инструкции се изискват динамично? Колко препратки
към данни от паметта ще бъдат изпълнени?
Какъв е размерът на кода в байтове?
b. [20] <A.2> Напишете кода за x86. Колко инструкции се изискват динамично? Колко
препратки към данни от паметта ще бъдат изпълнени? Какъв е размерът на кода в
байтове?
3 двуадресни инструкции
30 едноадресни инструкции
b. [10] <A.2, A.7> Приемане на една и съща дължина на инструкциите и размери на адресните полета
както по-горе, определете дали е възможно да имате
3 двуадресни инструкции
31 едноадресни инструкции
всяка архитектура на набор от инструкции, показана на фигура A.2, колко адреса или имена
се появяват във всяка инструкция за кода за изчисляване на C = A + B и какъв е общият
размер на кода?
C=A+B
D=A–E
F=C+D
A.10 [20] <A.2, A.7, A.9> Дизайнът на MIPS предвижда 32 регистъра с общо предназначение и 32
регистъра с плаваща запетая. Ако регистрите са добри, по-добри ли са повече регистри?
Избройте и обсъдете възможно най-много компромиси, които трябва да бъдат взети под
внимание от дизайнерите на архитектурата на набора от инструкции, които проучват дали и
колко да увеличат броя на MIPS регистрите.
Machine Translated by Google
A.11 [5] <A.3> Да разгледаме C структура, която включва следните членове: struct foo
{ char a; bool b;
int c;
двойно d;
кратко
е; поплавък
f; двойно
g; char *
cptr; float *
fptr; int x;
};
A.12 [30] <A.7> Много производители на компютри сега включват инструменти или симулатори, които
ви позволяват да измервате използването на набора от инструкции на потребителска
програма. Сред използваните методи са машинна симулация, хардуерно поддържано
прихващане и техника на компилатор, която инструментира модула на обектния код чрез вмъкване на броячи.
Намерете достъпен за вас процесор, който включва такъв инструмент. Използвайте го, за да
измерите набора от инструкции за един от тестовете за сравнение на SPEC CPU2006. Сравнете
резултатите с показаните в тази глава.
A.13 [30] <A.8> По-новите процесори като i7 Sandy Bridge на Intel включват поддръжка за AVX векторни/
мултимедийни инструкции. Напишете функция за умножение с плътна матрица, като
използвате стойности с единична точност и я компилирайте с различни компилатори и
флагове за оптимизация. Кодовете за линейна алгебра, използващи подпрограма за основна
линейна алгебра (BLAS), като SGEMM, включват оптимизирани версии на плътно матрично
умножение. Сравнете размера на кода и производителността на вашия код с този на BLAS
SGEMM. Разгледайте какво се случва, когато използвате стойности с двойна точност и DGEMM.
A.14 [30] <A.8> За SGEMM кода, разработен по-горе за i7 процесора, включете използването на AVX
intrinsics за подобряване на производителността. По-специално, опитайте да векторизирате
кода си, за да използвате по-добре хардуера на AVX. Сравнете размера на кода и
производителността с оригиналния код.
A.15 [30] <A.7, A.9> SPIM е популярен симулатор за симулиране на MIPS процесори.
Използвайте SPIM за измерване на набора от инструкции за някои SPEC CPU2006 бенчмарк
програми.
A.16 [35/35/35/35] <A.2–A.8> gcc е насочен към повечето модерни архитектури на набори от инструкции
(вижте www.gnu.org/software/gcc/). Създайте версия на gcc за няколко архитектури, до които
имате достъп, като x86, MIPS, PowerPC и ARM. а. [35] <A.2–A.8> Компилирайте
програма?
програма?
A.17 [40] <A.2–A.8> Енергийната ефективност стана много важна за съвременните процесори, особено за
вградените системи. Създайте версия на gcc за две архитектури, до които имате достъп, като x86, MIPS,
PowerPC и ARM. Компилирайте
подмножество от EEMBC бенчмаркове, докато използвате EnergyBench за измерване на енергия
използване по време на изпълнение. Сравнете размера на кода, производителността и потреблението на енергия за
а. [20] <A.2, A.3> Измислете своя собствена мнемоника на асемблерния език (Фигура A.2
предоставя полезна извадка за обобщаване) и за всяка архитектура напишете
Machine Translated by Google
A = B + C;
B = A + C;
D = A – B;
b. [15] <A.3> Етикетирайте всеки екземпляр във вашите асемблиращи кодове за част (a), където
дадена стойност се зарежда от паметта, след като е била заредена веднъж. Също така
маркирайте всеки екземпляр във вашия код, където резултатът от една инструкция се
предава на друга инструкция като операнд, и допълнително класифицирайте тези събития
като включващи съхранение в процесора или съхранение в паметта.
д. [20] <A.7> Сега приемете процесор с 64-битови адреси на паметта и операнди за данни.
За всяка архитектура отговорете на въпросите от част (c). Как са се променили
относителните предимства на архитектурите за избраните показатели?
A.19 [30] <A.2, A.3> Използвайте четирите различни стила на архитектура на набора от инструкции
от по-горе, но приемете, че поддържаните операции с памет включват индиректно и
директно адресиране на регистъра. Измислете своя собствена мнемоника на асемблерния
език (Фигура A.2 предоставя полезна проба за обобщаване) и за всяка архитектура
напишете най-добрия еквивалентен код на асемблерния език за този фрагмент от C код:
0 30,4% 0,1%
1 33,5% 2,8%
2 35,0% 10,5%
3 40,0% 22,9%
4 47,3% 36,5%
5 54,5% 57,4%
6 60,4% 72,4%
7 66,9% 85,2%
8 71,6% 90,5%
9 73,3% 93,1%
10 74,2% 95,1%
11 74,9% 96,0%
12 76,6% 96,8%
13 87,9% 97,4%
14 91,9% 98,1%
15 100% 98,5%
16 100% 99,5%
17 100% 99,8%
18 100% 99,9%
19 100% 100%
20 100% 100%
21 100% 100%
b. [20] <A.3> Да предположим, че искаме инструкция с фиксирана дължина и сме избрали 24-битова
част (а).
° С. [20] <A.3> Сега да предположим, че използваме фиксирана дължина на отместването от 24 бита, така че не
A.21 [20/20] <A.3, A.6, A.9> Размерът на стойностите на изместване, необходими за режима на адресиране с изместване
натрупани приложения. Използвайте разглобяващ инструмент с един или повече от SPEC CPU2006
бенчмаркове, компилирани за MIPS процесора. а. [20]
[15] <A.3> Използвайки физическото подреждане на първия ред на фигура A.5, запишете стойността,
която трябва да се съхрани, като използвате реда на байтовете Big Endian. След това
интерпретирайте всеки байт като ASCII знак и под всеки байт напишете съответния знак-
актер, образувайки символния низ, както би бил съхранен в Big Endian ред.
b. [15] <A.3> Използвайки същата физическа подредба като в част (a), напишете стойността, която
да бъде съхранена, като използвате Little Endian ред на байтовете и под всеки байт напишете
съответния ASCII знак.
д. [10] <A.3> Какви са шестнадесетичните стойности на всички неподравнени 4-байтови думи, които
могат да бъдат прочетени от дадената 64-битова двойна дума, когато се съхраняват в Little
Endian ред на байтовете?
A.23 [Дискусия] <A.2–A.12> Помислете за типични приложения за десктоп, сървър, облак и вградени
компютри. Как ще се отрази архитектурата на набора от инструкции за машини, насочени към
всеки от тези пазари?
Machine Translated by Google
б
Преглед на йерархията на паметта 1
Б.1 Въведение
Ако този преглед върви твърде бързо, може да искате да погледнете Глава 7 в Компютър
се среща, след като адресът напусне процесора. Тъй като принципът на местността
повторно използване на често срещани елементи. Примерите включват файлови кешове, кешове на имена,
и така нататък.
кеш хит. Когато процесорът не намери елемент от данни, от който се нуждае в кеша, a
възниква пропуск в кеша . Колекция от данни с фиксиран размер, съдържаща исканата дума,
кеш памет. Темпоралното местоположение ни казва, че е вероятно да имаме нужда от тази дума отново в
близко бъдеще, така че е полезно да го поставите в кеша, където може да бъде достъпен
Времето, необходимо за пропуск на кеша, зависи както от латентността, така и от честотната лента на
Ниво 1 2 3 4
Технология на изпълнение Персонализирана памет с Вграден CMOS CMOS DRAM Магнитен диск
множество портове, CMOS SRAM
Честотна лента (MB/сек) 100 000–1 000 000 10 000–40 000 5000–20 000 50–500
Фигура B.1 Типичните нива в йерархията се забавят и стават по-големи, докато се отдалечаваме от процесора за
голяма работна станция или малък сървър. Вградените компютри може да нямат дисково съхранение и много по-малки памети
и кешове. Времето за достъп се увеличава с преминаването към по-ниските нива на йерархията, което го прави възможно за управление
трансферът е по-малко отзивчив. Технологията на изпълнение показва типичната технология, използвана за тези функции. Времето за достъп
е дадено в наносекунди за типични стойности през 2006 г.; тези времена ще намалеят с времето. Ширината на лентата е дадена в мегабайти в
секунда между нивата в йерархията на паметта. Честотна лента за съхранение на диск
включва както медиите, така и буферираните интерфейси.
инструкцията, използваща резултата, все още трябва да чака, но други инструкции могат да продължат по
време на пропуска.
памет. Виртуалната памет означава, че някои обекти могат да се намират на диска. Адресът
пространството обикновено се разделя на блокове с фиксиран размер, наречени страници. По всяко време, всеки
страницата се намира или в основната памет, или на диска. Когато процесорът препраща към an
елемент в рамките на страница, който не присъства в кеша или основната памет, се появява грешка ,
процесорът обикновено превключва към някаква друга задача, докато има достъп до диска. от
йерархия на паметта за компютри, вариращи от настолни компютри от висок клас до нисък клас
сървъри.
Поради локалността и по-високата скорост на по-малките памети, йерархията на паметта може значително
= Тактови
Време за изпълнение на CPU ( + на спиране на паметта) × Време на тактовия цикъл
цикли на CPU Цикли
=
Цикли на спиране на паметта ×
Брой пропуски Пропуснете наказание
Госпожици
= IC × ------------------------ Пропусната
× дузпа
Инструкция
= Достъп до паметта ×
IC × ------------------------------------------------ Пропуснат процент × Пропуснато наказание
Инструкция
референтни хитове и кои пропуски и след това докладвайте общите хитове и пропуски. Много
микропроцесори днес осигуряват хардуер за отчитане на пропуските и паметта
препратки, което е много по-лесен и по-бърз начин за измерване на процента на пропуски.
Формулата по-горе е приблизителна, тъй като честотата на пропуски и наказанията за пропуски
често са различни за четене и запис. Тактовите цикли на паметта биха могли
след това се дефинира от гледна точка на броя на достъпите до паметта на инструкция,
наказание за пропуски (в тактови цикли) за четения и записи и процент на пропуски за четения и
пише:
Тактови цикли на закъснение на паметта = IC × Четения на инструкция × Процент на пропуски при четене × Наказание за пропуски при четене
Достъп до паметта
----------------------------------------------
Тактови цикли на задържане на паметта = IC × × Пропусната ставка × Пропусната дузпа
Инструкция
Пример Да приемем, че имаме компютър, където циклите на инструкция (CPI) са 1,0, когато
всички достъпи до паметта попадат в кеша. Единственият достъп до данни е зареждане и съхраняване,
и те общо 50% от инструкциите. Ако наказанието за пропуск е 25 тактови цикъла и
процентът на пропуски е 2%, колко по-бърз би бил компютърът, ако всички инструкции
кеш хитове ли бяха?
=
(Време за изпълнение на процесора, +
тактови цикли на процесора, цикли на спиране на паметта) × тактов цикъл
= IC 1.0×Тактов
× цикъл
Сега за компютъра с истинския кеш, първо изчисляваме циклите на спиране на паметта:
= Достъп до паметта
× на пропуск × Пропусната дузпа
Цикли на спиране на паметта IC × ------------------------------------------ Честота
Инструкция
( = IC 1×0,5 ) +0,02
× 25 ×
= IC 0,75 ×
където средният член (1 + 0,5) представлява един достъп до инструкция и 0,5 данни
достъпи по инструкция. Общото представяне е така
= 1,75 IC × ×
тактов цикъл
Някои дизайнери предпочитат измерването на процента на пропуски по-скоро като пропуски на инструкция
инструкции за показване на цели числа вместо дроби. Следователно отговорът по-горе би могъл
честота на пропуски, ако се измерва като пропуски на препратка към паметта, а не на инструкция.
Пример За да покажем еквивалентността между двете уравнения за процент на пропуски, нека повторим примера
по-горе, като този път се приема, че процентът на пропуски на 1000 инструкции е 30. Какво е времето за
=
Цикли на спиране на паметта ×
Брой пропуски Пропуснете наказание
Госпожици
= × ------------------------ Пропусната дузпа ×
интегрална схема
Инструкция
Госпожици
= IC ⁄ 1000 × -------------------------------------------- Пропуснато
× наказание
Инструкция 1000 ×
= IC ⁄ 1000 30 25 × ×
= IC ⁄ 1000 750 ×
= IC 0,75 ×
Получаваме същия отговор като на страница B-5, показващ еквивалентността на двете уравнения.
Продължаваме нашето запознаване с кешовете, като отговаряме на четирите често срещани въпроса
Q3: Кой блок трябва да бъде заменен при пропуск? (смяна на блок)
Фигура B.2 показва, че ограниченията върху мястото, където се поставя блокът, създават три категории
организация на кеша:
Ако всеки блок има само едно място, то може да се появи в кеша, казва се, че кешът
да бъдат директно картографирани. Картографирането обикновено е
Ако блок може да бъде поставен навсякъде в кеша, се казва, че кешът е пълен
асоциативен.
Ако даден блок може да бъде поставен в ограничен набор от места в кеша, кешът се задава
асоциативно. Наборът е група от блокове в кеша . Един блок първо се нанася върху набор и след
това блокът може да бъде поставен навсякъде в този набор.
Наборът обикновено се избира чрез избор на битове; това е,
Ако има n блока в набор, разположението на кеша се нарича асоциативно на n-way set.
Кешовете имат адресен таг на всеки блоков кадър, който дава адреса на блока. Етикетът на всеки кеш
блок, който може да съдържа желаната информация, се проверява, за да се види дали съвпада с адреса
на блока от процесора. По правило всички възможни етикети се търсят паралелно, защото скоростта
е критична.
Трябва да има начин да разберете, че кеш блокът няма валидна информация. Най-честата
процедура е да добавите валиден бит към тага, за да кажете дали този запис съдържа или не валиден
адрес. Ако битът не е зададен, не може да има съвпадение на този адрес.
Преди да преминем към следващия въпрос, нека проучим връзката на адреса на процесора с
кеша. Фигура B.3 показва как се разделя адрес.
Първото разделение е между адреса на блока и отместването на блока. Блокът
Machine Translated by Google
Кеш памет
01 2 3
памет
Фигура B.2 Този примерен кеш има осем блокови кадъра, а паметта има 32 блока.
Трите опции за кешове са показани отляво надясно. В напълно асоциативен блок 12 от по-
ниското ниво може да влезе във всеки от осемте блокови кадъра на кеша. При директно
картографиране блок 12 може да бъде поставен само в блоков кадър 4 (12 по модул 8).
Асоциативният набор, който има някои от двете функции, позволява блокът да бъде поставен
навсякъде в набор 0 (12 по модул 4). С два блока на комплект, това означава, че блок 12 може да
бъде поставен или в блок 0, или в блок 1 на кеша. Реалните кешове съдържат хиляди блокови
кадри, а реалните спомени съдържат милиони блокове. Асоциативната организация на
множеството има четири комплекта с два блока на комплект, наречени двупосочни асоциативни
набори. Да приемем, че няма нищо в кеша и че въпросният адрес на блок идентифицира блок 12 от по-ниско ниво.
Отместването не трябва да се използва при сравнението, тъй като целият блок присъства
или не, и следователно всички блокови отмествания водят до съвпадение по
дефиниция. Проверката на индекса е излишна, тъй като той е бил използван за избор на
набора за проверка. Адрес, съхранен в набор 0, например, трябва да има 0 в полето за
индекс или не може да бъде съхранен в набор 0; набор 1 трябва да има стойност на
индекс 1; и така нататък. Тази оптимизация спестява хардуер и енергия чрез намаляване
на ширината на размера на паметта за кеша.
Machine Translated by Google
Фигура B.3 Трите части на адрес в асоциативен или директно картографиран кеш. Тагът
се използва за проверка на всички блокове в набора, а индексът се използва за избор на
набора. Отместването на блока е адресът на желаните данни в блока. Напълно
асоциативните кешове нямат индексно поле.
Ако общият размер на кеша се запази същият, увеличаването на асоциативността увеличава броя
на блоковете на набор, като по този начин намалява размера на индекса и увеличава размера на
етикета. Това означава, че границата на индекса на етикета на фигура B.3 се премества надясно с
нарастваща асоциативност, като крайната точка на напълно асоциативните кешове няма поле за
индекс.
Когато възникне пропуск, кеш контролерът трябва да избере блок, който да бъде заменен с
желаните данни. Предимството на директно картографираното разположение е, че хардуерните
решения са опростени – всъщност толкова прости, че няма избор: само един блоков кадър се
проверява за попадение и само този блок може да бъде заменен. При напълно асоциативно или
зададено асоциативно разположение има много блокове, от които да избирате при пропуск. Има
три основни стратегии, използвани за избор кой блок да бъде заменен:
Първи влязъл, първи излязъл (FIFO)—Тъй като LRU може да бъде сложен за изчисляване, това
приближава LRU чрез определяне на най-стария блок, а не на LRU.
Асоциативност
Размер LRU Произволен FIFO LRU Случаен FIFO LRU Случаен FIFO
256 KB 92.2 92.1 92.5 92.1 92.1 92.5 92.1 92.1 92.5
Фигура B.4 Пропуски в кеша на данни на 1000 инструкции, сравняващи най-малко използвани, произволни и първи влезли, първи излезли
замяна на няколко размера и асоциативности. Има малка разлика между LRU и случаен за най-големия
размер на кеша, като LRU превъзхожда останалите за по-малки кешове. FIFO обикновено превъзхожда произволните в по-малките
размери на кеша. Тези данни бяха събрани за размер на блок от 64 байта за архитектурата Alpha, използвайки 10 SPEC2000
бенчмаркове. Пет са от SPECint2000 (gap, gcc, gzip, mcf и perl) и пет са от SPECfp2000 (applu, art,
равнявай се, Лукас и плувай). Ще използваме този компютър и тези бенчмаркове в повечето фигури в това приложение.
Четенето доминира при достъпа до кеша на процесора. Всички достъпи до инструкции са четене и
повечето инструкции не записват в паметта. Фигури A.32 и A.33 в Приложение A
предлага микс от 10% съхранява и 26% зареждания за MIPS програми, правейки записи
10%/(100% + 26% + 10%) или около 7% от общия трафик на паметта. От
трафик на кеш данни , записите са 10%/(26% + 10%) или около 28%. Ускоряването на общия случай
означава оптимизиране на кеш паметта за четене, особено след като процесорите традиционно чакат
четенията да завършат, но не е необходимо да чакат записите. Законът на Амдал
(Раздел 1.9) обаче ни напомня, че дизайните с висока производителност не могат да бъдат пренебрегнати
скоростта на писане.
За щастие, обикновеният случай е и лесният случай за бързо приготвяне. Блокът
може да се чете от кеша едновременно с четенето и сравняването на етикета, така че
четенето на блока започва веднага щом адресът на блока е наличен. Ако прочетеното е хит,
исканата част от блока се предава незабавно на процесора. Ако е а
госпожице, няма полза, но също така и няма вреда, освен повече мощност в работния плот и
сървърни компютри; просто игнорирайте прочетената стойност.
Обратно записване— Информацията се записва само в блока в кеша. Модифицираният кеш блок се
записва в основната памет само когато бъде заменен.
Както обратното записване, така и повторното записване имат своите предимства. При обратното
записване записите се извършват със скоростта на кеш паметта, а многократните записи в рамките на
блок изискват само едно записване в паметта от по-ниско ниво. Тъй като някои записи не отиват в
паметта, обратното записване използва по-малко честотна лента на паметта, което прави обратното
записване привлекателно в мултипроцесорите. Тъй като обратното записване използва останалата част
от йерархията на паметта и свързването на паметта по-малко от записването, то също така пести
енергия, което го прави привлекателен за вградени приложения.
Записването е по-лесно за изпълнение от обратното записване. Кешът винаги е чист, така че за
разлика от пропуските при четене при обратно записване никога не водят до записи на по-ниско ниво.
Записването също има предимството, че следващото по-ниско ниво има най-актуалното копие на
данните, което опростява кохерентността на данните. Кохерентността на данните е важна за
мултипроцесорите и за I/O, което разглеждаме в Глава 4 и Приложение D.
Многостепенните кешове правят записа по-жизнеспособен за кешовете от по-високо ниво, тъй като
записите трябва да се разпространяват само до следващото по-ниско ниво, а не чак до основната
памет.
Както ще видим, входно-изходните и мултипроцесорите са непостоянни: те искат обратно
записване за кеш паметта на процесора, за да намалят трафика на паметта, и записване, за да
поддържат кеша в съответствие с по-ниските нива на йерархията на паметта.
Когато процесорът трябва да изчака записите да завършат по време на записа, се казва, че
процесорът записва в застой. Обща оптимизация за намаляване на спиранията при запис е буфер за
запис, който позволява на процесора да продължи веднага щом данните се запишат в буфера, като
по този начин припокрива изпълнението на процесора с актуализирането на паметта. Както ще
видим скоро, може да възникне спиране на запис дори при буфери за запис.
Тъй като данните не са необходими при запис, има две опции при a
пишете мис:
По този начин блоковете остават извън кеша при разпределение без запис, докато програмата не се
опита да прочете блоковете, но дори блокове, които са само записани, все още ще бъдат в кеша с
разпределение за запис. Нека разгледаме един пример.
Пример Да приемем напълно асоциативен кеш за обратно записване с много записи в кеша, който започва празен. По-
долу е поредица от пет операции с памет (адресът е в квадратни скоби):
Напишете Mem[100];
Напишете Mem[100];
Прочетете Mem [200];
Напишете Mem [200];
Напишете Mem[100].
Какъв е броят на попаденията и пропуските при използване на разпределение без запис спрямо
разпределение на запис?
Отговор За разпределение без запис, адресът 100 не е в кеша и няма разпределение при запис, така че първите две
записвания ще доведат до пропуски. Адрес 200 също не е в кеша, така че четенето също е пропуск.
Последващото записване на адрес 200 е хит. Последният запис до 100 все още е пропуск. Резултатът за
разпределение без запис е четири пропуска и едно попадение.
За разпределяне на запис, първите достъпи до 100 и 200 са пропуски, а останалите са хитове, тъй
като и 100, и 200 са открити в кеша. По този начин резултатът за разпределение на запис е две пропуски
и три попадения.
Или политиката за пропускане на запис може да се използва с запис чрез или обратно запис.
Обикновено кешовете за обратно записване използват разпределение за запис, надявайки се, че
следващите записи в този блок ще бъдат уловени от кеша. Кешовете за запис често използват
разпределение без запис. Причината е, че дори ако има последващи записи в този блок, записите все
още трябва да отиват в паметта от по-ниско ниво, така че какво ще спечелите?
За да даде съдържание на тези идеи, Фигура B.5 показва организацията на кеша за данни в
микропроцесора AMD Opteron. Кешът съдържа 65 536 (64 K) байта данни в 64-байтови блокове с
двупосочно зададено асоциативно разположение, най-малко използвана замяна, обратно записване
и разпределяне на запис при пропуск на запис.
Нека проследим попадение в кеша през стъпките на попадение, както е обозначено на фигура B.5.
(Четирите стъпки са показани като оградени числа.) Както е описано в Раздел B.5, Opteron представя 48-
битов виртуален адрес на кеша за сравнение на тагове, който едновременно се транслира в 40-битов
физически адрес.
Причината Opteron да не използва всичките 64 бита виртуален адрес е, че неговите дизайнери
не смятат, че някой все още има нужда от толкова голямо виртуално адресно пространство и
Machine Translated by Google
1
Блокиране на адрес
Данни
Етикет <25>
Валиден <1> <64>
2
(512
блока)
3
=?
2
(512
блока)
3 2:1 мултиплексор
=?
Буфер
за жертви
Фигура B.5 Организацията на кеша за данни в микропроцесора Opteron. Кешът от 64 KB е двупосочен, асоциативен с 64-байтови
блокове. 9-битовият индекс избира между 512 комплекта. Четирите стъпки на прочетено попадение, показани като оградени
числа в реда на възникване, обозначават тази организация. Три бита от блоковото отместване се присъединяват към индекса, за
да предоставят RAM адреса за избор на правилните 8 байта. По този начин кешът съдържа две групи от 4096 64-битови думи, като
всяка група съдържа половината от 512 комплекта. Въпреки че не е упражнено в този пример, линията от паметта на по-ниско
ниво към кеша се използва при пропуск за зареждане на кеша. Размерът на адреса, напускащ процесора, е 40 бита, защото това
е физически адрес, а не виртуален адрес. Фигура B.24 на страница B-47 обяснява как Opteron се преобразува от виртуален във
физически за достъп до кеша.
Индексът на кеша избира етикета, който да бъде тестван, за да види дали желаният
блок е в кеша. Размерът на индекса зависи от размера на кеша, размера на блока и набора
Machine Translated by Google
Индекс
=
Размер на кеша 65,536
= ==----------------
2 -------------------------------------------------- --------------------
512 29
× Задайте асоциативност
Размер на блока 64 2 ×
Тъй като Opteron използва обратно записване, старият блок от данни може да е бил модифициран и
следователно не може просто да бъде изхвърлен. Opteron запазва 1 мръсен бит на
блок за записване дали блокът е записан. Ако „жертвата“ е била променена, нейните данни
и адрес се изпращат до буфера на жертвата. (Тази структура е подобна на буфер за запис в други
компютри.) Opteron има място за осем жертвени блока. Успоредно с други действия в кеша, той записва
жертвени блокове на следващото ниво на
Видяхме как работи, но кеш паметта не може да задоволи всички нужди от памет на процесора:
Процесорът също се нуждае от инструкции. Въпреки че а
единичен кеш може да се опита да предостави и двете, това може да е тясно място. Например, когато
се изпълни инструкция за зареждане или съхраняване, конвейерният процесор ще поиска едновременно
както дума с данни, така и дума с инструкция. Следователно, единичен кеш
би представлявало структурна опасност за товари и складове, водещо до сергии. един
лесен начин за преодоляване на този проблем е да го разделите: един кеш е посветен на
инструкции и друг към данни. Отделни кеши се намират в най-новите процесори, включително Opteron.
Следователно той има и 64 KB кеш за инструкции
като 64 KB кеш за данни.
Кеш за
Размер (KB) инструкции Кеш данни Унифициран кеш
Фигура B.6 Мис на 1000 инструкции за инструкции, данни и унифицирани кешове с различни
размери. Процентът на препратките към инструкции е около 74%. Данните са за
двупосочни асоциативни кешове с 64-байтови блокове за същия компютър и бенчмаркове като
Фигура B.4.
Machine Translated by Google
Тъй като броят на инструкциите не зависи от хардуера, е изкушаващо да се оцени производителността на процесора,
като се използва това число. Такива индиректни мерки за ефективност са препятствали много компютърни дизайнери.
честотата на пропуски, тъй като тя също не зависи от скоростта на хардуера. Както ще видим, процентът на пропуски
може да бъде също толкова подвеждащ, колкото и броят на инструкциите. По-добра мярка за производителността на
Средно време за достъп до паметта = време на попадение + степен на пропуски × наказание за пропуски
където времето за попадение е времето за попадение в кеша; видяхме другите два термина преди. Компонентите на
средното време за достъп могат да бъдат измерени или в абсолютно време - да речем, 0,25 до 1,0 наносекунди при
попадение - или в броя на тактовите цикли, които процесорът чака за паметта - като наказание за пропуск от 150 до
200 тактови цикли. Не забравяйте, че средното време за достъп до паметта все още е косвена мярка за производителност;
Тази формула може да ни помогне да решим между разделени кешове и обединен кеш.
Пример Кое има по-нисък процент пропуски: 16 KB кеш за инструкции с 16 KB кеш за данни или 32 KB унифициран кеш? Използвайте
процентите на пропуски на фигура B.6 , за да помогнете за изчисляването на правилния отговор, като приемем, че
36% от инструкциите са инструкции за прехвърляне на данни. Да приемем, че попадението отнема 1 тактов цикъл и
наказанието за пропуск е 100 тактови цикъла. Попадението при зареждане или съхраняване отнема 1 допълнителен
тактов цикъл на унифициран кеш, ако има само един кеш порт за удовлетворяване на две едновременни заявки.
Използвайки терминологията на конвейера от глава 3, унифицираният кеш води до структурна опасност. Какво е
средното време за достъп до паметта във всеки случай? Да приемем кешове за запис с буфер за запис и игнорирайте
Отговор Първо нека преобразуваме пропуските на 1000 инструкции в проценти на пропуски. Решаване на ген.
Пропуска
---------------------------------------------- 1000 ⁄
1000 инструкции
Miss rate = -------------------------------------------------- --------
Достъп до паметта
----------------------------------------------
Инструкция
Тъй като всеки достъп до инструкция има точно един достъп до паметта за извличане на инструкцията, процентът на
пропуснати инструкции е
3,82 1000 ⁄
Miss rate16 KB инструкция = -------------------------- 0,004 = 1,00
Тъй като 36% от инструкциите са прехвърляне на данни, процентът на пропускане на данни е такъв
40.9 1000 ⁄
Miss rate16 KB данни = --------------------------
0.36 0.114 =
Machine Translated by Google
43.3 1000 ⁄
Miss rate32 KB унифициран
= -------------------------- 0,0318 =
1,00 0,36 +
Както беше посочено по-горе, около 74% от достъпите до паметта са препратки към инструкции.
По този начин унифициран кеш от 32 KB има малко по-нисък ефективен процент на пропуски от два
16 KB кеш памет.
×(=
% инструкции Време на попадение Процент ×
+ на пропуски на инструкции Пропуснато наказание )
( = 74% 1×0,0318
( 26% ) × (××+)26%
2008,36 = ==1200
(1
+ 0,0318 ×
+) + + + 5,446 2,174 74% 7,36 ×)
7.62
Следователно, разделените кеши в този пример, които предлагат два порта за памет на такт
цикъл, като по този начин избягвате структурната опасност - имате по-добър среден достъп до паметта
време в сравнение с унифицирания кеш с един порт, въпреки че има по-лош ефективен процент пропуски.
Очевиден въпрос е дали средното време за достъп до паметта поради кеш пропуска
Първо, има други причини за забавяне, като спорове поради I/O устройства
използване на паметта. Дизайнерите често приемат, че всички забавяния на паметта се дължат на кеша
пропуски, тъй като йерархията на паметта обикновено доминира над други причини за забавяне.
Тук използваме това опростяващо предположение, но не забравяйте да вземете предвид цялата памет
Второ, отговорът зависи и от процесора. Ако имаме процесор за изпълнение в ред (вижте Глава 3), тогава
спира по време на пропуски и времето за спиране на паметта е силно свързано със средното
време за достъп до паметта. Нека направим това предположение засега, но ще се върнем към неработещите
Както беше посочено в предишния раздел, можем да моделираме процесорното време като:
Време на процесора = (тактови цикли на изпълнение на процесора + часовникови цикли на застой на паметта) × време на тактовия цикъл
трябва да се счита за част от тактовите цикли на изпълнение на процесора или за част от застой на паметта
наказанието за пропуск на кеша е 200 тактови цикъла и всички инструкции обикновено приемат 1.0
тактови цикли (игнорирайки застой на паметта). Да приемем, че средният процент пропуски е 2%,
броят пропуски в кеша на 1000 инструкции е 30. Какво е въздействието върху производителността, когато се
= Достъп до паметта
× ×
CPU време IC CPIизпълнение + Пропуснат процент × ------------------------------------------------ Пропусната дузпа × Време на цикъла на часовника
Инструкция
кеш памет. По този начин процесорното време се увеличава седемкратно, с CPI от 1,00 за „перфектно
кеш” до 7.00 с кеш, който може да пропусне. Без никаква йерархия на паметта
CPI ще се увеличи отново до 1,0 + 200 × 1,5 или 301 - коефициент повече от 40
Както илюстрира този пример, поведението на кеша може да има огромно влияние върху
производителността. Освен това пропуските в кеша имат двойно въздействие върху процесор с нисък CPI и
бърз часовник:
1. Колкото по-ниско е изпълнението на CPI, толкова по-голямо е относителното въздействие на фиксиран брой
отново!
за намаляване на времето за изпълнение на процесора. Следващият пример показва как тези две
може да се различава.
е 0,35 ns, има 1,4 препратки към памет за инструкция, размерът и на двете
кеша е 128 KB и двата имат размер на блока от 64 байта. Един кеш е директен
картографиран, а другият е двупосочен набор асоциативен. Фигура B.5 показва това за set
задайте в зависимост от съвпадението на етикета. Тъй като скоростта на процесора може да бъде вързана
директно към скоростта на попадение в кеша, приемете, че времето на тактовия цикъл на процесора трябва
да бъде разтегната 1,35 пъти, за да побере мултиплексора за избор на зададения асоциативен кеш. При
или организация на кеша. (На практика обикновено се закръгля нагоре или надолу до an
цял брой тактови цикли.) Първо, изчислете средното време за достъп до паметта
и след това производителност на процесора. Да приемем, че времето за попадение е 1 тактов цикъл, пропускът
Средно време за достъп до паметта = време на попадение + степен на пропуски × наказание за пропуски
Производителността на процесора е
Госпожици
CPU време IC=CPIизпълнение
× × Мис дузпа +
------------------------
Инструкция
× Време на цикъла на часовника
организацията на кеша е
IC 1,6 ×
× [0,35 0,021 1,4 +× (× 65 )] = 2,47 IC ×
CPU time1-way =
и относителната производителност е
цикълът се разтяга за всички инструкции за двупосочен набор асоциативен случай, дори ако
има по-малко пропуски. Тъй като процесорното време е нашата крайна оценка и оттогава
пример.
пълната латентност на липсата на памет, или това е просто „изложената“ или незапокрита латентност, когато
процесорът трябва да спре? Този въпрос не възниква при процесори, които спират, докато пропускът на данни
завърши.
Нека предефинираме забавянията на паметта, за да доведем до нова дефиниция на наказание за пропуск като
По същия начин, тъй като някои неработещи процесори удължават времето за попадение, тази част от
уравнението за производителност може да бъде разделено на общата латентност на попадението минус припокритото попадение
Като се има предвид сложността на процесорите за изпълнение извън реда, няма единичен
правилно определение.
да кажем, че процесорът е спрял в тактов цикъл, ако не оттегли максималния възможен брой инструкции
в този цикъл. Приписваме това забавяне на първата инструкция, която не може да бъде оттеглена. Това
подобряване на времето за изпълнение, тъй като друг тип срив— скрит зад целта
по-дълго време на тактовия цикъл поддържа изпълнение извън реда, но все още има директно картографиран
Средно време за достъп до паметта 1-way,OOO = 0,35 × 1,35 + (0,021 × 45,5) = 1,43 ns
× = 2.09 IC ×
CPU time1-way,OOO = [ IC×1.6 0.35 1.35 (×0.021
+ 1.4 × × 45.5 ) ]
Следователно, въпреки много по-бавното време на тактовия цикъл и по-високия процент пропуски на a
директен картографиран кеш, неработещият компютър може да бъде малко по-бърз, ако може
производителност.
За да помогнете за обобщаването на този раздел и да служите като полезна справка, Фигура B.7
+
Средно време за достъп до паметта Време за попадение Процент
= ×
на пропуск Наказание за пропуск
Госпожици
= × IC CPIexecution
Време за изпълнение на CPU + ------------------------×Пропусната дузпа × Време на цикъла на часовника
Инструкция
=× Достъп до паметта
+
Време за изпълнение на CPU IC CPIexecution Miss rate × ------------------------------------------------ × Пропуснато наказание × Време на цикъла на часовника
Инструкция
Фигура B.7 Обобщение на уравненията за ефективност в това приложение. Първото уравнение изчислява индекса на кеша
размер, а останалите помагат за оценка на ефективността. Последните две уравнения се занимават с многостепенни кешове, които са
обяснено в началото на следващия раздел. Те са включени тук, за да направят фигурата полезна справка.
Средно време за достъп до паметта = време на попадение + степен на пропуски × наказание за пропуски
Намаляване на честотата на пропуски - по-голям размер на блока, по-голям размер на кеша и по-висока асо-
циативност
индексиране на кеша
Фигура B.18 на страница B-40 завършва този раздел с обобщение на сложността на внедряване и ползите
пропуските, първо започваме с модел, който сортира всички пропуски в три прости категории:
Задължително— първият достъп до блок не може да бъде в кеша, така че блокът трябва да бъде пренесен
в кеша. Те се наричат още пропуски при студен старт или пропуски при първи референтен сигнал.
Капацитет— Ако кешът не може да съдържа всички блокове, необходими по време на изпълнение на
пропуски на капацитет), тъй като блок може да бъде отхвърлен и по-късно извлечен, ако твърде много
блокове се картографират към неговия набор. Тези пропуски се наричат още пропуски при сблъсък.
Фигура B.8 показва относителната честота на пропуски в кеша, разбита по трите C. Задължителните
Липсите на капацитет са тези, които възникват в напълно асоциативен кеш. Конфликтните пропуски са
четирипосочен асоциативен и т.н. Фигура B.9 представя същите данни графично. Горната графика
показва абсолютни проценти на пропуски; долната графика изобразява процента на всички пропуски по
четирипосочен асоциативен
асоциативна
След като идентифицира трите C, какво може да направи един компютърен дизайнер за тях?
на конфликти. Пълната асоциативност обаче е скъпа за хардуера и може да забави тактовата честота на
процесора (вижте примера на страница B-29), което води до по-ниска обща производителност.
Machine Translated by Google
Фигура B.8 Общ процент на пропуски за всеки размер на кеша и процент на всеки според трите C. Задължително
пропуските са независими от размера на кеша, докато пропуските на капацитета намаляват с увеличаването на капацитета и конфликтните пропуски
намаляват с увеличаване на асоциативността. Фигура B.9 показва същата информация графично. Имайте предвид, че директно картографиран
кешът с размер N има приблизително същия процент пропуски като двупосочен набор-асоциативен кеш с размер N/2 до 128 K. Кешове
по-големи от 128 KB не доказват това правило. Обърнете внимание, че колоната Капацитет също е напълно асоциативна степен на пропуски. Данни
бяха събрани, както е показано на Фигура B.4, като се използва замяна на LRU.
Machine Translated by Google
0,10
0,09
0,08
0,07 1-посочен
2-посочен
0,06 4-посочен
8-посочен
0,05 Капацитет
уц
татннсе ат
р
р
ппоои П
з
п
Задължително
0,04
0,03
0,02
0,01
0,00
4 8 16 32 64 128 256 512 1024
Размер на кеша (KB)
100%
80%
60%
уц
татннсе ат
р
р
ппоои П
з
п
1-посочен
40% 2-посочен
4-посочен
8-посочен
20% Капацитет
Задължително
0%
4 8 16 32 64 128 256 512 1024
Размер на кеша (KB)
Фигура B.9 Общ процент на пропуски (отгоре) и разпределение на процент на пропуски (отдолу) за всеки размер
кеш според трите C за данните на фигура B.8. Горната диаграма показва
действителните нива на пропуски в кеша на данни, докато долната диаграма показва процента в
всяка категория. (Интервалът позволява на графиките да показват един допълнителен размер на кеша, отколкото може да се побере
Фигура B.8.)
Има малко какво да се направи относно капацитета, освен да се увеличи кеша. Ако
паметта от горно ниво е много по-малка от това, което е необходимо за една програма, и a
значителен процент от времето се изразходва за преместване на данни между две нива в
йерархия, йерархията на паметта се казва, че се бие. Защото толкова много замени
са необходими, разбиване означава, че компютърът работи близка до скоростта на паметта
от по-ниско ниво или може би дори по-бавно поради пропускане.
Machine Translated by Google
задължителните пропуски, но, както ще видим скоро, големите блокове могат да увеличат други видове пропуски.
Трите C дават представа за причината за пропуските, но този прост модел има своите граници; дава ви
представа за средното поведение, но може да не обясни индивидуална грешка. Например промяната на размера на
кеша променя конфликтните пропуски, както и пропуските на капацитета, тъй като по-големият кеш разпределя
препратки към повече блокове. По този начин пропускът може да премине от пропуск на капацитет към пропуск на
конфликт, когато размерът на кеша се промени. Имайте предвид, че трите C също игнорират политиката за
заместване, тъй като е трудно да се моделира и тъй като като цяло е по-малко значима. При специфични обстоятелства
политиката за заместване може действително да доведе до аномално поведение, като например по-ниски нива на
пропуски за по-голяма асоциативност, което противоречи на модела на трите C. (Някои предложиха да се използва
Уви, много от техниките, които намаляват процента на пропуски, също увеличават времето за попадение или
наказанието за пропуск. Желанието за намаляване на процентите на пропуски с помощта на трите оптимизации трябва
да бъде балансирано спрямо целта да се направи цялата система бърза. Този първи пример показва важността на
Най-простият начин за намаляване на процента на пропуски е да се увеличи размерът на блока. Фигура B.10 показва
компромиса между размера на блока и процента на пропуски за набор от програми и размери на кеша. По-големите
размери на блоковете ще намалят и задължителните пропуски. Това намаление се случва, защото принципът на
локалност има два компонента: времева локалност и пространствена локалност. По-големите блокове се възползват
от пространствената локалност.
В същото време по-големите блокове увеличават наказанието за пропуск. Тъй като намаляват броя на блоковете
в кеша, по-големите блокове могат да увеличат пропуските на конфликти и дори пропуските на капацитета, ако
кешът е малък. Ясно е, че няма голяма причина да се увеличи размерът на блока до такъв размер, че да увеличи
процента на пропуски. Също така няма полза от намаляването на честотата на пропуски, ако увеличава средното време
за достъп до паметта.
Пример Фигура B.11 показва действителните нива на пропуски, нанесени на фигура B.10. Да приемем, че системата на паметта
отнема 80 тактови цикъла и след това доставя 16 байта на всеки 2 тактови цикъла. По този начин той може да
предостави 16 байта за 82 тактови цикъла, 32 байта за 84 тактови цикъла и т.н. Кой размер на блока има най-малкото
Средно време за достъп до паметта = време на попадение + степен на пропуски × наказание за пропуски
Machine Translated by Google
10%
4K
5%
sestiaMr
16K
64K
256K
0%
16 32 64 128 256
Размер на блока
Фигура B.10 Степента на пропуск спрямо размера на блока за пет кеша с различни размери. Забележете, че пропуснете
скоростта всъщност се повишава, ако размерът на блока е твърде голям спрямо размера на кеша. Всеки ред
представлява кеш с различен размер. Фигура B.11 показва данните, използвани за начертаване на тези линии.
За съжаление, следите на SPEC2000 биха отнели твърде много време, ако размерът на блока беше включен, така че
тези данни са базирани на SPEC92 на DECstation 5000 [Gee et al. 1993].
Ако приемем, че времето за попадение е 1 тактов цикъл, независимо от размера на блока, тогава
времето за достъп за 16-байтов блок в 4 KB кеш е
Размер на кеша
Фигура B.11 Действителен процент пропуски спрямо размера на блока за петте кеша с различен размер
Фигура B.10. Имайте предвид, че за 4 KB кеш, 256-байтовите блокове имат по-висок процент пропуски от
32-байтови блокове. В този пример кешът трябва да бъде 256 KB, за да може a
256-байтов блок за намаляване на пропуските.
Machine Translated by Google
Размер на кеша
Фигура B.12 Средно време за достъп до паметта спрямо размера на блока за пет различни размера
кешове на фигура B.10. Доминират блоковите размери от 32 и 64 байта. Най-малката средна стойност
времето за размер на кеша е удебелено.
Фигура B.12 показва средното време за достъп до паметта за всички размери на блок и кеш
между тези две крайности. Записите с удебелен шрифт показват най-бързия размер на блока
Тези размери всъщност са популярни размери на блокове за кеш паметта на процесора днес.
Както при всички тези техники, дизайнерът на кеша се опитва да минимизира и двете
честотната лента насърчава големия размер на блока, тъй като кешът получава много повече байтове на
пропуск за малко увеличение на наказанието за пропуск. Обратно, ниското забавяне и ниската честотна
лента насърчават по-малки размери на блокове, тъй като има малко спестено време от по-голям
блок. Например двойното наказание за пропуск на малък блок може да бъде близо до
наказание от блок два пъти по-голям размер. По-големият брой малки блокове също може
намаляване на конфликтните пропуски. Имайте предвид, че фигури B.10 и B.12 показват разликата
между избора на размер на блок въз основа на минимизиране на честотата на пропуски срещу минимизиране
След като видяхме положителното и отрицателното въздействие на по-големия размер на блока върху
задължителните пропуски и пропуските на капацитет, следващите два подраздела разглеждат потенциала за по-високи
Фигури B.8 и B.9 показват как нивата на пропуски се подобряват с по-висока асоциативност. Там
са две общи правила, които могат да бъдат извлечени от тези цифри. Първият е
Machine Translated by Google
този асоциативен набор от осем посоки е за практически цели толкова ефективен при намаляване
пропуска за тези оразмерени кешове като напълно асоциативни. Можете да видите разликата от
сравнявайки осемпосочните записи с колоната за пропуск на капацитет на Фигура B.8, тъй като
Второто наблюдение, наречено основно правило за кеша 2:1, е, че директно картографиран кеш с размер N има
кеш с размер N/2. Това се поддържаше в три цифри C за размери на кеша под 128 KB.
времето за достъп идва за сметка на друго. Увеличаването на размера на блока намалява пропуските
скорост, като същевременно увеличава наказанието за пропуски, а по-голямата асоциативност може да дойде на цената
на увеличено време за попадение. Следователно натискът от бързия тактов цикъл на процесора насърчава прости
Пример Да приемем, че по-високата асоциативност би увеличила времето на тактовия цикъл, както е посочено
По-долу:
картографиране е 25 тактови цикъла към кеш ниво 2 (вижте следващия подраздел), който никога
тактови цикли. Използване на Фигура B.8 за проценти на пропуски, за които размерите на кеша са всеки от
тези три твърдения верни ли са?
Средно време за 8-посочен достъп до паметта < Средно време за 4-посочен достъп до паметта
Средно време за 4-посочен достъп до паметта < Средно време за 2-посочен достъп до паметта
Средно време за двупосочен достъп до памет < Средно време за еднопосочен достъп до паметта
Асоциативност
Фигура B.13 Средно време за достъп до паметта, като се използват проценти на пропуски във Фигура B.8
за параметри в примера. Удебелен шрифт означава, че това време е по-високо от числото до
отляво, тоест по-високата асоциативност увеличава средното време за достъп до паметта.
Machine Translated by Google
Средно време за достъп до паметта 8 пъти = Време за попадение 8 пъти + Пропусната степен 8 пъти × Пропуснато наказание 8 начина
Наказанието за пропуск е едно и също време във всеки случай, така че го оставяме като 25 тактови цикъла.
Използвайки тези формули и процентите на пропуски от Фигура B.8, Фигура B.13 показва
в този пример, като по този начин се подценява предимството на директно картографирания кеш.
също толкова полезни, колкото и подобренията в процента на пропуски. Освен това Фигура 2.2 на страница 74
този въпрос: Трябва ли да направя кеша по-бърз, за да върви в крак със скоростта на процесорите, или да
направя кеша по-голям, за да преодолея разширяващата се разлика между процесора и основната памет?
Един отговор е, правете и двете. Добавяне на друго ниво на кеш между оригинала
кеш и памет опростява решението. Кешът от първо ниво може да бъде малък
достатъчно, за да съответства на времето на тактовия цикъл на бързия процесор. Все пак второто ниво
кешът може да бъде достатъчно голям, за да улови много достъпи, които биха отишли до главната памет, като
Средно време за достъп до паметта = време за попадение L1 + степен на пропуски L1 × наказание за пропуски L1
и
Пропуснато наказание L1 = Пропуснато наказание L2 + Пропуснато наказание L2 × Пропуснато наказание L2
така
процент пропуски— Броят пропуски в кеша, разделен на общия брой достъпи до паметта,
генерирани от процесора. Използвайки термините по-горе, глобалната честота
на пропуски за кеша от първо ниво все още е само Miss rateL1, но за кеша от второ
ниво е Miss rateL1 × Miss rateL2.
Този локален процент на пропуски е голям за кеш паметта от второ ниво, тъй като
кешът от първо ниво обира каймака на достъпите до паметта. Ето защо глобалният
процент на пропуски е по-полезната мярка: той показва каква част от достъпите до
паметта, които напускат процесора, отиват чак до паметта.
Ето място, където показателят за пропуски на инструкция блести. Вместо объркване относно
местни или глобални проценти на пропуски, ние просто разширяваме паметта на паметта на
инструкция, за да добавим въздействието на кеш от второ ниво.
Пример Да предположим, че в 1000 препратки към паметта има 40 пропуска в кеша от първо ниво
и 20 пропуска в кеша от второ ниво. Какви са различните нива на пропуски?
Да приемем, че наказанието за пропуск от L2 кеша към паметта е 200 тактови цикъла,
времето за попадение на L2 кеша е 10 тактови цикъла, времето за попадение на L1 е 1
тактов цикъл и има 1,5 препратки към памет на инструкция. Какво е средното време за
достъп до паметта и средните цикли на спиране на инструкция? Игнорирайте въздействието на писан
Отговор Процентът на пропуски (локален или глобален) за кеша от първо ниво е 40/1000 или 4%.
Локалният процент на пропуски за кеша от второ ниво е 20/40 или 50%. Глобалният процент
на пропуски на кеша от второ ниво е 20/1000 или 2%. Тогава
Средно време за достъп до паметта = време за попадение L1 + степен на пропуск L1 × (време за попадение L2 + процент на пропуск L2 × наказание за пропуск L2)
За да видим колко пропуска получаваме на инструкция, разделяме 1000 препратки към паметта на 1,5
препратки към паметта на инструкция, което дава 667 инструкции.
По този начин трябва да умножим пропуските по 1,5, за да получим броя пропуски на 1000 инструкции.
Имаме 40 × 1,5 или 60 пропуска на L1 и 20 × 1,5 или 30 пропуска на L2 за 1000 инструкции. За средно
забавяне на паметта на инструкция, ако приемем, че пропуските са разпределени равномерно между
инструкциите и данните:
Средно забавяне на паметта на инструкция = пропуски на инструкцияL1 × време на попадение L2 + пропуски на инструкцияL2
× Пропусната дузпа L2
Ако извадим времето за попадение на L1 от средното време за достъп до паметта (AMAT) и след това
умножим по средния брой препратки към памет за инструкция, получаваме същото средно забавяне на
паметта за инструкция:
Както показва този пример, може да има по-малко объркване с кешовете на много нива, когато се
изчислява, използвайки пропуски на инструкция спрямо проценти на пропуски.
Обърнете внимание, че тези формули са за комбинирано четене и запис, като се приема кеш от
първо ниво за обратно записване. Очевидно кешът от първо ниво за запис ще изпрати всички записи
на второ ниво, а не само пропуските, и може да се използва буфер за запис.
Фигури B.14 и B.15 показват как честотата на пропуски и относителното време за изпълнение се
променят с размера на кеша от второ ниво за един дизайн. От тези цифри можем да придобием две
прозрения. Първият е, че процентът на пропуски в глобалния кеш е много подобен на процентът на
пропуски в единичния кеш на кеша от второ ниво, при условие че кешът от второ ниво е много по-голям
от кеша от първо ниво. Следователно нашата интуиция и знания за кешовете от първо ниво се
прилагат. Второто прозрение е, че честотата на пропуски в локалния кеш не е добра мярка за
вторичните кеши; това е функция на честотата на пропуски на кеша от първо ниво и следователно
може да варира чрез промяна на кеша от първо ниво. По този начин глобалната честота на пропуски в
кеша трябва да се използва, когато се оценяват кешовете от второ ниво.
С тези определения можем да разгледаме параметрите на кешовете от второ ниво. Основната
разлика между двете нива е, че скоростта на кеша от първо ниво влияе върху тактовата честота на
процесора, докато скоростта на кеша от второ ниво влияе само на наказанието за пропуск на кеша от
първо ниво. По този начин можем да разгледаме много алтернативи в кеша от второ ниво, които не
биха били избрани за кеша от първо ниво. Има два основни въпроса за дизайна на кеша от второ
ниво: ще намали ли средното време за достъп до паметта част от CPI и колко струва?
Първоначалното решение е размерът на кеш от второ ниво. Тъй като всичко в кеша от първо ниво
е вероятно да бъде в кеша от второ ниво, кешът от второ ниво трябва да е много по-голям от първия. Ако
кешовете от второ ниво са малко по-големи, местният процент на пропуски ще бъде висок. Това
наблюдение вдъхновява дизайна на огромни кеш памети от второ ниво - размера на основната памет в
по-старите компютри!
Machine Translated by Google
100%
99% 99% 98%
90% 96% Местен процент пропуски
88%
80%
Глобален процент на пропуски
70%
67%
60%
50% 55%
sestiaMr
51%
40% 46%
39%
30% 34%
20%
10% 6% 5% 4% 4% 4% 3% 2% 2% 2% 1% 1%
0% 4% 4% 3% 3% 16
4 8 32 64 128 256 512 1024 2048 4096
Размер на кеша (KB)
Фигура B.14 Скорости на пропуски спрямо размера на кеша за кешове на много нива. Кешовете от второ ниво, по-
малки от сбора на двата 64 KB кеша от първо ниво, нямат смисъл, както се отразява във високите нива на
пропуски. След 256 KB единичният кеш е в рамките на 10% от глобалните нива на пропуски.
Процентът на пропуски на кеш от едно ниво спрямо размера се изобразява спрямо локалния процент на пропуски и
глобалния процент на пропуски на кеш от второ ниво, използвайки 32 KB кеш от първо ниво. L2 кешовете
(унифицирани) бяха двупосочни, асоциативни с подмяна. Всеки имаше разделени L1 инструкции и кешове за
данни, които бяха 64 KB двупосочен набор, асоциативен с LRU заместване. Размерът на блока за L1 и L2 кеша
беше 64 байта. Данните бяха събрани както е показано на Фигура B.4.
Един въпрос е дали асоциативността на набора има повече смисъл за кешове от второ ниво.
Пример Като се имат предвид данните по-долу, какво е влиянието на асоциативността на кеша от второ ниво върху неговото
наказание за пропуск?
Асоциативността на двупосочния набор увеличава времето за попадение с 0,1 тактов цикъл до 10,1 часовникови цикъла
цикли.
Отговор За директно картографиран кеш от второ ниво, наказанието за пропуск на кеш от първо ниво е
1.10
4096
1.14
1.60
2048 г
1,65
мош
реоар в т
те
з)оBа Р
в
аK
и кно(
1.76
1024
1.82
1,94
512
1,99
2.34
256
2.39
Фигура B.15 Относително време за изпълнение според размера на кеша от второ ниво. Двете ленти са за
различни часовникови цикли за попадение в L2 кеш. Референтното време за изпълнение от 1.00 е за ан
8192 KB кеш от второ ниво с латентност от 1 тактов цикъл при попадение от второ ниво. Тези
данните бяха събрани по същия начин, както на Фигура B.14, с помощта на симулатор за имитиране на
Алфа 21264.
Добавянето на цената на асоциативността увеличава цената на попадението само с 0,1 тактов цикъл, което
В действителност кеш паметта от второ ниво почти винаги се синхронизира с кеша от първо ниво и
процесора. Съответно, времето за попадение на второ ниво трябва да бъде цялостен брой тактови цикли.
Сега можем да намалим наказанието за пропуски, като намалим процента на пропуски на кешовете от второ
ниво.
Друго съображение се отнася до това дали данните в кеша от първо ниво са вътре
йерархии: L1 данните винаги присъстват в L2. Включването е желателно, тъй като съгласуваността между
тази карта върху блока от второ ниво, който трябва да бъде заменен, причинявайки малко по-висок процент
на пропуски от първо ниво. За да избегнат подобни проблеми, много дизайнери на кеша запазват размера на блока
същото във всички нива на кеш паметта.
Но какво ще стане, ако дизайнерът може да си позволи само L2 кеш, който е малко по-голям от L1
кеша? Ако значителна част от пространството му се използва като a
излишно копие на L1 кеша? В такива случаи разумна противоположна политика е изключването на
много нива: L1 данни никога не се намират в L2 кеш. Обикновено при изключване пропускът на кеша в
L1 води до размяна на блокове между L1 и L2 вместо
замяна на блок L1 с блок L2. Тази политика предотвратява загубата
място в L2 кеша. Например, чипът AMD Opteron се подчинява на изключението
свойство, използвайки два 64 KB L1 кеша и 1 MB L2 кеш.
Както илюстрират тези въпроси, въпреки че начинаещият може да проектира първия и
кешове от второ ниво независимо, дизайнерът на кеша от първо ниво има a
по-проста работа при наличие на съвместим кеш от второ ниво. По-малко хазартно е да използвате a
чрез записване, например, ако има кеш за обратно записване на следващото ниво, за да действа
като бекстоп за повтарящи се записи и използва многостепенно включване.
Същността на всички дизайни на кеша е балансирането на бързи удари и малко пропуски. За
кешове от второ ниво, има много по-малко попадения, отколкото в кеша от първо ниво, така че
акцентът се измества към по-малко пропуски. Това прозрение води до много по-големи кешове и
техники за намаляване на процента на пропуски, като по-висока асоциативност и по-големи блокове.
Да приемем, че директно картографиран, записващ кеш, който картографира 512 и 1024 към
същия блок и буфер за запис от четири думи, който не се проверява при пропуск на четене. Ще
Отговор Използвайки терминологията от Глава 2, това е опасност от четене след запис на данни в паметта. Нека
проследим достъп до кеша, за да видим опасността. Данните в R3 се поставят в буфера за запис
след съхраняването. Следното зареждане използва същия индекс на кеша и следователно е пропуск.
Втората инструкция за зареждане се опитва да постави стойността в местоположение 512 в
регистър R2; това също води до пропуск. Ако буферът за запис не е завършил записа в
местоположение 512 в паметта, четенето на местоположение 512 ще постави старата грешна стойност
в блока на кеша и след това в R2. Без подходящи предпазни мерки R3 не би бил равен на R2!
Най-простият изход от тази дилема е пропускът при четене да изчака, докато буферът за
запис се изпразни. Алтернативата е да проверите съдържанието на буфера за запис при
пропуснато четене и ако няма конфликти и системата с памет е налична, оставете пропуснатото
четене да продължи. На практика всички настолни и сървърни процесори използват последния
подход, давайки приоритет на четенето пред записа.
Цената на записите от процесора в кеша за обратно записване също може да бъде намалена.
Да предположим, че пропускът при четене ще замени мръсния блок на паметта. Вместо да записваме
мръсния блок в паметта и след това да четем паметта, можем да копираме мръсния блок в буфер,
след това да четем памет и след това да записваме памет. По този начин четенето на процесора,
което процесорът вероятно чака, ще приключи по-рано. Подобно на предишната ситуация, ако възникне
пропуск при четене, процесорът може или да спре, докато буферът се изпразни, или да провери
адресите на думите в буфера за конфликти.
След като имаме пет оптимизации, които намаляват санкциите за пропуски в кеша или
процентите на пропуски, е време да разгледаме намаляването на крайния компонент на средното
време за достъп до паметта. Времето за попадение е критично, защото може да повлияе на тактовата
честота на процесора; в много процесори днес времето за достъп до кеша ограничава скоростта на
тактовия цикъл, дори за процесори, които отнемат няколко тактови цикъла за достъп до кеша.
Следователно бързото време за попадение е многократно по-важно отвъд формулата за средно време
за достъп до паметта, защото помага на всичко.
Дори малък и прост кеш трябва да се справи с преобразуването на виртуален адрес от процесора
към физически адрес за достъп до паметта. Както е описано в Раздел B.4, процесорите третират
основната памет като просто друго ниво на йерархията на паметта и по този начин адресът на
виртуалната памет, която съществува на диска, трябва да бъде картографиран върху основната
памет.
Насоките да направим общия случай бърз предполага да използваме виртуални адреси за
кеша, тъй като попаденията са много по-чести от пропуските. Такива кешове се наричат виртуални
20% 0,6%
0,4%
18%
16%
Прочистване
1,1%
14% PIDs
0,5% Uniprocess
12%
1,8%
10%
sestiaMr
18,8%
0,6%
8%
13,0%
6% 2,7%
3,4%
8,7% 0,6%
4%
3,9%
0,4% 4,1% 4,3% 4,3% 4,3%
2% 3,9%
2,7% 0,4%
0,9% 0,3% 0,3% 0,3% 0,3%
0,4% 0,3% 0,3% 0,3%
0%
2K 4K 8K 16K 32K 64K 128K 256K 512K 1024K
Размер на кеша
Фигура B.16 Честота на пропуски спрямо размера на виртуално адресирания кеш на програма, измерен по
три начина: без превключвания на процеси (uniprocess), с превключвания на процеси, използващи таг за
идентификатор на процеса (PID), и с превключвания на процеси, но без PID (прочистване).
PID увеличават абсолютния процент на пропуски при еднопроцесорни процеси с 0,3% до 0,6% и спестяват от
0,6% до 4,3% при прочистване. Agarwal [1987] събра тези статистики за операционната система Ultrix, работеща
на VAX, като се приемат директно картографирани кешове с размер на блока от 16 байта. Обърнете внимание,
че процентът на пропуски се повишава от 128K на 256K. Такова неинтуитивно поведение може да възникне в
кешовете, тъй като промяната на размера променя картографирането на блокове памет върху блокове на
кеша, което може да промени честотата на пропускане на конфликт.
Machine Translated by Google
тази програма. Фигура B.16 показва подобрението в процентите на пропуски чрез използване на PID за
избягване на промиване на кеша.
потребителските програми могат да използват два различни виртуални адреса за един и същ физически
адрес. Тези дублирани адреси, наречени синоними или псевдоними, могат да доведат до две копия на едни и
същи данни във виртуален кеш; ако едното е модифицирано, другото ще има грешна стойност. С физически
кеш това няма да се случи, тъй като достъпите първо ще бъдат преведени към същия физически кеш блок.
Хардуерните решения на проблема със синонимите, наречени антиалиасинг, гарантират на всеки кеш
блок уникален физически адрес. Например, AMD Opteron използва 64 KB кеш за инструкции с 4 KB страница
всичките осем възможни местоположения при пропуск - два блока във всеки от четирите комплекта - за да се
увери, че никой не съответства на физическия адрес на данните, които се извличат. Ако бъде намерен такъв,
той се анулира, така че когато новите данни се заредят в кеша, техният физически адрес е гарантирано
уникален.
Софтуерът може да направи този проблем много по-лесен, като принуди псевдонимите да споделят някои
адресни битове. По-стара версия на UNIX от Sun Microsystems, например, изискваше всички псевдоними да
бъдат идентични в последните 18 бита от техните адреси; това ограничение се нарича оцветяване на
пинг, приложен към виртуална памет: 4 KB (212 ) страници се картографират с помощта на 64 (26 ) набора, за да
означава, че директно картографиран кеш, който е 218 (256K) байта или по-малък, никога не може да има
дублирани физически адреси за блокове. От гледна точка на кеша, оцветяването на страницата ефективно
увеличава отместването на страницата, тъй като софтуерът гарантира, че последните няколко бита от
Последната област на безпокойство при виртуалните адреси е I/O. I/O обикновено използва физически
индексиране на кеша. В същото време, когато кешът се чете с помощта на този индекс, виртуалната част от
Тази алтернатива позволява четенето на кеша да започне незабавно, но въпреки това сравнението на
таговете все още е с физически адреси. Ограничението на тази виртуално индексирана, физически
страницата. Например в кеша за данни на Фигура B.5 на страница B-13 индексът е 9 бита, а изместването на
блока на кеша е 6 бита. За да използвате този трик, размерът на виртуалната страница трябва да бъде поне
2(9+6) байта или 32 KB. Ако не, част от индекса трябва да бъде преведена от виртуален във физически адрес.
Фигура B.17 показва организацията на кеш паметта, буферите за наблюдение на транслацията (TLB) и
Адрес за сравнение на TLB етикет <43> TLB индекс <7> L1 кеш индекс <8> Блоково отместване <6>
Към процесора
=? =?
Адрес за сравнение на L2 етикет <21> Индекс на L2 кеш <14> Отместване на блок <6>
Към процесора
=?
Към L1 кеш или CPU
Фигура B.17 Цялостната картина на хипотетична йерархия на паметта, преминаваща от виртуален адрес към L2 достъп до кеша. Размерът на страницата е 16 KB. TLB
е двупосочен асоциативен набор с 256 записа. Кешът L1 е директно картографиран 16 KB, а кешът L2 е четирипосочен асоциативен набор с общо 4 MB. И двете
индексиране на кеша
Фигура B.18 Обобщение на основните оптимизации на кеша, показващи въздействието върху производителността и сложността на кеша за
техниките в това приложение. Обикновено една техника помага само на един фактор. + означава, че техниката се подобрява
факторът, – означава, че вреди на този фактор, а празното означава, че няма влияние. Мярката за сложност е субективна, с
0 е най-лесният, а 3 е предизвикателство.
Техниките в този раздел за подобряване на броя на пропуските, наказанието за пропуски и времето за попадение
като цяло влияят върху другите компоненти на уравнението за средния достъп до паметта
както и сложността на йерархията на паметта. Фигура B.18 обобщава
тези техники и оценява въздействието върху сложността, като + означава това
техниката подобрява фактора, което означава, че вреди на този фактор и празно
което означава, че няма влияние. Нито една оптимизация в тази фигура не помага повече от една
категория.
Във всеки един момент компютрите изпълняват множество процеси, всеки със своя
собствено адресно пространство. (Процесите са описани в следващия раздел.) Би било също
скъпо да се отдели памет на стойност пълно адресно пространство за всеки процес,
Machine Translated by Google
особено след като много процеси използват само малка част от адресното си пространство.
Следователно трябва да има средство за споделяне на по-малко количество физическа памет
сред много процеси.
Един от начините да направите това, виртуалната памет, разделя физическата памет на
блокове и ги разпределя към различни процеси. Присъщо на такъв подход трябва да бъде схема
за защита , която ограничава процеса до блоковете, принадлежащи само на този процес. Повечето
форми на виртуална памет също намаляват времето за стартиране на програма, тъй като не всички
кодове и данни трябва да бъдат във физическата памет, преди програмата да може да започне.
Въпреки че защитата, осигурена от виртуалната памет, е от съществено значение за
настоящите компютри, споделянето не е причината за изобретяването на виртуалната памет. Ако
една програма стане твърде голяма за физическа памет, работата на програмиста е да я направи подходяща.
Програмистите разделят програмите на части, след което идентифицират частите, които са
взаимно изключващи се, и зареждат или разтоварват тези наслагвания под контрола на
потребителската програма по време на изпълнение. Програмистът гарантира, че програмата
никога не се опитва да получи достъп до повече физическа основна памет, отколкото е в компютъра,
и че правилното наслагване се зарежда в точното време. Както можете да си представите, тази
отговорност ерозира продуктивността на програмиста.
Виртуалната памет е изобретена, за да облекчи програмистите от това бреме; той
автоматично управлява двете нива на йерархията на паметта, представена от основна памет и
вторично съхранение. Фигура B.19 показва картографирането на виртуална памет към
физическа памет за програма с четири страници.
4K б 4K °С
8K °С 8K
12K д 12K
28K
диск
д
Пропусната дузпа 8–200 тактови цикъла 1 000 000–10 000 000 тактови цикъла
(време за достъп) (6–160 тактови цикъла) (800 000–8 000 000 тактови цикъла)
(време за прехвърляне) (2–40 тактови цикъла) (200 000–2 000 000 тактови цикъла)
Виртуалната памет също така включва няколко свързани техники. Системите с виртуална памет
наречени страници, и тези с блокове с променлив размер, наречени сегменти. Страниците обикновено
са фиксирани на 4096 до 8192 байта, докато размерът на сегмента варира. Най-големият сегмент
сегментът е 1 байт. Фигура B.21 показва как двата подхода могат да разделят кода
и данни.
засяга процесора. Странираното адресиране има единичен адрес с фиксиран размер, разделен на
Код Данни
Пейджинг
Сегментиране
Страница сегмент
Ефективен дисков трафик Да (коригирайте размера на страницата, Не винаги (малките сегменти могат да
за да балансирате времето за достъп и прехвърлят само няколко байта)
времето за прехвърляне)
Фигура B.22 Пейджинг срещу сегментиране. И двете могат да губят памет, в зависимост от
размера на блока и колко добре сегментите се вписват в основната памет. Програмните езици с неограничени
премина. Хибриден подход, наречен сегментирани сегменти, дава най-доброто от двата свята:
Сегментите са съставени от страници, така че замяната на блок е лесна, но сегмент може да бъде
адрес не работи за сегментирани адреси; променливият размер на сегментите изисква 1 дума за номер
на сегмент и 1 дума за отместване в рамките на сегмент, за общо 2 думи. Несегментираното адресно
пространство е по-лесно за компилатора.
Плюсовете и минусите на тези два подхода са добре документирани в учебниците по операционни
системи; Фигура B.22 обобщава аргументите. Поради проблема със замяната (третият ред на фигурата),
малко компютри днес използват чисто сегментиране. Някои компютри използват хибриден подход,
наречен странирани сегменти, в който сегментът е цял брой страници. Това опростява подмяната, тъй
като не е необходимо паметта да е непрекъсната и не е необходимо пълните сегменти да са в основната
памет. По-скорошен хибрид е компютърът да предлага множество размери на страници, като по-големите
Вграденият процесор IBM 405CR, например, позволява 1 KB, 4 KB (22 × 1 KB), 16 KB (24 × 1 KB), 64 KB (26 × 1
KB), 256 KB (28 × 1 KB), 1024 KB (210 × 1 KB) и 4096 KB (212 × 1 KB), за да действа като една страница.
Вече сме готови да отговорим на четирите въпроса за йерархията на паметта за виртуална памет.
За да намалят размера на тази структура от данни, някои компютри прилагат хешираща функция
към виртуалния адрес. Хешът позволява структурата на данните да бъде дължината на броя на
физическите страници в основната памет. Този брой може да бъде много по-малък от броя на виртуалните
страници. Такава структура се нарича таблица с обърната страница. Използвайки предишния пример,
физическа памет от 512 MB ще се нуждае само от 1 MB (8 × 512 MB/4 KB) за таблица с обърнати страници;
допълнителните 4 байта на
Machine Translated by Google
Виртуален адрес
Основен
памет
Страница
Фигура B.23 Преобразуване на виртуален адрес към физически адрес чрез таблица на страници.
записът в таблицата на страниците е за виртуалния адрес. HP/Intel IA-64 покрива и двете бази
като предлага както таблици с традиционни страници, така и таблици с обърнати страници, оставяйки
Q3: Кой блок трябва да бъде заменен при пропуск на виртуална памет?
грешки на страницата. В съответствие с тази насока почти всички операционни системи се опитват
заменете най-малко използвания напоследък (LRU) блок, защото ако миналото предсказва
бит или референтен бит, който се задава логически при всеки достъп до страница. (Да се
намаляване на работата, всъщност е зададено само при пропуск на буфер за превод, което е
времеви период. Като следи по този начин, операционната система може да избере страница
Нивото под основната памет съдържа въртящи се магнитни дискове, които отнемат милиони
от тактови цикли за достъп. Поради голямото разминаване във времето за достъп, никой
все още е изградил операционна система за виртуална памет, която записва през основната памет на
диска във всеки магазин от процесора. (Тази забележка не трябва да се тълкува като възможност да
станете известни, като сте първият, който построи такъв!) По този начин,
Тъй като цената на ненужен достъп до следващото по-ниско ниво е толкова висока, системите с
виртуална памет обикновено включват мръсен бит. Той позволява блокове да бъдат записвани на диск
само ако са били променени, след като са били прочетени от диска.
Записът в TLB е като запис в кеша, където тагът съдържа части от виртуалния адрес, а частта с
данни съдържа номер на рамка на физическа страница, защитно поле, валиден бит и обикновено бит за
използване и бит за мръсен бит. За да промени номера на рамката на физическата страница или
защитата на запис в таблицата на страниците, операционната система трябва да се увери, че старият
запис не е в TLB; в противен случай системата няма да работи правилно. Обърнете внимание, че този
мръсен бит означава, че съответната страница е мръсна, а не че преводът на адресите в TLB е мръсен,
нито че определен блок в кеша за данни е мръсен. Операционната система нулира тези битове, като
промени стойността в таблицата на страниците и след това прави невалиден съответния TLB запис.
Когато записът се презареди от таблицата на страниците, TLB получава точно копие на битовете.
Фигура B.24 показва TLB организацията на данните на Opteron, като всяка стъпка от транслацията е
обозначена. Този TLB използва напълно асоциативно разположение; по този начин преводът започва
(стъпки 1 и 2) чрез изпращане на виртуалния адрес до всички тагове. Разбира се, етикетът трябва да
бъде маркиран като валиден, за да позволи съвпадение. В същото време типът достъп до паметта се
проверява за нарушение (също в стъпка 2) спрямо информацията за защита в TLB.
отместването на страницата в TLB. Съвпадащият етикет изпраща съответния физически адрес чрез
ефективно мултиплексор 40:1 (стъпка 3). След това отместването на страницата се комбинира с рамката
на физическата страница, за да се образува пълен физически адрес (стъпка 4). Размерът на адреса е
40 бита.
Преобразуването на адрес може лесно да бъде на критичния път, определящ тактовия цикъл на
процесора, така че Opteron използва виртуално адресирани, физически маркирани L1 кешове.
Номер на Отместване
виртуална на страницата
Фигура B.24 Работа на TLB за данни на Opteron по време на транслация на адреси. Четирите
стъпки на попадение в TLB са показани като оградени числа. Този TLB има 40 записа. Раздел B.5
описва различните полета за защита и достъп на запис в таблица на страници на Opteron.
паметта (или други ресурси, използвани за картата на паметта) могат да бъдат спестени чрез
увеличаване на страниците.
Както бе споменато в Раздел B.3, по-големият размер на страницата може да позволи по-големи кешове
бързи пъти за попадение в кеша.
Броят на TLB записите е ограничен, така че по-големият размер на страницата означава, че повече памет
може да бъде картографирана ефективно, като по този начин се намалява броят на пропуските на TLB.
Поради тази последна причина последните микропроцесори решиха да поддържат множество размери на
страници; за някои програми пропуските на TLB могат да бъдат толкова значими за CPI, колкото и
пропуските в кеша.
Малкият размер на страницата ще доведе до по-малко загуба на място за съхранение, когато съседен регион
неизползвана памет в една страница е вътрешна фрагментация. Ако приемем, че всеки процес има три
основни сегмента (текст, купчина и стек), средната загуба на място за съхранение на процес ще бъде 1,5
пъти размера на страницата. Това количество е пренебрежимо малко за компютри със стотици мегабайти
памет и размер на страницата от 4 KB до 8 KB. Разбира се, когато размерите на страниците станат много
големи (повече от 32 KB), паметта (както основната, така и вторичната) може да бъде загубена, както и I/O
честотната лента. Последната грижа е времето за стартиране на процеса; много процеси са малки, така че
С виртуална памет, TLB, кешове от първо ниво и кешове от второ ниво, всички картографиращи пинг
бита отиват къде. Фигура B.25 дава хипотетичен пример за преминаване от 64-битов виртуален адрес
е виртуално индексиран, физически маркиран както от размера на кеша, така и от размера на страницата
Адрес за сравнение на TLB етикет <43> TLB индекс <8> L1 кеш индекс <7> Блоково отместване <6>
Към процесора
=? =?
Адрес за сравнение на L2 етикет <19> Индекс на L2 кеш <16> Отместване на блок <6>
Към процесора
=?
Към L1 кеш или CPU
Фигура B.25 Цялостната картина на хипотетична йерархия на паметта, преминаваща от виртуален адрес към L2 кеш
достъп. Размерът на страницата е 8 KB. TLB е директно картографиран с 256 записа. Кешът L1 е директно картографиран 8 KB и
L2 кешът е директно картографиран 4 MB. И двете използват 64-байтови блокове. Виртуалният адрес е 64 бита, а физическият адрес
е 41 бита. Основната разлика между тази проста фигура и истински кеш е репликацията на части от тази фигура.
Machine Translated by Google
отместване на страницата. Първият се изпраща до TLB, за да бъде преведен във физически адрес, а
старшият бит на втория се изпраща до L1 кеша, за да действа като индекс. Ако съвпадението на TLB е
Ако проверката на L1 кеша доведе до пропуск, физическият адрес се използва за опит с L2 кеша.
Средната част от физическия адрес се използва като индекс към 4 MB L2 кеш памет. Полученият L2 кеш
маркер се сравнява с горната част на физическия адрес, за да се провери за съвпадение. Ако съвпада,
имаме L2 кеш хит и данните се изпращат до процесора, който използва отместването на блока, за да
избере желаната дума. При пропуск L2 физическият адрес се използва за извличане на блока от паметта.
Въпреки че това е прост пример, основната разлика между този чертеж и истинския кеш е
репликацията. Първо, има само един L1 кеш. Когато има два L1 кеша, горната половина на диаграмата се
дублира. Обърнете внимание, че това ще доведе до два TLB, което е типично. Следователно един кеш и TLB
Ако някои бяха n-way set асоциативни, тогава бихме репликирали всеки набор от памет за тагове,
компаратори и памет за данни n пъти и бихме свързали памети за данни с n:1 мултиплексор, за да изберем
попадение. Разбира се, ако общият размер на кеша остане същият, индексът на кеша също ще се свие с log2n
работещи едновременно, доведе до нови изисквания за защита и споделяне между програмите. Тези
изисквания са тясно свързани с виртуалната памет в днешните компютри и затова разглеждаме темата
и жизненото пространство на програмата - тоест работеща програма плюс всяко състояние, необходимо за
Следователно във всеки един момент трябва да е възможно превключването от един процес към друг.
Един процес трябва да работи правилно, независимо дали се изпълнява непрекъснато от началото до
Защита на процесите
Процесите могат да бъдат защитени един от друг, като имат свои собствени таблици на страници,
всяка сочи към отделни страници от паметта. Очевидно потребителските програми трябва да бъдат
им е попречено да променят своите таблици на страници или защитата ще бъде заобиколена.
Защитата може да ескалира в зависимост от опасенията на компютърния дизайнер или купувача.
Пръстените , добавени към защитната структура на процесора, разширяват защитата на достъпа до
паметта от две нива (потребител и ядро) до
много повече. Подобно на военна класификационна система от строго секретни, секретни,
поверителни и некласифицирани, концентричните пръстени от нива на сигурност позволяват най-много
доверен за достъп до всичко, вторият най-доверен за достъп до всичко, освен
най-вътрешното ниво и т.н. „Гражданските“ програми се ползват с най-малко доверие
и следователно имат най-ограничен обхват на достъп. Възможно е също така да има ограничения за
това кои части от паметта могат да съдържат код— защита за изпълнение— и
дори на входа между нивата. Защитата на Intel 80x86
структура, която използва пръстени, е описана по-късно в този раздел. Не е ясно
дали пръстените са подобрение на практика в сравнение с простата система на потребителя
и режими на ядрото.
Общата тенденция е към прекомерно проектиране на втората система, като се използват всички
идеи и украшения, които бяха предпазливо отклонени от първата.
FP Брукс, младши
Оригиналът 8086 използва сегменти за адресиране, но не предоставя нищо за виртуална памет или
за защита. Сегментите имаха базови регистри, но без обвързани регистри и без проверки за
достъп и преди сегментен регистър да може да бъде зареден, съответният сегмент трябваше да бъде
във физическата памет. Отдадеността на Intel на виртуалната памет и защитата е очевидна в
наследниците на 8086, с няколко полета, разширени за поддръжка на по-големи адреси. Тази защитна
схема е сложна, с много детайли, внимателно проектирани, за да се опитат да избегнат пропуски в
сигурността. Ще го наричаме IA-32. Следващите няколко страници подчертават някои от предпазните
мерки на Intel; ако намирате четенето за трудно, представете си колко е трудно да ги приложите!
Настоящ бит— Еквивалентен на валидния PTE бит, използван за указване, че това е валидно
превод
Бит за достъп — като референтния бит или бит за използване в някои архитектури
Има и поле за ограничение, което не се среща в странираните системи, което установява горната
граница на валидните отмествания за този сегмент. Фигура B.26 показва примери за дескриптори
на сегменти IA-32.
IA-32 предоставя опционална система за пейджинг в допълнение към това сегментирано
адресиране. Горната част на 32-битовия адрес избира дескриптора на сегмента, а средната част
е индекс в таблицата на страниците, избрана от дескриптора.
По-долу описваме системата за защита, която не разчита на страниране.
Програмата зарежда сегментен регистър IA-32 с индекс към таблицата и малко, казвайки коя
таблица желае. Операцията се проверява според атрибутите в дескриптора, като физическият
адрес се формира чрез добавяне на отместването в процесора към основата в дескриптора, при
условие че отместването е по-малко от полето за ограничение. Всеки сегментен дескриптор има
отделно 2-битово поле, за да даде легалното ниво на достъп на този сегмент. Нарушение възниква
само ако програмата се опита да използва сегмент с по-ниско ниво на защита в дескриптора на
сегмента.
Вече можем да покажем как да извикаме споменатата по-горе програма за заплати, за да
актуализираме информацията от година до дата, без да й позволяваме да актуализира заплатите.
На програмата може да бъде даден дескриптор на информацията, който има изчистено поле за
запис, което означава, че може да чете, но не и да записва данните. След това може да бъде
предоставена доверена програма, която ще записва само информацията от годината до датата. Дава се дескриптор
Machine Translated by Google
Кодов сегмент
Сегмент от данни
Слово
Атрибути Селектор на дестинация Отместване на дестинацията
броя
Порта за обаждане
Фигура B.26 Дескрипторите на сегменти IA-32 се отличават с битове в полето за атрибути. Base, limit,
present, readable и writable са ясни. Д дава
размерът на адресиране по подразбиране на инструкциите: 16 бита или 32 бита. G дава детайлността
от ограничението на сегмента: 0 означава в байтове и 1 означава в 4 KB страници. G е зададено на 1, когато
странирането е включено, за да зададете размера на таблиците на страниците. DPL означава привилегия на дескриптор
ниво— това се проверява спрямо нивото на привилегия на кода, за да се види дали достъпът ще бъде
позволен. Съответствието казва, че кодът приема нивото на привилегия на кода, който се извиква
а не нивото на привилегия на повикващия; използва се за библиотечни процедури. Полето за разширяване
надолу обръща чека, за да позволи на основното поле да бъде знакът за висока вода и полето за граница
бъде знакът за ниска вода. Както може да очаквате, това се използва за сегменти на стека, които нарастват
надолу. Броят на думите контролира броя на думите, копирани от текущия стек в
нов стек на врата за повикване. Другите две полета на дескриптора на вратата за повикване, дестинация
селектор и отместване на местоназначението, изберете дескриптора на местоназначението на повикването и
изместен в него, съответно. Има много повече от тези три сегментни дескриптора
в модела на защита IA-32.
код, използвайки дескриптор на кодов сегмент със съответния набор от полета. Тази настройка
програмата за заплати не може да променя заплатите. Ако троянски кон съществува в тази система, за да
бъде ефективен, той трябва да се намира в надеждния код, чиято единствена задача е да
Инженерите на AMD откриха малко приложения на сложния защитен модел, описан по-горе.
Популярният модел е плоско, 32-битово адресно пространство, въведено от 80386, което задава
всички базови стойности на сегментните регистри на нула. следователно
Machine Translated by Google
AMD се отказа от множеството сегменти в 64-битовия режим. Предполага се, че основата на сегмента
е нула и игнорира полето за граница. Размерите на страницата са 4 KB, 2 MB и 4 MB.
на адреси започва с добавяне на първото отместване към основния регистър на ниво 4 на картата на страницата
и след това четене на паметта от това местоположение, за да се получи основата на страницата от следващо ниво
63 48 47 39 38 30 29 21 20 12 11 0
000 . . . 0 или
Page-map L4 Page-dir-ptr Страница-директория Страница-таблица
111. . . 1
Отместване на страницата
Page-map L4
+
базов адрес (CR3)
Page-map L4 таблица
Таблица с указатели на
директории на страници
Page-dir-ptr запис +
Таблица на страницата
Вписване в Page-dir +
Физически адрес
Главна памет
Фигура B.27 Нанасяне на виртуален адрес на Opteron. Реализацията на виртуалната памет на Opteron с четири нива на таблица на
страници поддържа ефективен размер на физически адрес от 40 бита. Всяка таблица на страници има 512 записа, така че всяко
поле на ниво е широко 9 бита. Документът за архитектурата AMD64 позволява размерът на виртуалния адрес да нарасне от
настоящите 48 бита на 64 бита, а размерът на физическия адрес да нарасне от настоящите 40 бита на 52 бита.
Machine Translated by Google
маса. Следващото изместване на адреса на свой ред се добавя към този новоизвлечен адрес и паметта се
осъществява отново, за да се определи основата на таблицата на третата страница. Това се случва отново по
същия начин. Последното адресно поле се добавя към този краен основен адрес и паметта се чете с помощта на тази
сума, за да (накрая) получи физическия адрес на страницата, към която се препраща. Този адрес се свързва с 12-
битовото отместване на страницата, за да се получи пълният физически адрес. Имайте предвид, че таблицата
Opteron използва 64-битов запис във всяка от тези таблици на страници. Първите 12 бита са запазени за
бъдеща употреба, следващите 52 бита съдържат номера на рамката на физическата страница, а последните 12
бита дават информация за защита и използване. Въпреки че полетата варират до известна степен между нивата
Потребител/надзорник— казва дали даден потребител има достъп до страницата или е ограничен до горните три
нива на привилегии.
Размер на страницата – казва дали последното ниво е за 4 KB страници или 4 MB страници; ако е последното,
тогава Opteron използва само три вместо четири нива на страници. Без изпълнение— Не е намерено в
Деактивиране на кеша на ниво страница— казва дали страницата може да бъде кеширана или не.
Записване на ниво страница— Показва дали страницата позволява обратно записване или записване за кешове
на данни.
Тъй като Opteron обикновено преминава през четири нива на таблици при пропуск на TLB, има три
потенциални места за проверка на ограниченията за защита. Opteron се подчинява само на PTE от най-ниско ниво,
Тъй като записът е дълъг 8 байта, всяка таблица на страници има 512 записа, а Opteron има 4 KB страници,
таблиците на страниците са дълги точно една страница. Всяко от четирите полета на ниво е с дължина 9 бита, а
отместването на страницата е 12 бита. Това извличане оставя 64 – (4 × 9 + 12) или 16 бита за разширяване на
Въпреки че обяснихме превода на юридически адреси, какво пречи на потребителя да създаде незаконни
преводи на адреси и да попадне в пакост? Самите таблици на страниците са защитени от писане от потребителски
програми. По този начин потребителят може да опита всеки виртуален адрес, но чрез контролиране на записите
в таблицата на страниците операционната система контролира каква физическа памет е достъпна. Споделянето
на паметта между процесите се осъществява чрез запис в таблица на страници във всяко адресно пространство,
Opteron използва четири TLB, за да намали времето за транслация на адреси, два за достъп до инструкции
Параметър Описание
L1 време за попадение
1 тактов цикъл
L2 време за попадение
7 тактови цикъла
Opteron намалява пропуските на TLB, като има два по-големи L2 TLB: един за инструкции
и един за данни. Фигура B.28 описва данните TLB.
Управлението на паметта в Opteron е типично за повечето настолни или сървърни компютри днес,
разчитайки на преобразуване на адрес на ниво страница и правилна работа на
операционната система, за да осигури безопасност на множество процеси, споделящи компютъра. Макар
и представени като алтернативи, Intel последва примера на AMD и
възприема архитектурата AMD64. Следователно и AMD, и Intel поддържат 64-
битово разширение 80х86; все пак, от съображения за съвместимост, и двете поддържат разработката
схема за сегментирана защита.
Ако моделът на сегментирана защита изглежда по-труден за изграждане от AMD64
модел, това е така, защото е така. Това усилие трябва да е особено разочароващо за инженерите, тъй
като малко клиенти използват сложния защитен механизъм. В допълнение,
фактът, че моделът на защита не съответства на простата защита на пейджинг
на UNIX-подобни системи означава, че ще се използва само от някой, който пише операционна система
специално за този компютър, което все още не се е случило.
Само пет години след като DEC и университетът Карнеги Мелън си сътрудничат за проектиране
новото семейство компютри PDP-11, беше очевидно, че тяхното създаване е имало фатален край
Machine Translated by Google
недостатък. Архитектура, обявена от IBM шест години преди PDP-11, все още процъфтява, с малки
модификации, 25 години по-късно. А DEC VAX, критикуван за включването на ненужни функции, продаде
Фаталният недостатък на PDP-11 беше размерът на неговите адреси (16 бита) в сравнение с размерите
Размерът на адреса ограничава дължината на програмата, тъй като размерът на програмата и количеството
данни, необходими на програмата, трябва да са по-малки от 2Address size. Причината, поради която размерът
на адреса е толкова труден за промяна, е, че той определя минималната ширина на всичко, което може да
съдържа адрес: компютър, регистър, дума от паметта и аритметика на ефективния адрес. Ако няма план за
разширяване на адреса от самото начало, тогава шансовете за успешна промяна на размера на адреса са
толкова малки, че това обикновено означава края на това компютърно семейство. Bell and Strecker [1976] го
формулират така:
Има само една грешка, която може да бъде допусната в компютърния дизайн, която е
трудна за възстановяване - липсата на достатъчно адресни битове за адресиране на
паметта и управление на паметта. PDP-11 следва непрекъснатата традиция на почти
всеки известен компютър. [стр. 2]
Частичен списък на успешни компютри, които в крайна сметка умряха от глад поради липса на адресни битове,
включва PDP-8, PDP-10, PDP-11, Intel 8080, Intel 8086, Intel 80186, Intel 80286, Motorola 6800, AMI 6502, Zilog Z80 ,
Почитаемата линия 80x86 се отличава с това, че е била разширена два пъти, първо до 32 бита с Intel
йерархия.
Фигура B.29 показва времето за задържане на паметта поради прекараната от операционната система три
големи натоварвания. Около 25% от времето на спиране се изразходва или в пропуски в операционната
система, или е резултат от пропуски в приложните програми поради смущения в операционната система.
Архитектите на Alpha имаха сложен план за разрастване на архитектурата с течение на времето чрез
увеличаване на размера на страницата й, дори вграждането й в размера на нейния виртуален адрес. Когато
Архитектите на други компютри забелязаха много високи нива на пропуски на TLB и затова добавиха
множество по-големи размери на страници към TLB. Надеждата беше, че програмистите на операционни
системи ще разпределят обект към най-голямата страница, която има смисъл, като по този начин ще запазят TLB
записите. След десетилетие опити повечето операционни системи използват тези „суперстраници“ само
за ръчно подбрани функции: картографиране на паметта на дисплея или други I/O устройства или използване
време
% дължимо време
Госпожици приложението пропуска % Време, дължимо директно на пропуски на ОС
% време
ОС пропуска
операционна система Данни
присъщо конфликти операционна система Данни пропуски Почивка
и
%в %в приложение с инструкция пропуски за в блок на ОС приложение
Натовареност приложенията операционна система пропуски приложения пропуски миграция операции пропуски конфликти
Pmake 47% 53% 14,1% 4,8% 10,9% 1,0% 6,2% 2,9% 25,8%
Multipgm 53% 47% 21,6% 3,4% 9,2% 4,2% 4,7% 3,4% 24,9%
Оракул 73% 27% 25,7% 10,2% 10,6% 2,6% 0,6% 2,8% 26,8%
Фигура B.29 Пропуски и време, прекарано в пропуски за приложения и операционна система. Операционната система
добавя около 25% към времето за изпълнение на приложението. Всеки процесор има 64 KB кеш за инструкции и двустепенен кеш за данни
с 64 KB на първо ниво и 256 KB на второ ниво; всички кешове са директно картографирани с 16-
байтови блокове. Събрани на Silicon Graphics POWER station 4D/340, мултипроцесор с четири процесора 33 MHz R3000, изпълняващи три
натоварвания на приложения под UNIX System V— Pmake, паралелна компилация от 56 файла; Multi-pgm, паралелната цифрова програма MP3D,
работеща едновременно с Pmake и сесия за редактиране на пет екрана; и
Oracle, изпълнява ограничена версия на бенчмарка TP-1, използвайки базата данни на Oracle. (Данни от Torrellas, Gupta,
и Хенеси [1992].)
В раздел L.3 (достъпен онлайн) разглеждаме историята на кеш паметта, виртуалната памет и
виртуалните машини. (Историческият раздел обхваща както това приложение, така и
Глава 3.) IBM играе важна роля в историята и на трите. Референции за
са включени допълнителни четения.
Machine Translated by Google
B.1 [10/10/10/15] <B.1> Опитвате се да оцените колко важен е принципът на локалност в оправдаването на използването на
кеш памет, така че експериментирате с компютър, който има L1 кеш данни и основна памет (вие се фокусирате
изключително върху достъпа до данни). Закъсненията (в цикли на процесора) на различните видове достъпи са
както следва: попадение в кеша, 1 цикъл; кеш пропуск, 105 цикъла; достъп до основната памет с деактивиран кеш,
100 цикъла. а. [10] <B.1> Когато стартирате програма с общ процент пропуски от 5%, какво ще бъде средното време
b. [10] <B.1> След това стартирате програма, специално проектирана да произвежда напълно произволни адреси
на данни без локалност. За тази цел използвате масив с размер 256 MB (всички се побират в основната
памет). Достъпите до произволни елементи от този масив се правят непрекъснато (използвайки унифициран
° С. [10] <B.1> Ако сравните резултата, получен в част (b) с времето за достъп до основната памет, когато кешът е
използването на кеш-памет?
д. [15] <B.1> Забелязахте, че попадение в кеша води до печалба от 99 цикъла (1 цикъл срещу 100), но води до загуба
100). В общия случай можем да изразим тези две величини като G (печалба) и L (загуба). Използвайки тези
две величини (G и L), идентифицирайте най-високия процент на пропуски, след който използването на кеша
би било неблагоприятно.
B.2 [15/15] <B.1> За целите на това упражнение приемаме, че имаме 512-байтов кеш с 64-байтови блокове. Ще приемем също,
че основната памет е с размер 2 KB. Можем да разглеждаме паметта като масив от 64-байтови блокове: M0, M1, …,
M31.
Фигура B.30 скицира блоковете памет, които могат да се намират в различни кеш блокове, ако кешът е напълно
картографиран кеш.
b. [15] <B.1> Повторете част (a) с кеша, организиран като асоциативен набор от четири посоки
кеш памет.
B.3 [10/10/10/10/15/10/15/20] <B.1> Организацията на кеша често се влияе от желанието да се намали консумацията на енергия
от кеша. За тази цел приемаме, че кешът е физически разпределен в масив от данни (съдържащ данните), масив
с етикети (съдържащ етикетите) и заместващ масив (съдържащ информация, необходима за политиката за замяна).
Освен това, всеки един от тези масиви е физически разпределен в множество под-масиви (по един на начин),
които могат да бъдат индивидуално достъпни; например четирипосочен набор асоциативен най-скоро използван
четири под-масива с данни, четири под-масива с етикети и четири заместващи под-масива. Ние
приемем, че заместващите подмасиви са достъпени веднъж на достъп, когато
Използва се политика за замяна на LRU и веднъж на пропуск, ако първи влезе, първи излезе (FIFO)
използва се политика за замяна. Не е необходимо, когато има политика за произволна замяна
използвани. За конкретен кеш беше установено, че достъпът до различни
масивите имат следните тегла на консумация на енергия:
° С. [10] <B.1> Повторете част (a), като приемете, че достъпът до кеша е разделен на две
цикли. В първия цикъл се осъществява достъп до всички под-масиви на тагове. Във втория
цикъл, ще бъде достъпен само подмасивът, чийто етикет съответства.
д. [10] <B.1> Повторете част (c) за пропуск при четене на кеша (няма достъп до масив от данни в
втори цикъл).
д. [15] <B.1> Повторете част (c), като приемете, че е добавена логика за предвиждане на кеша
начин за достъп. Има достъп само до подмасива на етикета за предвидения начин
в първи цикъл. Попадение в пътя (съвпадение на адреса по предвиден начин) предполага попадение в кеша.
Пропуснат начин диктува изследване на всички под-масиви на етикети във втория цикъл. в
Machine Translated by Google
в случай на попадение на път, само един подмасив от данни (този, чийто етикет съвпадна) се
f. [10] <B.1> Повторете част (e), като приемете, че предсказващият начин е пропуснал (избраният начин е
грешен). Когато не успее, предсказващият начин добавя допълнителен цикъл, в който осъществява достъп
ж. [15] <B.1> Повторете част (f), като приемете пропуск при четене на
кеша. ч. [20] <B.1> Използвайте части (e), (f) и (g) за общия случай, когато работното натоварване
има следните статистически данни: процент на пропуски на предсказател на пътя = 5% и
процент на пропуски в кеша = 3 %. (Помислете за различни политики за замяна.)
B.4 [10/10/15/15/15/20] <B.1> Ние сравняваме изискванията за честотна лента за запис на кешове за запис
и обратно запис, като използваме конкретен пример. Да приемем, че имаме 64 KB кеш с размер на
реда 32 байта. Кешът ще разпредели ред при пропуск при запис. Ако е конфигуриран като кеш
за обратно записване, той ще запише обратно целия мръсен ред, ако трябва да бъде заменен. Ще
приемем също, че кешът е свързан с по-ниското ниво в йерархията чрез 64-битова (8-байтова)
шина. Броят на процесорните цикли за B-байтов достъп за запис по тази шина е
Б
10 5 + --- 1–
8
Б
Например, 8-байтов запис ще отнеме 10 5 + --- 1– цикли, докато използва
8
по същата формула 12-байтов запис ще отнеме 15 цикъла. Отговорете на следните въпроси, като се
позовавате на C кодовия фрагмент по-долу:
…
#define ЧАСТИЦА 1 … Основа = 8*i; for (unsigned int j=base; j < base+PORTION; j++) //
данни [j] = j;
<B.1> Какъв е минималният брой актуализации на масива на същия кеш ред (преди замяната му),
които биха направили кеша за обратно запис превъзходен? д. [15] <B.1> Помислете за
сценарий, при който всички думи от реда на кеша ще бъдат записани (не непременно с помощта на
горния код) и кешът за запис ще изисква по-малко общи процесорни цикли от кеша за обратно
записване.
B.5 [10/10/10/10/] <B.2> Изграждате система около процесор с подредено изпълнение, който работи на 1,1
GHz и има CPI от 0,7 без достъп до паметта. Единствените инструкции, които четат или записват
данни от паметта, са зареждания
Machine Translated by Google
(20% от всички инструкции) и магазини (5% от всички инструкции). Системата с памет за този
компютър е съставена от разделен L1 кеш, който не налага наказание за попадения. Както I-cache,
така и D-cache са директно картографирани и съдържат 32 KB всеки.
I-кешът има 2% честота на пропуски и 32-байтови блокове, а D-кешът е чрез запис с 5% процент на
пропуски и 16-байтови блокове. Има буфер за запис в D-кеша, който елиминира спиранията за
95% от всички записи. Обединеният L2 кеш с обратно запис от 512 KB има 64-байтови блокове и
време за достъп от 15 ns. Той е свързан към L1 кеша чрез 128-битова шина за данни, която работи
на 266 MHz и може да прехвърля една 128-битова дума на цикъл на шина. От всички препратки към
паметта, изпратени до L2 кеша в тази система, 80% са удовлетворени, без да отиват в основната
памет. Освен това 50% от всички сменени блокове са мръсни. Основната памет с ширина 128 бита
има латентност на достъпа от 60 ns, след което произволен брой шинни думи могат да бъдат
прехвърлени със скорост една на цикъл по шината на основната памет с ширина 128 бита и 133 MHz.
а. [10] <B.2> Какво е средното време за достъп до паметта за достъп до
инструкции? b. [10] <B.2> Какво е средното време за достъп до паметта за четене на данни? ° С. [10]
<B.2> Какво е средното време за достъп до паметта за запис на данни? д. [10] <B.2> Какъв
[10] <B.2> Формулата за пропуски на инструкция на страница B-5 е написана първо по отношение на
три фактора: честота на пропуски, достъпи до паметта и брой инструкции. Всеки от тези
фактори представлява действителни събития. Какво е различното при записването на
пропуски за инструкция като честота на пропуски, умножена по отношение на достъпа на факторната памет з
° С. [15] <B.2> Преобразуването в част (b) може да доведе до неправилна стойност до степента, в
която стойността на факторните препратки за извлечена инструкция не е равна на броя
препратки за всяка конкретна инструкция. Препишете формулата на част (b), за да
коригирате този недостатък.
B.7 [20] <B.1, B.3> В системи с L1 кеш за запис, поддържан от L2 кеш за обратно записване вместо основна
памет, обединяващият буфер за запис може да бъде опростен.
Обяснете как може да стане това. Има ли ситуации, при които наличието на пълен буфер за запис
(вместо опростената версия, която току-що предложихте) може да бъде полезно?
B.8 [20/20/15/25] <B.3> Политиката за замяна на LRU се основава на предположението, че ако адрес A1 е бил
достъпен по-рядко от адрес A2 в миналото, тогава A2 ще бъде достъпен отново преди A1 в бъдещето.
Следователно на A2 се дава приоритет пред A1. Обсъдете как това предположение не успява да се
задържи, когато непрекъснато се изпълнява a цикъл, по-голям от кеша на инструкциите. Например,
помислете за напълно
Machine Translated by Google
асоциативен 128-байтов кеш за инструкции с 4-байтов блок (всеки блок може да съдържа точно една
инструкция). Кешът използва политика за замяна на LRU. а. [20] <B.3> Какъв е асимптотичният
b. [20] <B.3> Повторете част (a) за цикъл с размери 192 байта и 320 байта. ° С. [15]
<B.3> Ако политиката за замяна на кеша е променена на последно използван (MRU) (заменете най-скоро
достъпния кеш ред), кой от трите горни случая (64-, 192- или 320-байтови цикли ) биха се
възползвали от тази политика?
B.9 [20] < B.3> Увеличаването на асоциативността на кеша (с всички други параметри, поддържани
постоянни), статистически намалява процента на пропуски. Въпреки това, може да има патологични
случаи, при които увеличаването на асоциативността на кеша би увеличило процента на пропуски
за определено работно натоварване. Разгледайте случая на директно картографиране в сравнение
с двупосочен набор асоциативен кеш с еднакъв размер. Да приемем, че зададеният асоциативен
кеш използва политиката за заместване на LRU. За да опростим, приемете, че размерът на блока е една дума.
Сега изградете следа от достъпи на думи, които биха довели до повече пропуски в двупосочния
асоциативен кеш. (Подсказка: Съсредоточете се върху конструирането на следа от достъпи, които
са изключително насочени към единичен набор от асоциативния кеш на двупосочния набор, така че
една и съща трасировка да има изключителен достъп до два блока в директно картографирания
кеш.)
B.10 [10/10/15] <B.3> Да разгледаме двустепенна йерархия на паметта, съставена от L1 и L2 кешове за данни.
Да приемем, че и двата кеша използват политика за обратно записване при попадение на запис и
двата имат еднакъв размер на блока. Избройте действията, предприети в отговор на следните
събития:
B.11 [15/20] <B.2, B.3> Изключването на някои инструкции от влизането в кеша може
намаляване на конфликтните пропуски.
а. [15] <B.3> Скицирайте програмна йерархия, където части от програмата биха били по-добре
изключени от влизане в кеша на инструкциите. (Съвет: Помислете за програма с кодови
блокове, които са поставени в по-дълбоки циклични гнезда от другите блокове.)
b. [20] <B.2, B.3> Предложете софтуерни или хардуерни техники за налагане на изключване на
определени блокове от кеша на инструкциите.
B.12 [15] <B.4> Програма се изпълнява на компютър с напълно асоциативен (микро) транслационен буфер (TLB)
с четири записа:
Machine Translated by Google
5 30 1
71 0
10 10 1
15 25 1
Следното е следа от номера на виртуални страници, достъпни от програма. За
всеки достъп показва дали произвежда TLB хит/пропускане и, ако има достъп до
таблица на страниците, независимо дали създава попадение на страница или грешка. Поставете X под таблицата на страниците
0 3г
1 7N
2 6N
3 5Y
4 14 Y
5 30 Y
6 26 Y
7 11 Y
8 13 н
9 18 н
10 10 Y
11 56 Y
12 110 Y
13 33 Y
14 12 н
15 25 Y
Осъществен е достъп до виртуалната страница (удар или пропуск) (попадение или грешка)
1
5
9
14
10
6
15
12
7
2
Machine Translated by Google
B.13 [15/15/15/15/] <B.4> Някои системи с памет обработват TLB пропуски в софтуера (по изключение),
докато други използват хардуер за TLB пропуски. а. [15]
b. [15] <B.4> Ще бъде ли TLB обработката на пропуски в софтуера винаги по-бавна от TLB
обработката на пропуски в хардуера?
Обяснете. ° С. [15] <B.4> Има ли структури на таблици на страници, които биха били трудни
за обработка в хардуер, но възможни в софтуер? Има ли такива структури, които биха
били трудни за обработка от софтуера, но лесни за управление от хардуера?
д. [15] <B.4> Защо TLB процентите на пропуски за програмите с плаваща запетая са като цяло
по-високи от тези за целочислени програми?
B.14 [25/25/25/25/20] <B.4> Колко голям трябва да бъде TLB? TLB пропуските обикновено са много бързи
(по-малко от 10 инструкции плюс цената на изключение), така че може да не си струва да имате
огромен TLB само за да намалите малко процента на TLB пропуски. Използване на симулатора
SimpleS-calar (www.cs.wisc.edu/~mscalar/simplescalar.html) и един или повече сравнителни
показатели SPEC95, изчислете степента на пропуски на TLB и режийните разходи на TLB (в
процент на загубеното време за обработка на пропуски на TLB) за следните TLB конфигурации.
Да приемем, че всеки TLB пропуск изисква 20 инструкции. а. [25]
<B.4> 128 записа, асоциативен двупосочен набор, страници от 4 KB до 64 KB (на степен 2). b.
[25] <B.4> 256
записа, асоциативен двупосочен набор, страници от 4 KB до 64 KB (на степен 2). ° С. [25] <B.4>
512 записа,
асоциативен двупосочен набор, страници от 4 KB до 64 KB (на степен 2). д. [25] <B.4> 1024
записа,
д. [20] <B.4> Какъв би бил ефектът върху степента на пропуски и режийните разходи на TLB
за многозадачна среда? Как честотата на превключване на контекста ще повлияе на
режийните разходи?
B.15 [15/20/20] <B.5> Възможно е да се осигури по-гъвкава защита от тази в архитектурата на Intel
Pentium, като се използва схема за защита, подобна на използваната в Hewlett-Packard Precision
Architecture (HP/PA ). В такава схема всеки запис в таблицата на страницата съдържа „ID
за защита“ (ключ) заедно с правата за достъп до страницата. При всяка препратка процесорът
сравнява защитния идентификатор в записа на таблицата на страницата с тези, съхранени
във всеки от четирите регистъра на защитния идентификатор (достъпът до тези регистри
изисква процесорът да бъде в режим на надзорник). Ако няма съвпадение за идентификатора
на защита в записа в таблицата на страниците или ако достъпът не е разрешен достъп
(например писане на страница само за четене), се генерира изключение.
а. [15] <B.5> Как един процес би могъл да има повече от четири валидни идентификатора за
защита в даден момент? С други думи, да предположим, че един процес иска да има 10
идентификатора за защита едновременно. Предложете механизъм, чрез който това може
да стане (може би с помощта на софтуер).
Machine Translated by Google
b. [20] <B.5> Обяснете как този модел може да се използва за улесняване на конструкцията
на операционни системи от относително малки парчета код, които не могат да презаписват
взаимно (микроядра). Какви предимства може да има такава операционна система
имат над монолитна операционна система, в която всеки код в операционната система може
запис на произволно място в паметта?
° С. [20] <B.5> Проста промяна в дизайна на тази система би позволила два идентификатора за
защита за всеки запис в таблицата на страниците, единият за достъп за четене, а другият за
достъп за запис или изпълнение (полето не се използва, ако не е зададен нито битът за запис,
нито за изпълнение). Какви предимства може да има от наличието на различни
идентификатори за защита за възможности за четене и запис? (Съвет: Това може ли да улесни
споделяне на данни и код между процеси?)
Machine Translated by Google
°С
Междинни понятия 1
C.1 Въведение
Много читатели на този текст ще са покрили основите на конвейера в друг текст (като нашия по-
основен текст Компютърна организация и дизайн) или в друг курс. Тъй като глава 3 надгражда до
голяма степен този материал, читателите трябва да се уверят, че са запознати с концепциите,
обсъждани в това приложение, преди да продължат. Докато четете Глава 2, може да намерите за
полезно да се обърнете към този материал за бърз преглед.
Раздел C.5 обсъжда как петстепенният конвейер може да бъде разширен, за да обработва по-
дълго изпълняващи се инструкции с плаваща запетая. Раздел C.6 обединява тези концепции в
казус на дълбоко конвейеризиран процесор, MIPS R4000/4400, включващ както осемстепенния
конвейер с цели числа, така и конвейера с плаваща запетая.
Раздел C.7 въвежда концепцията за динамично планиране и използването на табла за прилагане
на динамично планиране. Той се въвежда като междусекторен въпрос, тъй като може да се използва
като въведение към основните концепции в Глава 3, която се фокусира върху динамично
планираните подходи. Раздел C.7 е също леко въведение към по-сложния алгоритъм на Tomasulo,
обхванат в Глава 3. Въпреки че алгоритъмът на Tomasulo може да бъде разгледан и разбран без
въвеждане на табло, подходът на таблото е по-прост и лесен за разбиране.
Какво е тръбопровод?
монтажна линия, различни стъпки завършват паралелно различни части от различни инструкции.
Всяка от тези стъпки се нарича тръбен етап или тръбен сегмент. Етапите са свързани един към
друг, за да образуват тръба - инструкциите влизат в единия край, напредват през етапите и
излизат в другия край, точно както биха направили автомобилите на поточна линия.
При тези условия ускоряването от тръбопровода е равно на броя на тръбопроводните етапи, точно
както поточна линия с n етапа може в идеалния случай да произвежда коли n пъти по-бързо.
Обикновено обаче етапите няма да бъдат идеално балансирани; освен това, тръбопроводът включва
някои режийни разходи. По този начин времето за инструкция на конвейерния процесор няма да
има минималната възможна стойност, но може да бъде близко.
В цялата тази книга ние използваме RISC (компютър с редуциран набор от инструкции)
архитектура или архитектура за зареждане, за да илюстрираме основните концепции, въпреки
че почти всички идеи, които въвеждаме в тази книга, са приложими за други процесори.
В този раздел представяме ядрото на типична RISC архитектура. В това приложение и в цялата
книга нашата RISC архитектура по подразбиране е MIPS. На много места концепциите са значително
сходни, че ще се прилагат към всеки RISC. RISC архитектурите се характеризират с няколко
ключови свойства, които драматично опростяват тяхното внедряване:
Тези прости свойства водят до драматични опростявания при внедряването на конвейер, поради
което тези набори от инструкции са проектирани по този начин.
За съгласуваност с останалата част от текста използваме MIPS64, 64-битовата версия на
набора от инструкции MIPS. Разширените 64-битови инструкции обикновено се обозначават с D
в началото или в края на мнемониката. Например DADD е 64-битовата версия на инструкция за
добавяне, докато LD е 64-битовата версия на инструкция за зареждане.
1. Инструкции ALU— Тези инструкции приемат или два регистъра, или регистър и незабавен
разширен знак (наречени незабавни инструкции ALU, те имат 16-битово отместване в MIPS),
работят с тях и съхраняват резултата в трети регистър. Типичните операции включват
събиране (DADD), изваждане (DSUB) и логически операции (като И или ИЛИ), които не правят
разлика между 32-битови и 64-битови версии. Непосредствените версии на тези
инструкции използват същата мнемоника със суфикс I. В MIPS има както подписани, така и
дума (LD) и дума за съхранение (SD) зареждат или съхраняват цялото 64-битово съдържание на регистъра.
и нула. MIPS използва последното. За това приложение ние разглеждаме само сравнения за
местоназначението се получава чрез добавяне на отместване с разширен знак (16 бита в MIPS) към
текущия компютър. Безусловните скокове са предоставени в много RISC архитектури, но ние няма
раздел показва проста реализация, при която всяка инструкция отнема най-много 5
Вместо това, той е проектиран да води естествено до конвейерно изпълнение. Прилагането на набора
Всяка инструкция в това RISC подмножество може да бъде изпълнена за най-много 5 такта
край на този етап чрез съхраняване на целевия адрес на клона в компютъра, ако тестът за условие
даде истина.
Тази техника е известна като декодиране с фиксирано поле. Имайте предвид, че може да
прочетем регистър, който не използваме, което не помага, но също така не вреди на производителността.
(Това наистина губи енергия за четене на ненужен регистър и чувствителните към захранване
дизайни могат да избегнат това.) Тъй като непосредствената част от инструкцията също е
разположена на идентично място, разширеният знак непосредствено също се изчислява по време на
този цикъл в случай, че е необходимо.
ALU оперира с операндите, подготвени в предишния цикъл, като изпълнява една от трите функции
в зависимост от типа инструкция. Справка към паметта – ALU добавя
Можем да тръбопроводим изпълнението, описано по-горе, без почти никакви промени, като просто
стартираме нова инструкция на всеки такт. (Вижте защо избрахме този дизайн?)
Machine Translated by Google
Номер на часовника
Номер на инструкция 1 2 3 4 5 6 7 8 9
Фигура C.1 Прост RISC тръбопровод. При всеки тактов цикъл се извлича друга инструкция и започва своето изпълнение от пет
цикъла. Ако дадена инструкция се стартира на всеки такт, производителността ще бъде до пет пъти по-висока от тази на процесор, който е
не се конвейеризира. Имената на етапите в конвейера са същите като тези, използвани за циклите в неконвейерния
изпълнение: IF = извличане на инструкции, ID = декодиране на инструкции, EX = изпълнение, MEM = достъп до паметта и WB =
пиша в отговор на писмо.
тактови цикли за завършване, по време на всеки тактов цикъл хардуерът ще инициира нов
този и следващите раздели, ние ще направим нашия RISC тръбопровод „реален“ чрез сделка
един и същ ресурс за път на данни на един и същ такт. Например единично ALU
наборът от инструкции прави оценката на ресурсите относително лесна. Фигура C.2 показва a
опростена версия на RISC път за данни, начертан по тръбопроводен начин. Както виждаш,
Първо, ние използваме отделни памети за инструкции и данни, които обикновено бихме внедрили
нашият конвейерно облицован процесор има тактов цикъл, който е равен на този на неконвейерната версия,
системата с памет трябва да доставя пет пъти по-голяма честотна лента. Това повишено търсене
един за писане в WB. Тези употреби са различни, така че ние просто показваме регистъра
файл на две места. Следователно трябва да извършваме две четения и едно писане на всеки
Machine Translated by Google
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9
ULA
АЗ СЪМ
Рег DM Рег
ULA
АЗ СЪМ
Рег DM Рег
ъгдпсое
рт Р
и
нав
зр з
пн(
ULA
л
нр
еуа
DM
ицанкм
Рег Рег
аит
)етие
АЗ СЪМ
ULA
АЗ СЪМ
Рег DM Рег
Фигура C.2 Тръбопроводът може да се разглежда като поредица от пътища на данни, изместени във времето. Това показва припокриването между
частите от пътя на данните, с тактов цикъл 5 (CC 5), показващ ситуацията в стационарно състояние. Тъй като регистрационният файл е
използван като източник в етапа ID и като дестинация в етапа WB, той се появява два пъти. Показваме, че се чете в едно
част от сцената и написана в друга чрез използване на плътна линия, съответно отдясно или отляво, и пунктирана линия на
другата страна. Съкращението IM се използва за памет за инструкции, DM за памет за данни и CC за тактов цикъл.
Machine Translated by Google
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
ULA
АЗ СЪМ Рег DM Рег
ULA
АЗ СЪМ Рег DM
ULA
АЗ СЪМ Рег
ULA
АЗ СЪМ Рег
Фигура C.3 Конвейер, показващ регистрите на конвейера между последователните етапи на конвейера. Забележете, че
регистрите предотвратяват смущения между две различни инструкции в съседни етапи в конвейера. Свирят и регистрите
критичната роля на пренасянето на данни за дадена инструкция от един етап на друг. Свойството, задействано от край, на
регистри - това е, че стойностите се променят мигновено на фронта на часовника - е критично. Иначе данните от един
инструкция може да попречи на изпълнението на друга!
преминава през два конвейерни регистъра, за да достигне до паметта за данни по време на MEM
действително съхранени до WB; пристига там, като преминава през два тръбопроводни регистъра. Понякога е
конвенция за назоваването им чрез етапите на тръбопровода, които свързват, така че регистрите да се наричат
завършено за единица време, но не намалява времето за изпълнение на индивидуална инструкция. Всъщност това
способност на инструкциите означава, че програмата работи по-бързо и има по-ниско общо изпълнение
Фактът, че времето за изпълнение на всяка инструкция не намалява, поставя ограничения върху практическата
дълбочина на конвейера, както ще видим в следващия раздел. В допълнение към ограниченията, произтичащи от
етапи намалява производителността, тъй като часовникът не може да работи по-бързо от необходимото време
забавяне на регистъра на тръбопровода и изкривяване на часовника. Регистрите на тръбопровода добавят време за настройка,
което е времето, през което регистровият вход трябва да бъде стабилен преди часовниковия сигнал, който
задейства възникване на запис, плюс забавяне на разпространението до тактовия цикъл. Изкривяване на часовника,
което също е максимално закъснение между момента, в който часовникът пристигне във всеки два регистъра
допринася за долната граница на тактовия цикъл. След като часовниковият цикъл е толкова малък
тъй като сумата от изкривяването на часовника и главната стойност на резето не е полезна допълнителна конвейерна обработка,
трябва да видите Кункел и Смит [1986]. Както видяхме в глава 3, тази реж
и настройка, тръбопроводът на процесора добавя 0,2 ns режийни разходи към часовника. Игнориране
печалба от тръбопровод?
[ ( = 1 ns ×40% 20 % +) ×+ 4 40 % 5 ] ×
= 1 ns 4,4 ×
= 4,4 ns
Machine Translated by Google
етап плюс режийни стойности, които ще бъдат 1 + 0,2 или 1,2 ns; това е средното време за изпълнение на
4.4 ns
= = -------------- 3,7 пъти
1.2 ns
изпълнение.
тръбопровод.
опасността често изисква някои инструкции в тръбопровода да бъдат оставени да продължат, докато
в тръбопровода – трябва да продължи, тъй като в противен случай опасността никога няма да изчезне. Като
Конвейерът може да се разглежда като намаляване на CPI или времето на тактовия цикъл. От
= +
CPI pipelined Идеален CPI Pipeline тактови цикли за спиране на инструкция
+
= 1 тактови цикли на спиране на тръбопровода на инструкция
Ако пренебрегнем режийните разходи за време на цикъла на конвейерната обработка и приемем, че етапите са
перфектно балансиран, тогава времето на цикъла на двата процесора може да бъде еднакво, което води до
Един важен прост случай е, когато всички инструкции вземат еднакъв брой
цикли, които също трябва да са равни на броя на етапите на тръбопровода (наричан още дълбочина
Дълбочина на тръбопровода
= -------------------------------------------------- ----------------------------------------------
Ускори
+
1 цикъла на спиране на тръбопровода на инструкция
Ако няма спирания на конвейера, това води до интуитивния резултат, който конвейерът може
Като алтернатива, ако мислим за тръбопровода като подобряване на времето на тактовия цикъл,
1
×
= -------------------------------------------------- -------------------------------------------- Дълбочина на тръбопровода
+
1 цикъла на спиране на тръбопровода на инструкция
Структурни опасности
модулът не е напълно тръбопроводен. След това поредица от инструкции, използващи това неконвейерно
модулът не може да работи със скорост един на такт. Друг често срещан начин, който
процесорът може да има само един порт за запис на регистрационен файл, но при определени
обстоятелства конвейерът може да поиска да извърши два записа в един тактов цикъл. Това ще
и инструкции. В резултат на това, когато дадена инструкция съдържа препратка към паметта на
данните, тя ще бъде в конфликт с препратката към инструкция за по-късна инструкция, като
цикъл, когато възникне достъп до паметта за данни. Сривът обикновено се нарича тръбопроводен балон
или просто балон, тъй като плава през тръбопровода, заемайки място, но
извършване на полезна работа. Ще видим друг тип щанд, когато говорим за него
опасности за данните.
Дизайнерите често показват поведението на сергия, като използват проста диаграма само с
имената на етапите на тръбите, както е на Фигура C.5. Формата на фигура C.5 показва щанда от
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8
ULA
Заредете
ULA
ULA
ULA
Фигура C.4 Процесор само с един порт за памет ще генерира конфликт при всяка препратка към памет ULA
възниква. В този пример инструкцията за зареждане използва паметта за достъп до данни по същото време, което инструкция 3 иска
за извличане на инструкция от паметта.
Пример Нека да видим колко може да струва товарната структурна опасност. Да предположим, че препратките
към данни съставляват 40% от микса и че идеалният CPI на конвейерния процесор,
пренебрегвайки структурния риск, е 1. Да приемем, че процесорът с
структурна опасност има тактова честота, която е 1,05 пъти по-висока от тактовата честота на
процесора без опасност. Без да се вземат предвид всички други загуби на производителност, е
тръбопроводът със или без структурна опасност по-бързо и с колко?
Отговор Има няколко начина, по които можем да разрешим този проблем. Може би най-простият е да
изчислете средното време за инструкции на двата процесора:
Инструкция 1 2 3 4 5 6 7 8 9 10
Фигура C.5 Тръбопровод, блокиран поради структурна опасност — товар с един порт за памет. Както е показано тук, натоварването
инструкция ефективно открадва цикъл за извличане на инструкции, което води до спиране на тръбопровода - не се инициира инструкция на
тактов цикъл 4 (който обикновено би инициирал инструкция i + 3). Тъй като инструкцията, която се извлича, е в застой, всички
други инструкции в конвейера, преди блокираната инструкция да може да продължи нормално. Цикълът на спиране ще продължи
преминават през тръбопровода, така че нито една инструкция да не завърши на тактовия цикъл 8. Понякога тези диаграми на тръбопровода са
начертана със сергия, заемаща цял хоризонтален ред и инструкция 3, преместена на следващия ред; в двете
случай, ефектът е същият, тъй като инструкция i + 3 не започва изпълнение до цикъл 5. Използваме формата по-горе,
тъй като заема по-малко място на фигурата. Имайте предвид, че тази фигура предполага, че инструкции i + 1 и i + 2 не са памет
препратки.
Тъй като няма задръствания, средното време за инструкции за идеалния процесор е просто идеалното време
=
Средно време за инструкции CPI Време×на цикъл на часовника
= ×
1.3 Идеално време за часовников цикъл
Като алтернатива на тази структурна опасност, дизайнерът може да осигури отделен достъп до паметта
кеширане на инструкции и данни или чрез използване на набор от буфери, обикновено наричани инструкции
буфери, за съхранение на инструкции. Глава 5 обсъжда както идеите за разделен кеш, така и за буфер на
инструкции.
Ако всички други фактори са равни, процесор без структурни опасности ще го направи
винаги имат по-нисък CPI. Защо тогава проектантът би допуснал структурни опасности?
Основната причина е да се намалят разходите за единицата, тъй като тръбопроводът на всички функционални
единици или тяхното дублиране може да бъде твърде скъпо. Например процесори, които
поддържа както инструкция, така и достъп до кеша на данни всеки цикъл (за предотвратяване на
структурна опасност от горния пример) изискват два пъти повече обща памет
Machine Translated by Google
честотна лента и често имат по-висока честотна лента при щифтовете. По същия начин пълното
конвейерно изграждане на умножител с плаваща запетая (FP) изразходва много портове. Ако
структурната опасност е рядка, може да не си струва цената да се избегне.
Опасности за данни
Проблемът, поставен на фигура C.6, може да бъде решен с проста хардуерна техника
наречено пренасочване (наричано също заобикаляне и понякога късо съединение). The
ключово прозрение при препращането е, че резултатът не е наистина необходим на DSUB, докато
Machine Translated by Google
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
ULA
DADD R1, R2, R3 АЗ СЪМ
Рег DM Рег
ULA
DSUB R4, R1, R5
АЗ СЪМ
Рег DM Рег
ULA
Р
и
нав
зр
ъгдпсое з
пн(
DM
рт
АЗ СЪМ
ицанкм
аит
)етие нр
еуа
ULA
ИЛИ R8, R1, R9
АЗ СЪМ
Рег
АЗ СЪМ
Рег
Фигура C.6 Използването на резултата от инструкцията DADD в следващите три инструкции причинява опасност, тъй като
регистърът не се записва, докато не го прочетете след тези инструкции.
след като DADD действително го произвежда. Ако резултатът може да бъде преместен от тръбопровода
регистрирайте, където DADD го съхранява до мястото, където DSUB се нуждае от него, тогава необходимостта от a
сривът може да бъде избегнат. Използвайки това наблюдение, препращането работи по следния начин:
който е започнал 2 цикъла по-рано. Фигура C.7 показва нашия пример с обходните пътища
на място и подчертаване на времето на четене и запис на регистъра. Този код
последователността може да се изпълни без застой.
Препращането може да се обобщи, за да включва предаване на резултат директно към
функционалната единица, която го изисква: Резултатът се препраща от регистъра на тръбопровода,
съответстващ на изхода на една единица към входа на друга, а не само от
резултатът от единица към входа на същата единица. Вземете например следното
последователност:
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
ULA
ULA
ULA
Р
и
нав
зр
ъгдпсое з
пн(
DM
рт
ULA
Рег
АЗ СЪМ
Рег
Фигура C.7 Набор от инструкции, който зависи от резултата от DADD, използва пътища за препращане, за да избегне опасността от данни.
Входовете за инструкциите DSUB и AND препращат от конвейерните регистри към първия ALU вход. ИЛИ
получава своя резултат чрез препращане през регистърния файл, което се постига лесно чрез четене на регистрите в
втората половина на цикъла и писане в първата половина, както показват прекъснатите линии на регистрите. Забележете, че
препратеният резултат може да отиде към всеки ALU вход; всъщност и двата ALU входа могат да използват препратени входове от всеки от
същия тръбопроводен регистър или от различни тръбопроводни регистри. Това би се случило, например, ако инструкцията AND беше
И R6, R1, R4.
Machine Translated by Google
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6
ULA
DADD R1, R2, R3 АЗ СЪМ
Рег DM Рег
ULA
LD R4, 0(R1) АЗ СЪМ
Рег DM Рег
аит
)етие еуа
ицанкм л
нррт Р
и
нав
зр
ъгдпсое з
пн(
ULA
SD R4,12(R1) АЗ СЪМ
Рег DM
Фигура C.8 Препращане на операнд, изискван от магазините по време на MEM. Резултатът от натоварването се изпраща от
изход от паметта към входа на паметта, който да бъде съхранен. В допълнение, ALU изходът се препраща към ALU входа за
изчисляване на адреса както на натоварването, така и на магазина (това не е по-различно от препращането към друга ALU операция). Ако
магазинът зависи от непосредствено предшестваща ALU операция (не е показана по-горе), резултатът трябва да бъде пренасочен, за да
се предотврати спиране.
За съжаление, не всички потенциални опасности за данните могат да бъдат обработени чрез заобикаляне.
LD R1,0(R2)
DSUB R4, R1, R5
И R6, R1, R7
ИЛИ R8, R1, R9
CC 1 CC 2 CC 3 CC 4 CC 5
UL A
LD R1, 0(R2) АЗ СЪМ
Рег DM Рег
ULA
DSUB R4, R1, R5 АЗ СЪМ
Рег DM
ULA
рт
л
нр
еуа
ицанкм ъгдпсое Р
и
нав
зр з
пн(
И R6, R1, R7
аит
Рег
)етие
АЗ СЪМ
Фигура C.9 Инструкцията за зареждане може да заобиколи своите резултати към инструкциите И и ИЛИ, но не и към DSUB, тъй като
това би означавало препращане на резултата за „отрицателно време“.
навреме – възможност, която все още не е достъпна за компютърните дизайнери! Можем да препратим
И операция, която започва 2 тактови цикъла след натоварването. По същия начин ИЛИ
инструкцията няма проблем, тъй като получава стойността чрез регистърния файл.
За инструкцията DSUB препратеният резултат пристига твърде късно — в края на a
Инструкцията за зареждане има забавяне или латентност, които не могат да бъдат елиминирани
само чрез пренасочване. Вместо това трябва да добавим хардуер, наречен блокировка на тръбопровода, към
опасност и спира тръбопровода, докато опасността бъде отстранена. В този случай блокировката
преместете 1 цикъл по-късно във времето, препращането към инструкцията AND сега върви
последователност да расте с едно. Никаква инструкция не се стартира по време на часовников цикъл 4 (и нито една
Фигура C.10 В горната половина можем да видим защо е необходимо спиране: MEM цикълът на товара произвежда стойност, която е
необходими в EX цикъла на DSUB, който се случва по същото време. Този проблем се решава чрез поставяне на щанд, като
показано в долната половина.
Опасности от разклонения
Контролните опасности могат да причинят по-голяма загуба на производителност за нашия MIPS тръбопровод от
правете опасности за данните. Когато се изпълни клон, той може или не може да промени компютъра на
нещо различно от текущата му стойност плюс 4. Спомнете си, че ако клон промени
PC към целевия си адрес, това е взет клон; ако падне, не се взема, или
невзет. Ако инструкция i е взет клон, тогава компютърът обикновено не се променя
до края на ID, след завършване на изчисляването и сравнението на адреса.
е известно. Привлекателността на това решение се крие преди всичко в неговата простота и двете
за хардуер и софтуер. Това е решението, използвано по-рано в тръбопровода, показан в
Фигура C.11. В този случай наказанието за бранша е фиксирано и не може да бъде намалено с
софтуер.
Фигура C.12 Схемата за предвидено-не-взето и последователността на тръбопровода, когато клонът не е поет (отгоре) и
взето (отдолу). Когато клонът е незает, определен по време на ID, ние извличаме падането и просто продължаваме. Ако
клонът е взет по време на ID, ние рестартираме извличането в целта на клона. Това води до всички инструкции, следващи
разклоняване до спиране 1 тактов цикъл.
Machine Translated by Google
Алтернативна схема е всеки клон да се третира като взет. Веднага щом клонът
се декодира и целевият адрес се изчислява, приемаме клона, който ще бъде взет
и започнете да извличате и изпълнявате в целта. Защото в нашия петстепенен тръбопровод
ние не знаем целевия адрес по-рано, отколкото знаем резултата от разклонението,
няма предимство в този подход за този тръбопровод. В някои процесори -
особено тези с имплицитно зададени кодове на условия или по-мощни (и следователно
по-бавни) условия на разклоняване – целта на разклонението е известна преди изхода на
разклонението и схемата с предвидено взето може да има смисъл. В схема с предвидено-взето или
предвидено-не-взето, компилаторът може да подобри производителността чрез
организиране на кода, така че най-честият път да съвпада с този на хардуера
избор. Нашата четвърта схема предоставя повече възможности за компилатора
подобряване на производителността.
клонова инструкция
последователен наследник1
целта на клона, ако е взета
Фигура C.13 Поведението на забавено разклоняване е същото независимо дали разклонението е взето или не. Инструкциите в
слота за забавяне (има само един слот за забавяне за MIPS) се изпълняват. Ако клонът не е взет, изпълнението продължава с
инструкцията след инструкцията за забавяне на клона; ако клонът е взет, изпълнението продължава в целта на клона.
Когато инструкцията в слота за забавяне на разклонението също е разклонение, значението е неясно: Ако разклонението не е взето, какво
трябва да се случи с клона в слота за забавяне на клона? Поради това объркване, архитектурите със закъснение се разклоняват
често забраняват поставянето на клон в слота за забавяне.
Machine Translated by Google
ако R1 = 0 тогава
Фигура C.14 Планиране на слота за забавяне на разклонението. Горното поле във всяка двойка показва кода преди планиране;
долното поле показва планирания код. В (a) слотът за забавяне е планиран с независима инструкция от преди разклонението.
Това е най-добрият избор. Стратегии (b) и (c) се използват, когато (a) не е възможно. В кодовите последователности за (b) и (c)
използването на R1 в условието за разклоняване предотвратява преместването на инструкцията DADD (чиято дестинация е
R1) след разклонението. В (b) слотът за забавяне на разклонението се планира от целта на разклонението; обикновено
целевата инструкция ще трябва да бъде копирана, защото може да бъде достигната по друг път. Стратегия (b) се предпочита,
когато разклонението е взето с голяма вероятност, като например разклонение на цикъл. И накрая, разклонението може да бъде
насрочено от невзетото падане, както в (c). За да бъде тази оптимизация легална за (b) или (c), трябва да е ОК да се изпълни
преместената инструкция, когато разклонението тръгне в неочаквана посока. Под OK имаме предвид, че работата е загубена,
но програмата ще продължи да се изпълнява правилно. Такъв е случаят например в (c), ако R7 беше неизползван временен
регистър, когато разклонението тръгне в неочаквана посока.
Дълбочина на тръбопровода
= -------------------------------------------------- -------------------------------------------
Ускоряване на тръбопровода
+
1 Цикли на спиране на тръбопровода от разклонения
Поради следното:
ние добиваме:
Дълбочина на тръбопровода
= -------------------------------------------------- --------------------------------------------
Ускоряване на тръбопровода
+
1 Честота ×
на клон Наказание за клон
Пример За по-дълбок конвейер, като този в MIPS R4000, са необходими поне три етапа на тръбопровода, преди
да стане известен адресът на клона на целта и допълнителен цикъл
преди да бъде оценено състоянието на клона, като се приеме, че няма застой в регистрите в
условно сравнение. Тристепенно забавяне води до санкции на бранша за
три най-прости схеми за прогнозиране, изброени на фигура C.15.
Намерете ефективната добавка към CPI, произтичаща от разклонения за този конвейер,
като се приемат следните честоти:
Безусловен клон 4%
Промийте тръбопровода 2 3 3
Предвидено взето 2 3 2
Предвидено невзето 2 0 3
Фигура C.15 Наказания за разклонения за трите най-прости схеми за прогнозиране за по-дълбок конвейер.
Machine Translated by Google
Фигура C.16 Наказания за CPI за три схеми за прогнозиране на разклонения и по-дълбок конвейер.
Отговор Намираме CPI чрез умножаване на относителната честота на безусловните, условно невзетите и условно взетите
Разликите между схемите се увеличават значително с това по-дълго забавяне. Ако базовият CPI
идеалният тръбопровод би бил 1,56 пъти по-бърз от тръбопровод, който използва схемата за застой-
Тъй като тръбопроводите стават по-дълбоки и потенциалното наказание за разклонения се увеличава, използвайки
забавени клонове и подобни схеми стават недостатъчни. Вместо това имаме нужда
два класа: евтини статични схеми, които разчитат на информацията, налична при компилирането
време и стратегии, които предвиждат разклонения динамично въз основа на поведението на програмата.
информация за профила, събрана от по-ранни изпълнения. Основното наблюдение, което прави това полезно
е, че поведението на клоновете често е бимодално разпределено; това означава, че отделен клон често е
успех на прогнозирането на разклонения, използвайки тази стратегия. Използвани са същите входни данни
25%
22%
20% 18%
15%
15%
12% 12%
11%
нш
енавзот
ак сед
не а
р
огр
цре оП
пн
10%
10% 9%
5% 6%
5%
0%
ли
gcc ухо
чydro2dmdljdpsu2cor
додук
eqntott
еспресо компрес
Бенчмарк
Тази проста 1-битова схема за предсказване има недостатък в производителността: Дори ако
едно разклонение е почти винаги взето, ние вероятно ще прогнозираме неправилно два пъти, вместо
веднъж, когато не е взето, тъй като погрешното предсказване причинява преобръщане на бита за
прогнозиране.
За да се коригира тази слабост, често се използват 2-битови схеми за предсказване. В 2-
битова схема една прогноза трябва да пропусне два пъти, преди да бъде променена. Фигура C.18
показва процесора с крайно състояние за 2-битова схема за прогнозиране.
Буферът за предсказване на разклонения може да бъде реализиран като малък, специален
„кеш“, достъпен с адреса на инструкцията по време на етапа на IF тръбата, или като двойка битове,
прикрепени към всеки блок в кеша на инструкциите и извлечени с инструкцията. Ако инструкцията
е декодирана като разклонение и ако разклонението е предвидено като взето, извличането започва
от целта веднага след като компютърът е известен. В противен случай последователното извличане
и изпълнение продължават. Както показва фигура C.18 , ако прогнозата се окаже грешна, битовете за
прогноза се променят.
Какъв вид точност може да се очаква от буфер за предсказване на разклонения, използващ 2
бита на запис в реални приложения? Фигура C.19 показва това за SPEC89
Взета
Не е взето
11 взето 10
Взета
Взета Не е взето
Не е взето
Взета
Не е взето
nasa7 1%
матрица300 0%
tomcatv 1%
додук 5%
подправка 9%
а8
евокр9 чE
мC Pб
не S
fpppp 9%
gcc 12%
еспресо 5%
eqntott 18%
ли 10%
сравнителен анализ на буфер за прогнозиране на клонове с 4096 записа води до точност на прогнозиране, варираща
4K входен буфер, като този, използван за тези резултати, се счита за малък според стандартите от 2005 г. и по-
Докато се опитваме да използваме повече ILP, точността на нашето предвиждане на разклонения става
критична. Както можем да видим на Фигура C.19, точността на предикторите за целочислени програми, които
обикновено имат и по-високи честоти на разклоненията, е по-ниска, отколкото за научните програми с интензивни
цикли. Можем да атакуваме този проблем по два начина: чрез увеличаване на размера на буфера и чрез
увеличаване на точността на схемата, която използваме за всяка прогноза. Буфер с 4K записи обаче, както показва
Фигура C.20 , работи доста сравнимо с безкраен буфер, поне за бенчмаркове като тези в SPEC. Данните на фигура
C.20 показват ясно, че честотата на попадения на буфера не е основният ограничаващ фактор. Както споменахме по-
1%
nasa7
0%
0% 4096 записа: 2
матрица300
0% бита на запис
Неограничени
записи: 2 бита на запис
1%
tomcatv
0%
5%
додук
5%
9%
подправка
9%
а8
евокр9 чE
мC Pб
не S
9%
fpppp
9%
12%
gcc
11%
5%
еспресо
5%
18%
eqntott
18%
10%
ли
10%
Фигура C.20 Точност на прогнозиране на 2-битов буфер за прогнозиране с 4096 записа спрямо
безкраен буфер за сравнителните тестове SPEC89. Въпреки че тези данни са за по-стара
версия на подмножество от тестовете на SPEC, резултатите биха били сравними за по-нови
версии с може би до 8K записи, необходими за съпоставяне на безкраен 2-битов предиктор.
броят битове на предиктор без промяна на структурата на предиктора също има малко
влияние. Вместо това трябва да разгледаме как можем да увеличим точността на всеки
предиктор.
A Regs[rs];
B Regs[rt];
Imm разширено със знак непосредствено поле на IR;
ALUOutput A + Imm;
Machine Translated by Google
ALUOutput A func B;
ALUOutput A op Imm;
Клон:
ALUOutput NPC + (Imm << 2);
Cond (A == 0)
Операция – ALU добавя NPC към разширената със знак непосредствена стойност
в Imm, което се измества наляво с 2 бита, за да се създаде отместване на думата, за да се изчисли
адрес на целевия клон. Регистър А, който е прочетен в предишния
цикъл, се проверява, за да се определи дали разклонението е взето. Тъй като ние сме
като се има предвид само една форма на клон (BEQZ), сравнението е срещу 0.
Имайте предвид, че BEQZ всъщност е псевдоинструкция, която се превежда като BEQ с
R0 като операнд. За простота, това е единствената форма на клон, която разглеждаме.
Операция — достъп до паметта, ако е необходимо. Ако инструкцията е зареждане, данните се връщат
от паметта и се поставят в регистъра LMD (load memory data); ако то
е магазин, тогава данните от регистър B се записват в паметта. в
и в двата случая използваният адрес е този, изчислен по време на предишния цикъл и
съхранявани в регистъра ALUOutput.
Клон:
if (cond) PC ALUOutput
Machine Translated by Google
Regs[rd] ALUOutput;
Regs[rt] ALUOutput;
Инструкция за зареждане:
Regs[rt] LMD;
Фигура C.21 показва как дадена инструкция преминава през пътя на данните. Накрая
на всеки тактов цикъл, всяка стойност, изчислена по време на този тактов цикъл и необходима
на по-късен тактов цикъл (независимо дали за тази инструкция или за следващата) се записва в a
устройство за съхранение, което може да бъде памет, регистър с общо предназначение, компютър или a
временен регистър (т.е. LMD, Imm, A, B, IR, NPC, ALUOutput или Cond). The
временните регистри съхраняват стойности между тактовите цикли за една инструкция, докато
другите елементи за съхранение са видими части от състоянието и съхраняват стойности между тях
последователни инструкции.
Изпълнение/
Декодиране на инструкции/ Достъп до
Извличане на инструкции
адресно Пиша в
М
u
х
Добавете NPC
Клон
4 Нула? Cond
взета
настолен компютър
М
u
Инструкция А х
IR
памет Регистри ALU
ALU
М изход
б u Данни
LMD М
х памет u
х
16 32
Знак- лмм
удължаване
Фигура C.21 Реализирането на MIPS пътя за данни позволява всяка инструкция да бъде изпълнена за 4 или 5 тактови цикъла. Въпреки
че компютърът е показан в частта от пътя на данните, която се използва при извличане на инструкции, и регистрите са показани в
частта от пътя на данните, която се използва при декодиране/регистриране на инструкции, и двете функционални единици се
четат, както и се записват по инструкция. Въпреки че показваме тези функционални единици в цикъла, съответстващ на мястото,
където се четат, компютърът се записва по време на тактовия цикъл за достъп до паметта, а регистрите се записват по време на
тактовия цикъл за обратно записване. И в двата случая записите в по-късните етапи на канала се показват от изхода на
мултиплексора (при достъп до паметта или обратно записване), който пренася стойност обратно към компютъра или регистрите. Тези
обратни сигнали въвеждат голяма част от сложността на тръбопровода, тъй като показват възможността за опасности.
Тактовият цикъл обаче ще бъде приблизително равен на пет пъти тактовия цикъл на
многоцикловия процесор, тъй като всяка инструкция ще трябва да премине през всички
функционални единици. Дизайнерите никога не биха използвали това изпълнение с един
цикъл по две причини. Първо, внедряването на един цикъл би било много неефективно за
повечето процесори, които имат разумна вариация в количеството работа и следователно във
времето на тактовия цикъл, необходимо за различни инструкции. Второ, изпълнението с един
цикъл изисква дублирането на функционални единици, които биха могли да бъдат споделени
в изпълнение с много цикъл. Независимо от това, този път на данни с един цикъл ни позволява
да илюстрираме как конвейерната обработка може да подобри времето на тактовия цикъл, за разлика от CPI, на проце
Както и преди, можем да конвейеризираме пътя на данните от Фигура C.21 без почти никакви
промени, като стартираме нова инструкция на всеки такт. Тъй като всеки тръбен етап е такъв
Machine Translated by Google
активен на всеки такт, всички операции в етап на тръба трябва да завършат за 1 такт и всяка
комбинация от операции трябва да може да се осъществи наведнъж.
Освен това конвейерната обработка на пътя на данните изисква стойностите, предавани от един
етап на тръба към следващия, да бъдат поставени в регистри. Фигура C.22 показва MIPS
тръбопровода със съответните регистри, наречени тръбопроводни регистри или конвейери на
тръбопровода, между всеки етап на тръбопровода. Регистрите са обозначени с имената на етапите,
които свързват. Фигура C.22 е начертана така, че връзките през регистрите на тръбопровода
от един етап към друг да са ясни.
Всички регистри, необходими за временно задържане на стойности между тактовите цикли
в рамките на една инструкция, се включват в тези конвейерни регистри. Полетата на регистъра
с инструкции (IR), който е част от регистъра IF/ID, са етикетирани, когато се използват за
предоставяне на имена на регистри. Регистрите на тръбопровода пренасят както данни, така и
управление от един етап на тръбопровода към следващия. Всяка стойност, необходима на по-късен
етап на конвейер, трябва да бъде поставена в такъв регистър и копирана от един регистър на
конвейер в следващия, докато вече не е необходима. Ако се опитахме просто да използваме
временните регистри, които имахме в нашия по-ранен неконвейерен път на данни, стойностите
можеха да бъдат презаписани, преди всички употреби да са завършени. Например полето на използван регис
4
М Клонът
ДОБАВЯНЕ u взет
х
Нула?
IR6..10
М
IR11..15
настолен компютър
u
Памет за IR
х
инструкции MEM/WB.IR Регистри ALU
М
u Памет М
х за данни u
х
16 32
Знак-
удължаване
Фигура C.22 Пътят на данните е конвейерен чрез добавяне на набор от регистри, по един между всяка двойка етапи на конвейер.
Регистрите служат за предаване на стойности и контролна информация от един етап на следващ. Можем също така да мислим за компютъра
като за тръбопроводен регистър, който се намира преди IF етапа на тръбопровода, което води до един тръбопроводен регистър за всеки тръбен етап.
Спомнете си, че компютърът е регистър, задействан от край, записан в края на тактовия цикъл; следователно, няма условие за състезание
при писането на PC. Мултиплексорът за избор за PC е преместен, така че PC се записва точно на един етап (IF). Ако не го преместим, ще има
конфликт, когато възникне разклонение, тъй като две инструкции ще се опитат да запишат различни стойности в компютъра. Повечето от
пътищата на данните протичат отляво надясно, което е от по-рано във времето към по-късно. Пътищата, протичащи отдясно наляво (които
пренасят информацията за обратно записване на регистъра и информацията за компютъра на клон) въвеждат усложнения в нашия тръбопровод.
Machine Translated by Google
за операция за запис при натоварване или ALU се предоставя от регистъра на тръбопровода MEM/WB,
а не от регистъра IF/ID. Това е така, защото искаме операция за зареждане или ALU да запише
регистъра, определен от тази операция, а не регистърното поле на инструкцията, която в момента
преминава от IF към ID! Това поле на регистъра на дестинацията просто се копира от един
тръбопроводен регистър в следващия, докато стане необходимо по време на етапа на WB.
Всяка инструкция е активна в точно един етап от конвейера в даден момент; следователно
всички действия, предприети от името на инструкция, се случват между двойка конвейерни
регистри. По този начин можем също така да разгледаме дейностите на конвейера, като изследваме
какво трябва да се случи на всеки етап от конвейера в зависимост от типа инструкция. Фигура C.23
показва този изглед. Полетата на конвейерните регистри са именувани така, че да показват потока
от данни от един етап към следващия. Забележете, че действията в първите два етапа са независими
от текущия тип инструкция; те трябва да са независими, тъй като инструкцията не се декодира до
края на ID етапа. IF дейността зависи от това дали инструкцията в EX/MEM е взет клон. Ако е така,
тогава целевият адрес на разклонението на инструкцията за разклоняване в EX/MEM се записва в
компютъра в края на IF; в противен случай увеличеният компютър ще бъде записан обратно. (Както
АКО
IF/ID.IR Mem[PC];
IF/ID.NPC,PC (if ((EX/MEM.opcode == клон) & EX/MEM.cond){EX/MEM.
ALUOutput} else {PC+4});
документ за самоличност
Mem[EX/MEM.ALUOutput] EX/
MEM.B;
WB Regs[MEM/WB.IR[rd]] Само за натоварване:
MEM/WB.ALUOutput; Regs[MEM/WB.IR[rt]]
или
MEM/WB.LMD;
Regs[MEM/WB.IR[rt]]
MEM/WB.ALUOutput;
Фигура C.23 Събития на всеки тръбен етап от MIPS конвейера. Нека прегледаме действията в етапите, които са специфични
към тръбопроводната организация. В IF, в допълнение към извличането на инструкцията и изчисляването на новия компютър, ние съхраняваме
увеличен компютър както в компютъра, така и в тръбопроводен регистър (NPC) за по-късна употреба при изчисляване на целта на клона
адрес. Тази структура е същата като организацията на фигура C.22, където компютърът се актуализира в IF от един от двата
източници. В ID извличаме регистрите, разширяваме знака на долните 16 бита на IR (непосредственото поле) и предаваме
по IR и NPC. По време на EX извършваме ALU операция или изчисляване на адрес; минаваме по IR и
регистър B (ако инструкцията е съхраняване). Също така задаваме стойността на cond на 1, ако инструкцията е взето разклонение. По време на
фазата на MEM, ние циклично променяме паметта, записваме компютъра, ако е необходимо, и предаваме необходимите стойности в крайната тръба
сцена. И накрая, по време на WB актуализираме полето на регистъра или от ALU изхода, или от заредената стойност. За простота
ние винаги предаваме целия IR от един етап на следващия, въпреки че докато инструкцията продължава по тръбопровода, по-малко
и е необходимо по-малко от IR.
Примерна кодова
Ситуация последователност Действие
изискваща сергия DADD R5,R1,R7 и спре DADD (и DSUB и OR) преди DADD да започне
DSUB R8,R6,R7 EX.
ИЛИ R9, R6, R7
Фигура C.24 Ситуации, които хардуерът за откриване на опасност в тръбопровода може да види чрез
сравняване на дестинацията и източниците на съседни инструкции. Тази таблица показва това
единственото необходимо сравнение е между дестинацията и източниците на двете
инструкции, следващи инструкцията, която е написала дестинацията. В случай на щанд,
зависимостите на тръбопровода ще изглеждат като третия случай, след като изпълнението продължи. На
Разбира се, опасностите, които включват R0, могат да бъдат игнорирани, тъй като регистърът винаги съдържа 0 и
тестът по-горе може да бъде разширен, за да направи това.
към ALU входовете може да се направи по време на EX. Фигура C.24 изброява разнообразието от обстоятелства,
с които трябва да се справим.
етап, когато инструкция, която се нуждае от данните за зареждане, ще бъде в етап ID. По този начин,
можем да опишем всички възможни рискови ситуации с малка таблица, която може да бъде
всички блокировки за зареждане, когато инструкцията, използваща резултата за зареждане, е в етап ID.
След като бъде открита опасност, управляващият блок трябва да постави спирачката на тръбопровода
инструкцията е достатъчна, тъй като целият контрол се извлича от нея.) По този начин, когато
Заредете
Регистър-регистр ALU ID/EX.IR[rt] == IF/
ID.IR[rs]
Заредете
Регистър-регистр ALU ID/EX.IR[rt] == IF/
ID.IR[rt]
Фигура C.25 Логиката за откриване на необходимостта от блокировки на товара по време на етапа на идентификация на
в ID. Ред 3 на таблицата определя дали регистърът на местоназначението на зареждането е източник за зареждане
или съхранете ефективен адрес, незабавен ALU или тест за клон. Не забравяйте, че IF/ID
регистърът съдържа състоянието на инструкцията в ID, което потенциално използва резултата от зареждането,
докато ID/EX държи състоянието на инструкцията в EX, която е инструкцията за зареждане.
Регистър
на Дестинация
Регистър на Операционен код тръбопровода, на Сравнение
тръбопровода, съдържащ на източника съдържащ Операционен код на инструкцията препратения (ако е равно,
инструкция за източник инструкция инструкция за местоназначение
за местоназначение резултат тогава напред)
EX/MEM Регистър- ID/EX Регистър-регистр ALU Долен ALU вход EX/MEM.IR[rd] == ID/
регистр ALU EX.IR[rt]
MEM/WB Регистър- ID/EX Регистър-регистр ALU, Горен ALU MEM/WB.IR[rd] == ID/
регистр ALU ALU незабавно, товар, вход EX.IR[rs]
магазин, клон
EX/MEM ALU ID/EX Регистър-регистр ALU Долен ALU вход EX/MEM.IR[rt] == ID/
веднага EX.IR[rt]
MEM/WB ALU ID/EX Регистър-регистр ALU, Горен ALU MEM/WB.IR[rt] ==
веднага ALU незабавно, товар, вход ID/EX.IR[rs]
магазин, клон
MEM/WB Заредете ID/EX Регистър-регистр ALU Долен ALU вход MEM/WB.IR[rt] == ID/
EX.IR[rt]
Фигура C.26 Препращането на данни към двата входа на ALU (за инструкцията в EX) може да възникне от резултата на ALU
(в EX/MEM или в MEM/WB) или от резултата от натоварването в MEM/WB. Необходими са 10 отделни сравнения, за да се каже
дали трябва да се извърши операция по препращане. Горният и долният ALU входове се отнасят за входовете, съответстващи на
първият и вторият ALU изходен операнд, съответно, и са показани изрично на Фигура C.21 на страница C-34 и в
Фигура C.27 на страница C-41. Не забравяйте, че ключът на тръбопровода за инструкция за местоназначение в EX е ID/EX, докато
стойностите на източника идват от частта ALUOutput на EX/MEM или MEM/WB или частта LMD на MEM/WB. Има
едно усложнение, което не се разглежда от тази логика: работа с множество инструкции, които записват един и същ регистър. За
например по време на кодовата последователност DADD R1, R2, R3; DADDI R1, R1, #2; DSUB R4, R3, R1, логиката трябва да гарантира това
инструкцията DSUB използва резултата от инструкцията DADDI, а не резултата от инструкцията DADD. Логиката
показано по-горе може да се разшири, за да се справи с този случай, като просто се тества дали препращането от MEM/WB е разрешено само
когато препращането от EX/MEM не е активирано за същия вход. Тъй като резултатът от DADDI ще бъде в EX/MEM, така ще бъде
бъде препратен, а не резултатът DADD в MEM/WB.
далеч, не е използваем до EX. Фигура C.28 показва ревизирания канал на конвейерни данни.
С отделния суматор и решение за разклоняване, взето по време на ID, има само a
1-часов цикъл сергия на клонове. Въпреки че това намалява забавянето на разклонението до 1 цикъл,
Machine Translated by Google
Нула?
М
u
х
ALU
Данни
М памет
u
х
ID/EX
ДОБАВЯНЕ
4 Нула?
М
ДОБАВЯНЕ u
х
IR6..10
Инструкция IR
памет Регистрира ALU
MEM/WB.IR
М
u Памет М
х за данни u
х
16 32
Знак-
удължаване
Фигура C.28 Блокирането от опасностите от разклонения може да бъде намалено чрез преместване на нулевия тест и изчислението на целта
на разклонението във фазата на ID на тръбопровода. Забележете, че сме направили две важни промени, всяка от които премахва 1 цикъл от
3-цикълния застой за клонове. Първата промяна е да преместите както изчислението на адреса на разклонението, така и решението за
условието на разклонението към цикъла на идентификация. Втората промяна е да се напише PC на инструкцията във фазата IF, като се
използва или целевият адрес на клона, изчислен по време на ID, или увеличеният PC, изчислен по време на IF. За сравнение, Фигура C.22
получи адреса на разклонението от регистъра EX/MEM и записа резултата по време на тактовия цикъл на MEM. Както е споменато на фигура
C.22, компютърът може да се разглежда като тръбопроводен регистър (напр. като част от ID/IF), който се записва с адреса на следващата
инструкция в края на всеки IF цикъл.
АКО
IF/ID.IR Mem[PC]; IF/
ID.NPC,PC (ако ((IF/ID.opcode == клон) & (Regs[IF/ID.IR6..10] op 0)) {IF/ID.NPC + разширен знак (IF /
ID.IR[непосредствено поле] << 2) else {PC + 4}); ID/EX.A Regs[IF/ID.IR6..10]; ID/EX.B Regs[IF/ID.IR11..15]; ID/EX.IR IF/
документ за самоличност
EX
MEM
WB
Фигура C.29 Тази преработена структура на тръбопровода се основава на оригинала от Фигура C.23. Той използва отделен суматор, както
е на Фигура C.28, за да изчисли адреса на целта на клона по време на ID. Операциите, които са нови или променени, са с удебелен шрифт.
Тъй като добавянето на клон-целеви адрес се случва по време на ID, това ще се случи за всички инструкции; условието за разклоняване
(Regs[IF/ID.IR6..10] op 0) също ще бъде направено за всички инструкции. Изборът на последователния компютър или целевия клон все още се
извършва по време на IF, но сега използва стойности от етапа на ИД, които съответстват на стойностите, зададени от предишната
инструкция. Тази промяна намалява наказанието за разклоняване с 2 цикъла: един от оценяване на целта и състоянието на разклонението по-
рано и един от контролиране на избора на компютър на същия часовник, а не на следващия часовник.
Тъй като стойността на cond е зададена на 0, освен ако инструкцията в ID не е взето разклонение, процесорът трябва да декодира
инструкцията преди края на ID. Тъй като разклонението се извършва до края на ID, етапите EX, MEM и WB не се използват за разклонения.
Допълнително усложнение възниква при скокове, които имат по-дълго отместване от разклоненията. Можем да разрешим това, като използваме
допълнителен суматор, който сумира PC и по-ниски 26 бита от IR след изместване наляво с 2 бита.
Machine Translated by Google
Сега, след като разбираме как да откриваме и разрешаваме опасности, можем да се справим с тях
някои усложнения, които сме избягвали досега. Първата част на този раздел
редът се променя по неочаквани начини. Във втората част на този раздел обсъждаме някои от
Справяне с изключения
инструкциите в конвейера могат да предизвикат изключения, които могат да принудят процесора да прекъсне
проблемите и техните решения в детайли, трябва да разберем какви типове ситуации могат да възникнат
Терминологията, използвана за описание на изключителни ситуации, при които нормалният ред на изпълнение
Аномалия на FP аритметика
Хардуерни неизправности
Прекъсване на захранването
по-дълго име, като I/O прекъсване, изключение с плаваща запетая или грешка на страницата.
Заявка за I/O устройство Прекъсване на Прекъсване на устройството Изключение (Автовектор от L0 Векторизирано прекъсване
вход/изход до L7)
операционната система от на супервайзъра супервайзора за промяна на режима) (неприложена инструкция) (INT инструкция)
потребителска програма —
на Macintosh
Изпълнение на инструкции Не е приложимо Изключение (проследяване на грешки) Изключение (проследяване) Прекъсване (прихващане
за проследяване в една стъпка)
точка на прекъсване)
препълване или препълване; (изключение при целочислено препълване (грешки на копроцесора капан или математическа единица
FP капан препълване или препълване) или грешка при плаващ с плаваща запетая) изключение)
недостатъчен поток)
страницата (не в основната памет) в 370) невалидна памет) грешки на управляващия (грешка на страницата)
блок)
спецификацията)
управлението) защитата)
Използване на Прекъсване на програмата Изключение (неизправност при Изключение (незаконна Прекъсване (невалиден код
недефинирани инструкции (изключение от операция) привилегирован/запазен код на инструкция или точка на на операция)
операция) прекъсване/неприложена
инструкция)
Фигура C.30 Имената на обичайните изключения варират в четири различни архитектури. Всяко събитие на IBM
360 и 80x86 се нарича прекъсване, докато всяко събитие на 680x0 се нарича изключение. VAX разделя събитията на
прекъсвания или изключения. Прилагателните устройство, софтуер и спешно се използват с VAX прекъсвания, докато VAX
всеки път, когато програмата се изпълнява със същите данни и разпределение на паметта,
Machine Translated by Google
2. Поискано от потребителя срещу принудително – Ако задачата на потребителя го изисква директно, това е a
изключения, тъй като те са предвидими. Те обаче се третират като изключения, тъй като същите механизми
потребителя изключения винаги могат да бъдат обработени, след като инструкцията е завършена.
3. Потребителят може да се маскира спрямо потребителя, който не може да се маскира – Ако дадено събитие може да бъде маскирано или дис-
активиран от потребителска задача, той може да се маскира от потребителя. Тази маска просто контролира дали
без значение колко е кратко – или дали се разпознава между инструкциите. Изключенията, които възникват
тъй като инструкцията задейства изключението. По-трудно е да се приложат изключения, които възникват
прекъсване, това е завършващо събитие. Ако изпълнението на програмата продължи след това
категории. Трудната задача е прилагането на прекъсвания, възникващи в рамките на инструкции, при които
програма, коригирайте причината за изключението и след това възстановете състоянието на програмата, преди
инструкцията, причинила изключението, да може да бъде изпробвана отново. Този процес трябва да бъде
това свойство, почти всички процесори днес го поддържат, поне за целочислен конвейер, защото е необходимо
Вътре срещу
Целочислено аритметично препълване Синхронен Принуден Потребител може да се маскира в рамките Продължи
Аритметика с плаваща запетая Синхронно Принуден Потребител може да се маскира в рамките Продължи
преливане или недопускане
Неправилно подравнената памет осъществява синхронен достъп Принуден Потребител може да се маскира в рамките Продължи
Фигура C.31 Използват се пет категории, за да се определи какви действия са необходими за различните показани типове изключения
на фигура C.30. Изключенията, които трябва да позволяват възобновяване, са маркирани като възобновяване, въпреки че софтуерът може често
изберете да прекратите програмата. Синхронни, принудителни изключения, възникващи в рамките на инструкции, които могат да бъдат
винаги води до прекратяване; модерните операционни системи обаче използват защита на паметта за откриване на събития като
първият опит за използване на страница или първото писане на страница. По този начин процесорите трябва да могат да се възобновят след такива изключения.
Както при неконвейерните реализации, най-трудните изключения имат две свойства: (1) те се появяват
Page fault трябва да може да се рестартира и изисква намесата на друг процес, напр
като операционна система. По този начин тръбопроводът трябва да бъде безопасно затворен и държавата
наследници и да започне тяхното изпълнение по обичайния начин. Ако рестартираната инструкция е клон,
2. Докато прихващането не бъде взето, изключете всички записи за грешката инструкция и за всички
инструкции, които следват в тръбопровода; това може да стане чрез поставяне на нули в
Machine Translated by Google
Когато използваме забавени разклонения, както беше споменато в последния раздел, вече
не е възможно да пресъздадем състоянието на процесора с един компютър, тъй като инструкциите
в конвейера може да не са свързани последователно. Така че трябва да запазим и възстановим
толкова компютри, колкото е дължината на забавянето на разклонението плюс едно. Това се прави
в третата стъпка по-горе.
След като изключението бъде обработено, специални инструкции връщат процесора от
изключението чрез презареждане на компютрите и рестартиране на потока от инструкции
(използвайки инструкцията RFE в MIPS). Ако тръбопроводът може да бъде спрян, така че
инструкциите точно преди грешката да бъдат изпълнени, а тези след него да могат да бъдат
рестартирани от нулата, се казва, че тръбопроводът има точни изключения. В идеалния случай
грешката инструкция не би променила състоянието, а правилното обработване на някои
изключения изисква грешката инструкция да няма ефект. За други изключения, като изключения
с плаваща запетая, грешката инструкция на някои процесори записва своя резултат, преди
изключението да може да бъде обработено. В такива случаи хардуерът трябва да бъде подготвен
да извлече операндите източник, дори ако дестинацията е идентична с един от операндите
източник.
Тъй като операциите с плаваща запетая могат да се изпълняват в продължение на много цикли,
много вероятно е някаква друга инструкция да е написала изходните операнди (както ще видим
в следващия раздел, операциите с плаваща запетая често завършват неправилно).
За да преодолеят това, много скорошни високопроизводителни процесори въведоха два режима
на работа. Единият режим има точни изключения, а другият (бърз или производителен режим)
не. Разбира се, прецизният режим на изключение е по-бавен, тъй като позволява по-малко
припокриване между инструкциите с плаваща запетая. В някои процесори с висока
производителност, включително Alpha 21064, Power2 и MIPS R8000, прецизният режим често е
много по-бавен (>10 пъти) и следователно полезен само за отстраняване на грешки в кодове.
Изключения в MIPS
може да се появи на всеки етап. При конвейерната обработка могат да възникнат множество изключения в
същия тактов цикъл, защото има множество инструкции в изпълнение. Например, разгледайте тази
последователност от инструкции:
Тази двойка инструкции може да причини грешка на страницата с данни и аритметично изключение
сцена. Този случай може да бъде решен, като се работи само с грешката на страницата с данни и след това
независимо.
Изключения могат да възникнат неправилно; това означава, че дадена инструкция може да предизвика изключение
инструкции, LD последвано от DADD. LD може да получи грешка в страницата с данни, видяна кога
възникващи извън неконвейерния ред. Вместо това хардуерът публикува всички изключения
тръбопровод. След като индикацията за изключение е зададена във вектора на състоянието на изключение, всеки
контролният сигнал, който може да причини запис на стойност на данните, е изключен (това включва
АКО
Грешка на страницата при извличане на инструкции; неправилен достъп до паметта; памет
нарушение на защитата
документ за самоличност
EX Аритметично изключение
WB Нито един
Фигура C.32 Изключения, които могат да възникнат в MIPS тръбопровода. Изключения, повдигнати от
както записи в регистъра, така и записи в паметта). Защото един магазин може да предизвика изключение
по време на MEM хардуерът трябва да бъде подготвен да предотврати завършването на магазина, ако
предизвика изключение.
Когато дадена инструкция влезе в WB (или е на път да напусне MEM), векторът на състоянието на
които биха възникнали във времето на неконвейерен процесор - изключението, съответстващо на най-
инструкция i преди всички се виждат на i + 1. Разбира се, всяко действие, предприето в по-ранна тръба
етапи от името на инструкция i може да са невалидни, но тъй като записва в регистрационния файл
и паметта са деактивирани, нито едно състояние не може да бъде променено. Както ще видим в
В следващия подраздел ние описваме проблемите, които възникват при внедряването на изключения
Никоя MIPS инструкция няма повече от един резултат и нашият MIPS конвейер записва това
инструкциите се предават, когато достигнат края на етапа MEM (или началото на WB) и нито една
потокът от инструкции след такова неточно изключение е труден. Като алтернатива, ние
може да избегне актуализирането на състоянието, преди инструкцията да се ангажира, но това може да бъде
трудно или скъпо, тъй като може да има зависимости от актуализираното състояние: Помислете
VAX инструкция, която автоматично увеличава един и същ регистър няколко пъти. По този начин, към
ангажирана. Ако възникне изключение, процесорът използва тази възможност, за да нулира състоянието на
подобни проблеми и Раздел C.7 въвежда техники, които значително усложняват обработката на изключения.
състояние по време на изпълнение, като например операциите за копиране на низове на VAX или IBM
360 (вижте Приложение К). За да бъде възможно прекъсването и рестартирането на тези инструкции,
Различен набор от трудности възниква от странни битове на състояние, които могат да създадат
допълнителни опасности от тръбопровода или може да изисква допълнителен хардуер за запазване и възстановяване.
разклоняване, докато всички предишни инструкции не са имали възможност да зададат кода на условието.
операнд, който изисква откриване на опасност за RAW опасности с разклонения, точно както
MIPS трябва да направи в регистрите.
Последната трънлива област в тръбопровода са многоцикловите операции. Представете си, че се опитвате
Сега искаме да проучим как нашият MIPS конвейер може да бъде разширен, за да обработва
операции с плаваща запетая. Този раздел се концентрира върху основния подход и
алтернативите на дизайна, като завършва с някои измервания на производителността на MIPS
тръбопровод с плаваща запетая.
Непрактично е да се изисква всички MIPS FP операции да завършват за 1 тактов цикъл
или дори за 2. Това би означавало приемане на бавен такт или използване на огромни количества
логика в FP единиците, или и двете. Вместо това FP тръбопроводът ще позволи по-дълго забавяне
на операциите. Това е по-лесно за разбиране, ако си представим, че FP инструкциите имат същия
конвейер като целочислените инструкции, с две важни промени. Първо, цикълът EX може да се
повтори толкова пъти, колкото е необходимо за завършване на операцията - броят на повторенията
може да варира за различните операции. Второ, може да има множество FP функционални
единици. Застой ще възникне, ако инструкцията, която ще бъде издадена, ще причини или
структурна опасност за функционалната единица, която използва, или опасност за данните.
1. Основната целочислена единица, която обработва зареждания и съхранява, цели ALU операции,
и клонове
2. FP и целочислен умножител 3. FP
FP и целочислен делител
EX
EX
FP/цяло число
умножават се
EX
FP суматор
EX
FP/цяло число
разделител
предишната инструкция оставя EX. Освен това, ако дадена инструкция не може да продължи
към етапа EX, целият тръбопровод зад тази инструкция ще бъде спрян.
както показва фигура C.33 ; вместо това етапът на тръбопровода EX има определен брой часовници
единици, както и интервала на започване или интервала на повторение. Ние определяме латентността
започване или повторение е броят на циклите, които трябва да изминат между издаването
тъй като резултатите могат да се използват в следващия тактов цикъл, а зарежданията имат латентност от
1, тъй като техните резултати могат да се използват след един междинен цикъл. Тъй като повечето
брой етапи след EX, на които дадена инструкция дава резултат – например,
Machine Translated by Google
FP доп 3 1
магазини, които консумират стойността, която се съхранява 1 цикъл по-късно. Следователно, латентността към
етап, който произвежда резултата. По този начин, за примерния тръбопровод точно по-горе,
броят на етапите в FP add е четири, докато броят на етапите в FP multi-ply е седем. За да постигнат по-висока
тактова честота, дизайнерите трябва да поставят по-малко логически нива във всеки тръбен етап, което
латентност за операции.
показва как този тръбопровод може да бъде начертан чрез разширяване на Фигура C.33. Повторението
независими, ние наричаме етапите по различен начин. Етапите на тръбопровода, които отнемат множество
може да е активен. Структурата на тръбопровода може също да бъде показана с помощта на познатите диаграми
операции увеличава честотата на опасностите от RAW и произтичащите от това спирания, както ще направим
вижте по-късно в този раздел.
или ID/A1. Регистърът на тръбопровода между ID и всички други етапи може да бъде
мислени като логически отделни регистри и всъщност могат да бъдат реализирани като отделни регистри.
Тъй като само една операция може да бъде в етап на тръба в даден момент, the
EX
M1 M2 M3 M4 M5 M6 M7
A1 A2 A3 A4
FP/целочислен делител
DIV
Фигура C.35 Конвейер, който поддържа множество незавършени FP операции. FP умножителят и суматорът са пълни
тръбопроводни и имат дълбочина съответно седем и четири степени. FP делителят не е конвейерен, но изисква 24
часовникови цикли за завършване. Закъснението в инструкциите между издаването на FP операция и използването на резултата от
тази операция без предизвикване на спиране на RAW се определя от броя на циклите, прекарани в етапите на изпълнение.
Например, четвъртата инструкция след FP добавяне може да използва резултата от FP добавянето. За целочислени ALU операции,
дълбочината на конвейера за изпълнение е винаги една и следващата инструкция може да използва резултатите.
Фигура C.36 Времето на конвейера на набор от независими FP операции. Етапите в курсив показват къде са данните
необходими, докато етапите с удебелен шрифт показват къде има наличен резултат. Разширението „.D” на мнемониката с инструкции
показва операции с плаваща запетая с двойна точност (64 бита). FP зарежда и съхранява използва 64-битов път към паметта, така че
че времето за конвейер е точно като цяло число зареждане или съхраняване.
1. Тъй като разделителната единица не е напълно тръбопроводна, могат да възникнат структурни опасности.
3. Възможни са опасности от запис след запис (WAW), тъй като инструкциите вече не са
достигнете WB в ред. Обърнете внимание, че опасностите от запис след четене (WAR) не са възможни,
често срещан.
същото като това за конвейера с цели числа. Преди да опишем новите проблеми, които
по-ранен списък. Ако приемем, че FP регистрационният файл има един порт за запис, последователности от FP
файл. Само с един порт за запис на регистрационен файл, процесорът трябва да сериализира
завършване на инструкцията. Този единствен регистрационен порт представлява структурна опасност. Ние
може да увеличи броя на портовете за запис, за да разреши това, но това решение може да бъде
непривлекателно, тъй като допълнителните портове за запис ще се използват само рядко. Това е
защото максималният стабилен брой необходими портове за запис е 1. Вместо това ние
използването на порта за запис в етапа на идентификация и спиране на инструкция, преди да бъде издадена,
Инструкция 1234 5 6 7 8 9 10 11 12 13 14 15 16 17
LD F4,0(R2) IF ID EX MEM WB
MUL.D F0,F4,F6 IF ID Stall M1 M2 M3 M4 M5 M6 M7 MEM WB
ADD.D F2,F0,F8 IF Stall ID Stall Stall Stall Stall Stall Stall Stall A1 A2 A3 A4 MEM WB
SD F2,0(R2) IF Stall Stall Stall Stall Stall Stall ID EX EX Stall Stall Stall MEM
Фигура C.37 Типична поредица от FP кодове, показваща спиранията, произтичащи от опасности от RAW. По-дългият тръбопровод значително
повишава честотата на спиранията в сравнение с по-плитката целочислена тръбопровода. Всяка инструкция в тази последователност е
зависи от предишния и продължава веднага щом данните са налични, което предполага, че тръбопроводът има пълно
заобикаляне и пренасочване. SD трябва да бъде спрян за допълнителен цикъл, така че неговият MEM да не е в конфликт с ADD.D. Екстра
хардуерът може лесно да се справи с този случай.
Machine Translated by Google
Инструкция 1 2 3 4 5 6 7 8 9 10 11
Фигура C.38 Три инструкции искат да извършат обратно записване към FP регистрационния файл едновременно, както е показано в
тактов цикъл 11. Това не е най-лошият случай, тъй като по-ранно разделение в FP единицата също може да завърши на същия часовник.
Имайте предвид, че въпреки че всички MUL.D, ADD.D и LD са в етап MEM в тактов цикъл 10, само LD всъщност използва
памет, така че не съществува структурна опасност за MEM.
точно както бихме направили за всяка друга структурна опасност. Проследяване на използването на записа
порт може да се направи с регистър за смяна, който показва кога вече издадени инструкции ще
за цикъл. На всеки часовник резервационният регистър се измества с 1 бит. Това внедряване има
или етап MEM или WB. Ако изчакаме да спрем противоречивите инструкции до
искат да влязат в етап MEM или WB, ние можем да изберем да спрем някоя от инструкциите. Една
друга инструкция, която трябва да бъде спряна за опасност от RAW. Предимството на тази схема
или WB етап, където е лесно да се види. Недостатъкът е, че усложнява контрола на тръбопровода, тъй
като сега могат да възникнат задръствания от две места. Забележете, че забавянето преди
влизането в MEM ще доведе до заемане на етапа EX, A4 или M7, което вероятно ще принуди спирането
разгледайте примера на фигура C.38. Ако инструкцията LD беше издадена един цикъл
по-рано и имаше дестинация F2, тогава това би създало опасност от WAW, защото
той ще напише F2 един цикъл по-рано от ADD.D. Обърнете внимание, че само тази опасност
ADD.D беше завършен. Можем да твърдим, че за нашия тръбопровод WAW представлява опасност само
възникват, когато се изпълни безполезна инструкция, но все пак трябва да ги открием и
уверете се, че резултатът от LD се появява във F2, когато сме готови. (Както ще направим
Има два възможни начина за справяне с тази опасност от WAW. Първият подход
е да отложи издаването на инструкцията за зареждане, докато ADD.D влезе в MEM. Вторият подход е да се
издайте веднага. Тъй като тази опасност е рядка, и двете схеми ще работят добре - вие
може да избере всичко, което е по-лесно за изпълнение. И в двата случая опасността може да бъде
intervening read) ще бъде много рядко, така че можем да използваме просто решение: Ако инструкция в ID иска
може да елиминира сергии за такива опасности. Първо, нека съберем елементите за внедряване на
докато операциите на FP работят само в собствените си регистри. По този начин имаме нужда само от
вземете под внимание FP зарежда-съхранява и премества FP регистър при откриване на опасности между FP
предимство на наличието на отделни регистрационни файлове за цели числа и данни с плаваща запетая.
или задайте по-голямо и увеличаване на честотната лента, без да добавяте повече портове към нито едно от двете
разходите за случайни премествания, необходими между двата регистрови комплекта.) Ако приемем, че
тръбопроводът прави всички откривания на опасности в ID, трябва да има три проверки
заето (това е необходимо само за разделяния в този конвейер) и се уверете, че портът за запис на
2. Проверете за опасност от RAW данни— Изчакайте, докато регистрите на източника не бъдат посочени като
чакащи дестинации в регистър на тръбопровода, които няма да бъдат налични, когато това
необходими. Например, ако инструкцията в ID е FP операция с регистър източник F2, тогава F2 не може
да бъде посочен като дестинация в ID/A1, A1/A2 или A2/A3,
ID, който се изпраща до A1.) Разделянето е малко по-сложно, ако искаме да позволим на
последните няколко цикъла на разделяне да бъдат припокрити, тъй като трябва да се справим със случая
3. Проверете за опасност от WAW данни — Определете дали някоя инструкция в A1, . . . , А4,
D, M1, . .. , M7 има същата дестинация на регистъра като тази инструкция. Ако е така,
забавяне на издаването на инструкцията в ID.
изключения. Този подход е използван през 60-те и началото на 70-те години. Все още се използва
този подход в повечето процесори, създадени днес, поради функции като виртуални
изключения чрез комбинация от хардуер и софтуер. Както споменахме по-рано, някои скорошни процесори
по-бавният прецизен режим се реализира или с превключвател на режима, или чрез вмъкване на
че ефективно само една FP инструкция е активна в даден момент. Този разтвор се използва в
операции, които са били издадени по-рано. Някои процесори всъщност използват това решение,
но става скъпо, когато има разлика във времената на работа между операциите
е голям, тъй като броят на резултатите за буфериране може да стане голям. Освен това,
файл, използван в CYBER 180/990. Файлът с хронологията следи оригиналните стойности на регистрите.
Когато възникне изключение и състоянието трябва да бъде върнато по-рано от някоя инструкция, която е
регистърът може да бъде възстановен от файла с историята. Подобна техника се използва за адресиране
неточно, но да запази достатъчно информация, така че рутинните процедури за обработка на прихващания да могат
бяха в процес на подготовка и техните компютри. След това, след обработка на изключението, софтуерът
завършен.
Като се имат предвид компютрите на всички инструкции в конвейера и компютърът за връщане на изключение,
Приложение Й.
Тръбопроводът MIPS FP на Фигура C.35 на страница C-54 може да генерира и двете структурни
спира за разделящия модул и спира за опасности от RAW (може да има и опасности от WAW, но това
рядко се случва на практика). Фигура C.39 показва броя на кабините
цикли за всеки тип операция с плаваща запетая на базата на всеки екземпляр (т.е
първата лента за всеки FP бенчмарк показва броя на спиранията на резултатите от FP за всеки FP
добавяне, изваждане или преобразуване). Както можем да очакваме, циклите на спиране за всяка работна писта
да планира закъсненията както при натоварване, така и при FP, преди да планира забавяния на разклонения. Общата сума
Добавяне/изваждане/конвертиране
1.7
1.7 Сравнява
додук 3.7
Умножете
15.4
Разделям
2.0
Разделете структурно
1.6
2.0
ухо 2.5
12.4
0,0
2.3
2.5
хидро2д 3.2
чE
евокрамC Pб
не S
F
0,4
0,0
2.1
mdljdp 1.2
2.9
24.5
0,0
0,7
1,5
su2cor 1,6
18.6
0,6
Брой щандове
0,98
0,07
додук
0,08
0,08 FP резултатът спира
FP сравнете сергии
0,52
Клон/товарни щандове
0,09
ухо FP структурен
0,07
0,00
0,54
0,22
хидро2д 0,04
0,00
чE
евокрамC Pб
не S
F
0,88
mdljdp 0,10
0,03
0,00
0,61
0,02
su2cor
0,01
0,01
0,00 0,10 0,20 0,30 0,50 0,40 0,60 0,70 0,80 0,90 1,00
Брой щандове
АКО Е RF EX DF ДС TC WB
ULA
Фигура C.41 Осемстепенната конвейерна структура на R4000 използва конвейерни инструкции и кешове за данни. Тръбните
стъпала са обозначени и тяхната подробна функция е описана в текста. Вертикалните пунктирани линии представляват
границите на етапа, както и местоположението на ключалките на тръбопровода. Инструкцията всъщност е налична в края на IS, но
проверката на етикета се извършва в RF, докато регистрите се извличат. По този начин показваме паметта на инструкциите
като работеща чрез RF. Етапът TC е необходим за достъп до паметта на данните, тъй като не можем да запишем данните в регистъра,
докато не разберем дали достъпът до кеша е бил хит или не.
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 CC 10 CC 11
ULA
Инструкция 1 Памет за инструкции Рег Памет за данни Рег
ULA
Инструкция 2 Памет за инструкции Рег Памет за данни Рег
ULA
ДОБАВИ R2, R1 Памет за инструкции Рег Памет за данни Рег
ULA
Фигура C.42 Структурата на целочисления тръбопровод R4000 води до забавяне на натоварването от 2 цикъла. Възможно е забавяне от 2 цикъла
тъй като стойността на данните е налична в края на DS и може да бъде заобиколена. Ако проверката на етикета в TC показва пропуск,
тръбопроводът се архивира за цикъл, когато са налични правилните данни.
стартирайте на всеки часовник. Всъщност тръбопроводът използва данните преди удара на кеша
IF— Първата половина на извличане на инструкции; Изборът на компютър всъщност се случва тук,
EX— Изпълнение, което включва изчисление на ефективен адрес, операция на ALU и изчисление на целта на
тръбопроводът с по-голяма латентност увеличава както натоварването, така и забавянето на разклонението. Фигура C.42
показва, че закъсненията при зареждане са 2 цикъла, тъй като стойността на данните е налична в края на
Machine Translated by Google
Номер на часовника
Номер на инструкция 1 2 3 4 5 6 7 8 9
LD R1,... АКО Е RF EX DF ДС TC WB
Фигура C.43 Инструкция за зареждане, последвана от незабавно използване, води до спиране на 2 цикъла. Нормални препращащи пътища
може да се използва след 2 цикъла, така че DADD и DSUB получават стойността чрез препращане след спирането. Инструкцията OR получава
стойността от регистърния файл. Тъй като двете инструкции след натоварването могат да бъдат независими и следователно да не блокират,
байпасът може да бъде към инструкции, които са 3 или 4 цикъла след натоварването.
CC 1 CC 2 CC 3 CC 4 CC 5 CC 6 CC 7 CC 8 CC 9 CC 10 CC 11
Фигура C.44 Основното забавяне на разклонението е 3 цикъла, тъй като оценката на състоянието се извършва по време на EX.
ДС. Фигура C.43 показва съкратения график на тръбопровода при незабавно използване
следва натоварване. Показва, че се изисква препращане за резултата от натоварването
инструкция до дестинация, която е 3 или 4 цикъла по-късно.
Фигура C.44 показва, че основното забавяне на разклонението е 3 цикъла, тъй като разклонението
условие се изчислява по време на EX. Архитектурата на MIPS има един цикъл
забавен клон. R4000 използва прогнозирана-неприета стратегия за оставащите 2 цикъла от забавянето
на разклонението. Както показва фигура C.45 , невзетите клонове са
просто клонове със закъснение от 1 цикъл, докато взетите клонове имат забавяне от 1 цикъл
слот, последван от 2 цикъла на празен ход. Наборът от инструкции осигурява разклоняване
инструкция, която описахме по-рано и която помага при попълването на клона
Machine Translated by Google
Номер на часовника
Номер на инструкция 1 2 3 4 5 6 7 8 9
Номер на часовника
Номер на инструкция 1 2 3 4 5 6 7 8 9
Фигура C.45 Взет клон, показан в горната част на фигурата, има слот за забавяне от 1 цикъл, последван от 2 цикъла
спиране, докато невзето разклонение, показано в долната част, има просто слот за забавяне от 1 цикъл. Инструкцията за разклоняване
може да бъде обикновено забавено разклоняване или вероятно разклоняване, което отменя ефекта на инструкцията в слота за забавяне
ако клонът не е взет.
слот за забавяне. Блокировките на тръбопроводите налагат както наказанието за спиране на 2-цикълния клон на a
взето разклонение и всякаква опасност от застой на данни, която възниква от използването на резултат от зареждане.
Модулът R4000 с плаваща запетая се състои от три функционални блока: плаваща запетая
делител, умножител с плаваща запетая и суматор с плаваща запетая. Логиката на суматора е
използва се на последната стъпка на умножение или деление. FP операциите с двойна точност могат
вземете от 2 цикъла (за отрицание) до 112 цикъла (за квадратен корен). В допълнение,
различните единици имат различни скорости на започване. Функционалната единица FP може да бъде
смята се, че има осем различни етапа, изброени на фигура C.46; тези етапи са
комбинирани в различни поръчки за изпълнение на различни FP операции.
Има едно копие на всеки от тези етапи, както и различни инструкции
използвайте етап нула или повече пъти и в различен ред. Фигура C.47 показва
Machine Translated by Google
U Разопаковайте номерата на FP
Добавяне, изваждане 4 3 U, S + A, A + R, R + S
Умножете 8 4 U, E + M, M, M, M, N, N + A, R
Разделям 36 35 U, A, R, D28, D + A, D + R, D + A, D + R, A, R
Отхвърляне 2 1 НАС
FP сравнение 3 2 U, A, R
Фигура C.47 Закъсненията и интервалите на започване за FP операциите зависят от етапите на FP единицата, които
дадената операция трябва да използва. Стойностите на латентността предполагат, че инструкцията местоназначение е FP операция;
закъсненията са с 1 цикъл по-малко, когато дестинацията е магазин. Етапите на тръбата са показани в реда, в който са използвани
всяка операция. Нотацията S + A показва тактов цикъл, в който се използват както етапите S, така и A. Нотацията D28
показва, че етапът D е използван 28 пъти подред.
с двойна точност.
последователността е такава, че възниква конфликт за споделен етап на тръбопровода, след това спиране
ще са необходими. Фигури C.48, C.49, C.50 и C.51 показват четири общи възможни
дали тази втора инструкция ще бъде издадена или ще спре за всяка позиция. Разбира се,
Цикъл на часовника
Операция Проблем/застой 0 1 2 3 4 5 6 7 8 9 10 11 12
Фигура C.48 FP умножение, издадено на часовник 0, е последвано от единично FP добавяне, издадено между часовници 1 и 7 .
втората колона показва дали инструкция от посочения тип спира, когато е издадена n цикъла по-късно, където n е
номерът на тактовия цикъл, в който се появява етапът U на втората инструкция. Етапът или етапите, които причиняват спиране
са в удебелен шрифт. Имайте предвид, че тази таблица се занимава само с взаимодействието между умножението и едно добавяне, издадено между
часовници 1 и 7. В този случай добавянето ще спре, ако бъде издадено 4 или 5 цикъла след умножението; в противен случай издава без
забавяне. Забележете, че добавянето ще бъде спряно за 2 цикъла, ако издаде в цикъл 4, тъй като при следващия тактов цикъл все още ще
бъде в конфликт с умножението; ако обаче добавите проблеми в цикъл 5, той ще спре само за 1 тактов цикъл, тъй като това ще елиминира
конфликтите.
Цикъл на часовника
Операция Издаване/застой 01 2 3 4 5 6 7 8 9 10 11 12
Добавете Проблем US + AA + RR + S
Фигура C.49 Издаване на умножение след добавяне винаги може да продължи без спиране, тъй като по-кратката инструкция
изчиства споделените етапи на конвейера, преди по-дългата инструкция да ги достигне.
когато работи върху структурата на тръбопровода R4000. Има четири основни причини за
1. Зареждането спира – Закъснения, произтичащи от използването на резултат от натоварване 1 или 2 цикъла след
натоварването
2. Закъснения на клонове — Закъснения с два цикъла на всяко взето клонене плюс незапълнени или отменени слотове
за забавяне на клонове
Цикъл на часовника
Операция Проблем/срив 25 26 27 28 29 30 31 32 33 34 35 36
Проблем US + AA + RR + S
Сергия US + A A + RR + S
Сергия U S + AA + R R + S
Сергия U S + A A + RR + S
Сергия U S + AA + R R + S
Сергия U S + A A + RR + S
Сергия U S + AA + R R + S
Проблем US + AA + R
Проблем САЩ + А
Проблем U
Фигура C.50 Разделяне на FP може да доведе до забавяне на добавяне, което започва близо до края на разделянето. Разделението започва от
цикъл 0 и завършва в цикъл 35; показани са последните 10 цикъла на разделението. Тъй като разделението силно използва
хардуер за закръгляване, необходим за добавянето, той спира добавяне, което започва в някой от циклите 28 до 33. Забележете, че
стартирането на добавяне в цикъл 28 ще бъде спряно до цикъл 36. Ако добавянето започне веднага след разделянето, няма конфликт, тъй като доп
може да завърши преди разделянето да се нуждае от споделените етапи, точно както видяхме на фигура C.49 за умножение и събиране. Като
в по-ранната фигура този пример предполага точно едно добавяне, което достига U етап между тактовите цикли 26 и 35.
Цикъл на часовника
Операция Издаване/застой 0 1 2 3 4 5 6 7 8 9 10 11 12
Добавете Проблем US + A A + RR + S
Проблем UA RDDDDDD D д
Проблем U ARDDDDD D д
Фигура C.51 Добавяне с двойна точност е последвано от разделяне с двойна точност. Ако разделянето започне 1 цикъл след
add, разделянето спира, но след това няма конфликт.
3.00
2.50
2.00
1.50
Pат
доворпобъIр Cн
1,00 База
Заредете сергии
Клонови сергии
0,50
FP резултатът спира
FP структурни сергии
0,00 ли
gcc ухо
додук mdljdp su2cor
хидро2д
компресирамeqntott еспресо
SPEC92 бенчмарк
Фигура C.52 CPI на тръбопровода за 10 от референтните показатели SPEC92, като се приема перфектен
кеш памет. CPI на тръбопровода варира от 1,2 до 2,8. Най-левите пет програми са цели числа
програми и забавянията на клоновете са основният фактор за CPI за тях. Най-десните пет
програмите са FP, а сергиите с FP резултати са основният фактор за тях. Фигура C.53
показва числата, използвани за построяване на този график.
Бенчмарк CPI на тръбопровод Заредете сергии Клонови сергии FP резултатни сергии FP структурни сергии
Фигура C.53 Показани са общият CPI на тръбопровода и приносът на четирите основни източника на забавяне. Основният
сътрудниците са FP резултатни сергии (както за клонове, така и за FP входове) и клонови сергии, с натоварвания и FP структурни
сергии добавяне на по-малко.
Machine Translated by Google
Простите конвейери извличат инструкция и я издават, освен ако няма зависимост от данни между
инструкция, която вече е в конвейера, и извлечената инструкция
които не могат да бъдат скрити чрез заобикаляне или препращане. Логиката на препращане намалява
ефективната латентност на тръбопровода, така че определени зависимости да не водят до опасности.
Ако има неизбежна опасност, тогава хардуерът за откриване на опасност спира
проблем, което означава, че ако дадена инструкция е спряна в конвейера, по-късните инструкции не могат
тях, конвейерът ще спре, дори ако има по-късни инструкции, които са независими и няма да блокират.
В MIPS тръбопровода, разработен по-рано, имаше както структурни опасности, така и опасности за данни
проверено по време на декодиране на инструкция (ID): Когато дадена инструкция може да се изпълни
правилно, тя е издадена от ID. За да позволите на дадена инструкция да започне изпълнение веднага щом
искат инструкциите да започнат да се изпълняват веднага щом техните операнди с данни станат налични.
По този начин тръбопроводът ще извърши извънредно изпълнение, което предполага извънредно завършване.
2. Четене на операнди— Изчакайте , докато няма опасност от данни, след което прочетете операндите.
Етапът IF продължава етапа на издаване, а етапът EX следва етапа на четене на опери и етапа, точно
трябва да се прави разлика кога дадена инструкция започва да се изпълнява и кога завършва
екзекуция; между двете времена инструкцията е в изпълнение. Това позволява
в ред (в ред издание); те обаче могат да бъдат блокирани или да се заобикалят взаимно в
втори етап (четене на операнди) и по този начин влиза в изпълнение извън ред. Scoreboard-ing е техника
Преди да видим как таблото може да се използва в MIPS тръбопровода, това е така
важно е да се отбележи, че опасностите от ВОЙНА, които не съществуват в конвейерите с плаваща
запетая или цели числа на MIPS, могат да възникнат, когато инструкциите се изпълняват неправилно. За
например, разгледайте следната кодова последователност:
Има антизависимост между ADD.D и SUB.D: Ако тръбопроводът изпълни SUB.D преди ADD.D, той ще
наруши антизависимостта, давайки
неправилно изпълнение. По същия начин, за да се избегне нарушаване на изходните зависимости,
опасностите от WAW (напр., както би се случило, ако дестинацията на SUB.D беше F10) също трябва да бъдат
открити. Както ще видим, и двете тези опасности се избягват в таблото чрез забавяне на по-късната
инструкция, включена в антизависимостта.
Целта на таблото е да поддържа скорост на изпълнение на една инструкция
на тактов цикъл (когато няма структурни опасности) чрез изпълнение на инструкция
възможно най-рано. По този начин, когато следващата инструкция за изпълнение е спряна, др
инструкциите могат да бъдат издадени и изпълнени, ако не зависят от никакви активни или
блокирана инструкция. Таблото с резултати поема пълна отговорност за издаване на инструкции
и изпълнение, включително всички откривания на опасности. Възползвайки се от извън ред
изпълнението изисква множество инструкции да бъдат в техния EX етап едновременно.
Това може да се постигне с множество функционални единици, с конвейерна функционалност
единици, или и с двете. Тъй като тези две възможности— тръбопроводни функционални единици и
множество функционални единици - по същество са еквивалентни за целите на тръбопровода
контрол, ще приемем, че процесорът има множество функционални единици.
CDC 6600 имаше 16 отделни функционални единици, включително 4 с плаваща запетая
единици, 5 единици за препратки към паметта и 7 единици за операции с цели числа. На
процесор за MIPS архитектурата, таблата имат смисъл предимно на
единица с плаваща запетая, тъй като латентността на другите функционални единици е много малка.
Да приемем, че има два умножителя, един суматор, една единица за деление и една единица за цяло
число за всички препратки към паметта, разклонения и операции с цели числа.
Въпреки че този пример е по-прост от CDC 6600, той е достатъчно мощен
да демонстрирате принципите, без да имате много подробности или да се нуждаете от много
дълги примери. Тъй като и MIPS, и CDC 6600 са архитектури за съхранение на натоварване,
техниките са почти идентични за двата процесора. Фигура C.54
показва как изглежда процесора.
Всяка инструкция преминава през таблото, където се записват данните
изграждат се зависимости; тази стъпка съответства на проблем с инструкция и замества
част от стъпката на ID в MIPS тръбопровода. След това таблото определя кога
инструкцията може да прочете своите операнди и да започне изпълнението. Ако таблото с резултати
реши, че инструкцията не може да се изпълни веднага, той следи всяка промяна в
хардуера и решава кога инструкцията може да се изпълни. Таблото с резултати
също контролира кога една инструкция може да запише своя резултат в регистъра на местоназначението.
По този начин цялото откриване и разрешаване на опасности е централизирано в таблото с резултати.
FP мулти
FP мулти
FP разделение
FP доп
Табло с резултати
Контрол/ Контрол/
състояние състояние
регистрирайте, ние гарантираме, че не могат да съществуват опасности от WAW. Ако структурна или
Съществува опасност от WAW, след което издаването на инструкции спира и няма да се издават
допълнителни инструкции, докато тези опасности не бъдат изчистени. Когато етапът на проблема спре, то
предизвиква запълване на буфера между извличане на инструкции и издаване; ако буферът е a
тръбопровод.
екзекуция. Тази стъпка замества EX стъпката в MIPS конвейера и отнема няколко цикъла в MIPS FP
конвейера.
Опасност от ВОЙНА съществува, ако има кодова последователност като нашия по-ранен пример
с ADD.D и SUB.D, които и двете използват F8. В този пример имахме кода
ADD.D има операнд източник F8, който е същия регистър като дестинацията
на ПОДС.Д. Но ADD.D всъщност зависи от по-ранна инструкция. Таблото с резултати все още ще спира
Ако тази опасност от ВОЙНА не съществува или когато тя изчезне, таблото с резултати показва
На пръв поглед може да изглежда, че таблото ще има трудности при разделянето на опасностите RAW
и WAR.
Machine Translated by Google
Тъй като операндите за дадена инструкция се четат само когато и двата операнда са
налични в регистрационния файл, това табло не се възползва от препращането. Вместо това
регистрите се четат само когато и двата са налични. Това не е така
голяма глоба, както може би си мислите първоначално. За разлика от нашия прост тръбопровод от по-рано,
инструкциите ще запишат резултата си в регистрационния файл веднага щом завършат
изпълнение (приемайки, че няма WAR опасности), вместо да чака статично присвоен
слот за запис, който може да е на няколко цикъла разстояние. Ефектът е намалена латентност на конвейера
и ползите от препращането. Все още има един допълнителен цикъл на латентност, който
възниква, тъй като етапите на резултат от запис и операнд за четене не могат да се припокриват. Бихме
LD F6,34(R2)
LD F2,45(R3)
МУЛ.Д F0, F2, F4
ПОДП.Д F8, F6, F2
DIV.D F10, F0, F6
ДОБ.Д F6, F8, F2
Rj, Rk— Флагове, показващи кога Fj, Fk са готови и все още не са прочетени. Задайте Не
след прочитане на операндите.
Machine Translated by Google
Състояние на инструкцията
LD F6,34(R2)
LD F2,45(R3)
MUL.D F0,F2,F4
SUB.D F8,F6,F2
DIV.D F10,F0,F6
ДОБАВЯНЕ F6,F8,F2
Име Зает оп Fi Fj Fk Qj Qk Rj Rk
Мулт2 Не
Фигура C.55 Компоненти на таблото с резултати. Всяка инструкция, която е издадена или предстои да бъде издадена, има запис в
таблицата за състоянието на инструкциите. Има един запис в таблицата за състоянието на функционалната единица за всяка функционална единица. След като един
проблеми с инструкции, записът на неговите операнди се съхранява в таблицата със състоянието на функционалните единици. И накрая, регистрирайте таблицата с резултати
показва коя единица ще произведе всеки чакащ резултат; броят на записите е равен на броя на регистрите. The
таблицата със състоянието на инструкциите казва, че: (1) първият LD е завършил и е написал резултата си и (2) вторият LD е
завърши изпълнението, но все още не е написал резултата си. Всички MUL.D, SUB.D и DIV.D са издадени, но са в застой,
чакат своите операнди. Състоянието на функционалната единица казва, че първата единица за умножение чака целочислената единица,
единицата за добавяне чака целочислената единица, а единицата за деление чака първата единица за умножение.
Инструкцията ADD.D е спряна поради структурна опасност; ще се изчисти, когато SUB.D завърши. Ако запис в една от тези
таблици на таблото с резултати не се използва, той остава празен. Например полето Rk не се използва при натоварване, а единицата Mult2 е
неизползвани, следователно техните полета нямат значение. Освен това, след като операндът бъде прочетен, полетата Rj и Rk се настройват на No.
Фигура C.58 показва защо тази последна стъпка е решаваща.
3. Статус на резултата от регистъра — Показва коя функционална единица ще записва всеки регистър,
ако активна инструкция има регистъра като местоназначение. Това поле е зададено на
празно, когато няма чакащи инструкции, които ще запишат този регистър.
Сега нека да разгледаме как кодовата последователност, започнала на фигура C.55, продължава
да се изпълнява. След това ще можем да разгледаме подробно условията, които
табло, използвано за контрол на изпълнението.
Machine Translated by Google
Фигура C.55 и започвайки с точката, посочена от статуса на инструкцията на Фигура C.55, покажете как
от MUL.D към DIV.D и от SUB.D към ADD.D. Има опасност от WAR данни
съответно.
Сега можем да видим как таблото работи в детайли, като разгледаме какво трябва
записва информация за спецификатора на операнд, като например номера на регистрите. Например ние
трябва да записва изходните регистри, когато се издаде инструкция. Защото ние се отнасяме
CDC 6600 имаше приблизително толкова логика, колкото една от функционалните единици, което е
изненадващо ниско. Основният разход беше в големия брой автобуси - около четири пъти
толкова, колкото биха били необходими, ако процесорът изпълнява само инструкции в ред (или
часовник (така че цената на повече автобуси трябва да бъде платена така или иначе) и от идеи като
от истинските зависимости на данните на програмата. При елиминиране на сергии има табло с резултати
1. Степента на наличен паралелизъм между инструкциите – това определя дали могат да бъдат намерени
инструкцията зависи от нейния предшественик, нито една динамична схема за планиране не може
един и същ основен блок (както беше вярно в 6600), това ограничение вероятно ще
Състояние на инструкцията
Напишете
LD F6,34(R2)
LD F2,45(R3)
MUL.D F0,F2,F4
SUB.D F8,F6,F2
DIV.D F10,F0,F6
ADD.D F6,F8,F2
Име Зает оп Fi Fj Fk Qj Qk Rj Rk
Цяло число Не
Множество1 да Мулт F0 F2 F4 Не не
Мулт2 Не
Добавете да Добавете F6 F8 F2 Не не
Разделям да див F10 F0 F6 Множество1 Не Да
Фигура C.56 Таблици с табло точно преди MUL.D да започне да записва резултат. DIV.D все още не е прочел нито едно от тях
операнди, тъй като има зависимост от резултата от умножението. ADD.D е прочел операндите си и е в процес на изпълнение,
въпреки че е бил принуден да изчака, докато SUB.D завърши, за да получи функционалната единица. ADD.D не може да продължи да пише
резултат поради WAR опасността на F6, която се използва от DIV.D. Полетата Q са уместни само когато функционален
единица чака друга единица.
2. Броят на записите в таблото – Това определя колко далече напред може да търси
тръбопроводът за независими инструкции. Наборът от прегледани инструкции
като кандидати за потенциално изпълнение се нарича прозорец. Размерът на
таблото определя размера на прозореца. В този раздел приемаме a
прозорецът не се простира отвъд клон, така че прозорецът (и таблото с резултати)
винаги съдържа праволинеен код от един основен блок. Глава 3
показва как прозорецът може да бъде разширен отвъд клон.
Състояние на инструкцията
Напишете
LD F6,34(R2)d
LD F2,45(R3)
MUL.D F0,F2,F4
SUB.D F8,F6,F2
DIV.D F10,F0,F6
ДОБАВЯНЕ F6,F8,F2
Име Зает оп Fi Fj Fk Qj Qk Rj Rk
Цяло число Не
Множество1 да Мулт F0 F2 F4 Не Не
Мулт2 Не
Добавете да Добавете F6 F8 F2 Не Не
Разделям да див F10 F0 F6 Не да
Фигура C.57 Таблици с табло точно преди DIV.D да запише резултата. ADD.D успя да завърши веднага щом
DIV.D премина през операнди за четене и получи копие на F6. Остава да завърши само DIV.D.
Проблем Не съм зает [FU] и няма резултат [D] Зает [FU] да; Op[FU] op; Fi[FU] D;
Fj[FU] S1; Fk[FU] S2;
Qj Резултат [S1]; Qk Резултат [S2];
Rj не Qj; Rk не Qk; Резултат[D] FU;
Напишете резултата f((Fj[f ] ¦ Fi[FU] или Rj[f ] = No) & f(ако Qj[f ]=FU тогава Rj[f ] Да);
(Fk[f ] ¦ Fi[FU] или Rk[f ] = Не)) f(ако Qk[f ]=FU тогава Rk[f ] Да);
Резултат[Fi[FU]] 0; Зает [FU] Не
Фигура C.58 Необходими проверки и счетоводни действия за всяка стъпка от изпълнението на инструкцията. FU означава
функционална единица, използвана от инструкцията, D е името на регистъра местоназначение, S1 и S2 са имената на регистрите източник,
и op е операцията, която трябва да се извърши. За достъп до записа в таблото с име Fj за функционална единица FU използваме нотацията
Fj[FU]. Резултат [D] е името на функционалната единица, която ще записва регистър D. Тестът на случай на резултат от запис предотвратява
записа, когато има опасност от WAR, която съществува, ако друга инструкция има дестинацията на тази инструкция
(Fi[FU]) като източник (Fj[f ] или Fk[f ]) и ако някаква друга инструкция е записала регистъра (Rj = Да или Rk = Да). Променливата f се
използва за всяка функционална единица.
На пръв поглед опасностите от WAW изглеждат така, сякаш никога не трябва да се появяват в код
последователност, тъй като нито един компилатор никога не би генерирал два записа в
един и същ регистър без намесено четене, но те могат да възникнат, когато последователността
е неочаквана. Например, първият запис може да бъде в слота за забавяне на взето разклонение
когато планировчикът смяташе, че клонът няма да бъде взет. Ето кода
последователност, която може да причини това:
BNEZ R1,foo
DIV.D F0,F2,F4; преместен в слота за забавяне
;от пропадане
.....
.....
Фу: LD F0,qrs
Ако клонът бъде взет, тогава преди DIV.D да може да завърши, LD ще достигне
WB, причинявайки опасност от WAW. Хардуерът трябва да открие това и може да спре
издаване на LD Друг начин това може да се случи е, ако второто записване е в капан
рутина. Това се случва, когато инструкция, която прихваща и записва резултати,
продължава и завършва след инструкция, която записва същия регистър в прихващането
манипулатор. Хардуерът трябва да открие и предотврати и това.
Клопка Обширната конвейерна обработка може да повлияе на други аспекти на дизайна, което води до общо по-лошо състояние
цена-производителност.
Machine Translated by Google
Най-добрият пример за това явление идва от две реализации на VAX, 8600 и 8700. Когато
8600 беше доставен първоначално, той имаше време на цикъл от 80 ns. Впоследствие беше
представена преработена версия, наречена 8650, с часовник от 55 ns. 8700 има много по-
опростен тръбопровод, който работи на ниво микроинструкция, което води до по-малък CPU с
по-бърз тактов цикъл от 45 ns. Общият резултат е, че 8650 има предимство на CPI от около 20%,
но 8700 има тактова честота, която е с около 20% по-бърза. Така 8700 постига същата
производителност с много по-малко хардуер.
че клонът се обработва, като се предскаже, че е взет. Ако всички препратки към паметта
отнемат 1 цикъл, колко цикъла са необходими за изпълнение на този цикъл?
f. [10] <C.2> Да приемем, че в 5-степенния конвейер най-дългият етап изисква 0,8 ns, а забавянето
на регистъра на конвейера е 0,1 ns. Какво е времето на тактовия цикъл на 5-степенния
тръбопровод? Ако 10-степенният тръбопровод разделя всички етапи наполовина, какво е
времето на цикъла на 10-степенната машина?
ж. [15] <C.2> Като използвате вашите отговори от части (d) и (e), определете циклите на
инструкция (CPI) за цикъла на 5-степенна конвейерна линия и 10-степенна конвейерна линия.
Уверете се, че броите само от момента, в който първата инструкция достигне етапа на
обратно записване до края. Не отчитайте стартирането на първата инструкция.
Като използвате времето на тактовия цикъл, изчислено в част (f), изчислете средното
време за изпълнение на инструкции за всяка машина.
C.2 [15/15] <C.2> Да предположим, че честотите на разклоненията (като проценти от всички инструкции)
са както следва:
Скокове и плащания 1%
Взети условни клонове 60% са взети
b. [15] <C.2> Сега приемете процесор с висока производителност, в който имаме конвейер с
дълбочина 15, където разклонението се разрешава в края на петия цикъл за безусловни
разклонения и в края на десетия цикъл за условни разклонения . Ако приемем, че винаги
може да се направи само първият етап на тръбопровода, независимо от това дали
разклонението върви и игнорирайки други спирания на тръбопровода, колко по-бърза ще
бъде машината без опасност от разклоняване?
C.3 [5/15/10/10] <C.2> Започваме с компютър, реализиран в изпълнение с един цикъл. Когато етапите са
разделени по функционалност, етапите не изискват абсолютно същото време. Оригиналната
машина имаше часовников цикъл от 7 ns. След като етапите бяха разделени, измерените
времена бяха IF, 1 ns; ID, 1,5 ns; EX, 1 ns; MEM, 2 ns; и WB, 1,5 ns. Закъснението на регистъра на
конвейера е 0,1 ns. а. [5] <C.2> Какъв е часовниковият цикъл на 5-степенната конвейерна
машина? b. [15] <C.2> Ако има забавяне на всеки 4 инструкции, какъв е CPI на новата
машина?
д. [10] <C.2> Ако конвейерната машина имаше безкраен брой етапи, какво
дали неговото ускоряване ще бъде над едноцикловата машина?
Machine Translated by Google
сравнение и след това действително не доставя целевия компютър на клона на етапа IF, докато
тактовият цикъл, в който инструкцията за разклоняване достига етапа MEM. контрол
опасните застоявания могат да бъдат намалени чрез разрешаване на инструкции за разклоняване в ID, но
подобряването на производителността в едно отношение може да намали производителността при други обстоятелства.
или
Първият етап на ALU се използва за изчисляване на ефективен адрес за препратки към паметта и
разклонения. Вторият ALU цикъл се използва за операции и клонове
сравнение. RF е както цикъл на декодиране, така и цикъл на регистриране. Да приемем, че когато a
четене на регистър и запис на регистър на същия регистър се случват в същия часовник
данните за запис се препращат.
а. [12] <C.2> Намерете броя на необходимите суматори, като броите всеки суматор или
инкрементатор; покажете комбинация от инструкции и етапи на тръбата, които оправдават това
отговор. Трябва да дадете само една комбинация, която максимизира броя на суматора.
b. [13] <C.2> Намерете броя на портовете за четене и запис на регистър и четене на паметта
и необходими портове за запис. Покажете, че отговорът ви е правилен, като покажете
комбинация от инструкции и етап на тръбопровод, посочващ инструкцията и
брой портове за четене и портове за запис, необходими за тази инструкция.
Machine Translated by Google
° С. [20] <C.3> Определете всички препращания на данни за всички ALU, които ще са необходими.
Да приемем, че има отделни ALU за тръбните стъпала ALU1 и ALU2.
Въведете цялото пренасочване между ALU, необходимо за избягване или намаляване на застоя.
Покажете връзката между двете инструкции, включени в препращането, като използвате
формата на таблицата на Фигура C.26 , но пренебрегвайки последните две колони.
Внимавайте да обмислите препращане през междинна инструкция - например,
същия формат като на фигура C.26, като отново игнорирате последните две колони.
Не забравяйте да препращате към и от препратките към паметта.
д. [15] <C.3> Покажете всички оставащи опасности, които включват поне една единица, различна от
ALU, като единица източник или дестинация. Използвайте таблица като тази, показана на
f. [15] <C.2> Покажете всички контролни опасности чрез пример и посочете дължината на срива.
Използвайте формат като този, показан на Фигура C.11, като етикетирате всеки пример.
C.6 [12/13/13/15/15] <C.1, C.2, C.3> Сега ще добавим поддръжка за ALU операции с регистър-памет към
класическия петстепенен RISC конвейер. За да се компенсира това нарастване на сложността,
цялото адресиране на паметта ще бъде ограничено до индиректен регистър (т.е. всички адреси
са просто стойност, съхранявана в регистър; към стойността на регистъра не може да се добавя
отместване или изместване). Например, инструкцията регистър-памет ADD R4, R5, (R1) означава
добавяне на съдържанието на регистър R5 към съдържанието на местоположението на паметта с
адрес, равен на стойността в регистър R1, и поставяне на сумата в регистър R4 . Операциите
регистър-регистр ALU са непроменени. Следните елементи се отнасят за целочисления RISC
конвейер: a. [12] <C.1> Избройте
пренареден ред на петте традиционни етапа на RISC тръбопровода, които ще поддържат операции
регистър-памет, реализирани изключително чрез непряко адресиране на регистъра.
b. [13] <C.2, C.3> Опишете какви нови пътеки за пренасочване са необходими за тръбопровода със
задна позиция, като посочите източника, дестинацията и информацията, прехвърлена по
всеки необходим нов път.
° С. [13] <C.2, C.3> За пренаредените етапи на RISC тръбопровода какви нови опасности за данните
се създават от този режим на адресиране? Дайте последователност от инструкции,
илюстрираща всяка нова опасност.
д. [15] <C.3> Избройте всички начини, по които RISC конвейерът с ALU операции с регистър-памет
може да има различен брой инструкции за дадена програма от оригиналния RISC конвейер.
Дайте двойка специфични последователности от инструкции, една за оригиналния конвейер
и една за пренаредения конвейер, за да илюстрирате всеки начин.
Machine Translated by Google
д. [15] <C.3> Да приемем, че всички инструкции отнемат 1 тактов цикъл на етап. Избройте всички
от начините, по които RISC регистър-памет може да има различен CPI за a
дадена програма в сравнение с оригиналния RISC конвейер.
b. [10] <C.3> Ако наказанието за неправилно предвиждане на клона за първата машина е 2 цикъла
но втората машина е 5 цикъла, какви са CPI на всяка, като се вземе предвид
отчетете сергиите поради грешни прогнози на клона?
C.8 [15] <C.5> Създайте таблица, показваща логиката на пренасочване за цяло число R4000
тръбопровод, използвайки същия формат като този, показан на фигура C.26. Включете само
MIPS инструкции, които разгледахме на Фигура C.26.
C.9 [15] <C.5> Създайте таблица, показваща целочисленото откриване на опасност R4000, използвайки
същият формат като показания на фигура C.25. Включете само инструкциите на MIPS
разгледани на фигура C.26.
C.10 [25] <C.5> Да предположим, че MIPS има само един набор от регистри. Конструирайте препращането
таблица за FP и целочислени инструкции, използвайки формата от Фигура C.26. Игнорирайте
FP и цели числа.
C.11 [15] <C.5> Изградете таблица като тази, показана на фигура C.25 , за да проверите за WAW
спира в MIPS FP тръбопровода от Фигура C.35. Не вземайте под внимание FP разделения.
C.12 [20/22/22] <C.4, C.6> В това упражнение ще разгледаме как общ вектор
цикъл работи на статично и динамично планирани версии на MIPS тръбопровода.
Цикълът е така нареченият DAXPY цикъл (разгледан подробно в Приложение G)
и централната операция при елиминиране на Гаус. Цикълът изпълнява векторната операция Y =
a * X + Y за вектор с дължина 100. Ето MIPS кода за
цикълът:
забавяне. Ще използвате (само) латентностите на FP, показани на Фигура C.34, но приемете това
изчакване на резултат от друга функционална единица може да премине през операнди за четене на
в същото време се изписва резултатът. Да предположим също, че една инструкция при завършване на WR
ще позволи на текущо активна инструкция, която чака на същата функционална единица да бъде издадена
завършва WR.
напиши резултата. Приемете този проблем и всеки операнд за четене отнема цикъл. Предположете
че има една целочислена функционална единица, която отнема само едно изпълнение
° С. [22] <C.6> Използвайки MIPS кода за DAXPY по-горе, приемете табло с резултати
взето и взе 1 цикъл. Колко тактови цикъла отнема всяка итерация на цикъл?
C.13 [25] <C.8> Изключително важно е таблото с резултати да може да разграничава RAW и WAR
опасности, тъй като опасността от ВОЙНА изисква забавяне на инструкцията, изпълняваща писането
Закъснение в тактови
Инструкцията дава резултат Инструкция за използване на резултата цикли
FP умножение FP ALU оп 6
FP доп FP ALU оп 4
FP умножение FP магазин 5
FP доп FP магазин 3
DSUB.D зависи от MUL.D (опасност RAW), поради което MUL.D трябва да бъде позволено да завърши
преди DSUB.D. Ако MUL.D е бил спрян за DSUB.D поради невъзможност да се прави разлика между
RAW и WAR опасности, процесорът ще блокира. Тази последователност съдържа опасност от ВОЙНА
между ADD.D и DSUB.D и ADD.D не може да бъде разрешено да завърши, докато DSUB.D не започне
изпълнение. Трудността се състои в разграничаването на опасността от RAW между MUL.D и
DSUB.D и опасността от WAR между DSUB.D и ADD.D. За да разберете точно защо сценарият с три
инструкции е важен, проследете обработката на всяка инструкция етап по етап чрез проблем,
четене на операнди, изпълнение и запис на резултата. Да приемем, че всеки етап от таблото,
различен от изпълнение, отнема 1 тактов цикъл. Да приемем, че инструкцията MUL.D изисква 3
тактови цикъла за изпълнение и че инструкциите DSUB.D и ADD.D изискват по 1 цикъл за
изпълнение. И накрая, приемете, че процесорът има две функционални единици за умножение и
две функционални единици за добавяне. Представете следата по следния начин.
1. Направете таблица със заглавията на колоните Instruction, Issue, Read Operands, Execute, Write
Result и Comment. В първата колона избройте инструкциите в програмен ред (бъдете
щедри с интервал между инструкциите; по-големите клетки на таблицата ще съдържат по-
добре резултатите от вашия анализ). Започнете таблицата, като напишете 1 в колоната
Издаване на реда с инструкции на MUL.D, за да покажете, че MUL.D завършва етапа на
издаване в тактовия цикъл 1. Сега попълнете колоните на етапа на таблицата през цикъла,
в който таблото първо спира инструкция.
C.14 [10/10/10] <C.5> За този проблем ще създадете поредица от малки фрагменти, които илюстрират
проблемите, които възникват при използване на функционални единици с различни закъснения.
За всеки от тях начертайте времева диаграма, подобна на фигура C.38 , която илюстрира всяка
концепция и ясно посочете проблема. а. [10] <C.5>
д
Системи за съхранение 1
Мисля, че Силиконовата долина беше погрешно наречена. Ако погледнете назад към доларите,
доставени в продукти през последното десетилетие, има повече приходи от магнитни дискове,
Ал Хогланд
Пионер на магнитните дискове
(1982)
Джордж Гилдър
„Краят наближава“,
Forbes ASAP (4 април 2000 г.)
Machine Translated by Google
D.1 Въведение
увеличи значението на I/O за компютрите, тъй като никой не би искал настолен компютър, който няма достъп до
отразени от имената на нашето време. 60-те до 80-те години на миналия век бяха наречени Компютърна
Въпреки че е разочароващо, когато дадена програма се срине, хората изпадат в истерия, ако
губят данните си; следователно системите за съхранение обикновено се държат на по-висок стандарт
съхранение, но също така има своя собствена богата теория за производителността - теория на опашките - това
балансира пропускателната способност спрямо времето за реакция. Софтуерът, който определя кои
роля за съхранение.
По този начин съхранението има различна, многостранна култура от процесорите, но все пак е така
Писти битове
Плътност на площта
= --------------- на повърхността на диска × ---------- на писта
Инч Инч
година, като по този начин удвоява плътността на всеки 3 години. Между тогава и около 1996 г
100%, удвояване всяка година. След иновациите, които позволиха този ренесанс
инч. Цената на гигабайт е спаднала поне толкова бързо, колкото площната плътност
увеличени, като задвижванията с по-малък диаметър играят по-голяма роля в това подобрение. Разходите за
1 000 000
1980 г
DRAM
1985 г
100 000
1980 г
1990
10 000
1995 1985 г
диск
2000 г 1990 г
1000
1995 г
2005 г
100
2000 г
10
2005 г
0,1
1 10 100 1000 10 000 100 000 1 000 000 10 000 000 100 000 000
Фигура D.1 Разходи срещу време за достъп за DRAM и магнитен диск през 1980, 1985, 1990, 1995, 2000 и 2005 г. Разликата от два
порядъка на големина в цената и разликата от пет порядъка на големина във времето за достъп между полупроводниковата памет и
въртящите се магнитни дискове са вдъхновили множество конкурентни технологии да се опитат да ги запълнят. Досега подобни
опити са остарели преди производството чрез подобрения в магнитните дискове, DRAM или и двете.
Обърнете внимание, че между 1990 г. и 2005 г. цената на гигабайт DRAM чипове отбеляза по-малко подобрение, докато цената на
диска направи драматично подобрение.
Machine Translated by Google
600
400
300
аO
аднуке/з
сI
200
100
0
0 50 100 150 200 250 300
Дълбочина на опашката
Фигура D.2 Пропускателна способност спрямо дълбочина на опашката с команди при използване на
произволни 512-байтови четения. Дискът извършва 170 четения в секунда, започвайки без опашка с
команди и удвоява производителността при 50 и утроява при 256 [Anderson 2003].
Machine Translated by Google
Мощност на диска
Мощността е все по-голяма грижа както за дисковете, така и за процесорите. Типичен ATA
диск през 2011 г. може да използва 9 вата при неактивност, 11 вата при четене или запис и
дисковете с по-малък диаметър могат да пестят енергия. Една формула, която показва значението на
По този начин по-малките плочи, по-бавното въртене и по-малкото плочи помагат за намаляване на диска
Фигура D.3 показва спецификациите на два 3,5-инчови диска през 2011 г. Серийният
ATA (SATA) дисковете имат висок капацитет и най-добрата цена на гигабайт, така че
които отговарят на форм фактора и използват четири или пет от тях, но се въртят с 5900 RPM
и се стремят сравнително бавно, за да позволят по-висока площна плътност и да намалят мощността. The
съответното Serial Attach SCSI (SAS) устройство се стреми към производителност, така че се върти при
15 000 RPM и търси много по-бързо. Той използва по-ниска повърхностна плътност, за да се върти при това
фактор пет по-добър за SAS дисковете. Въпреки използването на по-малки чинии и много
по-малко от тях, SAS дисковете използват два пъти повече мощност от SATA дисковете, поради
много по-бързи RPM и търсене.
анеЦ
аталП
MPR
анииД(
аовМ(
/O
/сI
еД
B
с(
уB
Бс(
уаР
бн(
TM
ч(
тетица)пBаGК(
иM
зBаM
ът
С(
е
m
кW
кW
ке
sр
са
)етвсоотнщ
ре/)ф
м)ф
к/)сB
B
р
оч
)евFоT
еоннедс)е
ее
тевм
рр
ръ)е
Фигура D.3 Serial ATA (SATA) срещу Serial Attach SCSI (SAS) устройства в 3,5-инчов форм фактор през 2011 г. I/Os на
вторите бяха изчислени с помощта на средното търсене плюс времето за половин ротация плюс времето за прехвърляне на едно
сектор от 512 KB.
Machine Translated by Google
увеличен чрез наличие на много дискови устройства и следователно много дискови рамена, а не по-малко
големи дискове. Простото разпространение на данни върху множество дискове, наречено ивици,
автоматично принуждава достъп до няколко диска, ако файловете с данни са големи. (Въпреки че масивите
недостатъкът е, че с повече устройства надеждността намалява: N устройства като цяло имат 1/N
Въпреки че един дисков масив би имал повече грешки, отколкото по-малък брой по-големи
дискове, когато всеки диск има еднаква надеждност, надеждността се подобрява чрез добавяне на
излишни дискове към масива, за да толерират грешки. Тоест, ако един диск се повреди,
при повреда на друг диск по време на средното време за ремонт (MTTR). Тъй като
по-малък размер и по-ниска мощност на устройства с малък диаметър, RAID вече доминират
Фигура D.4 обобщава петте стандартни RAID нива, показвайки как осем
дисковете с потребителски данни трябва да бъдат допълнени с излишни или контролни дискове на всеки
RAID ниво и изброява плюсовете и минусите на всяко ниво. Стандартните RAID нива
Това ниво обикновено се включва, за да действа като измервателна пръчка за другия RAID
RAID 1— Нарича се също отразяване или засенчване, има две копия на всяко
част от данните. Това е най-простата и най-старата схема за резервиране на дискове, но също така
Позволява се
повреда на диска,
0 Неизлишно райе 0 повреди, 0 Без място над главата Без защита Широко използван
дискове за проверка
3 Паритет с преплитане 1 грешка, 1 Ниски разходи за проверка; висока Няма поддръжка за Съхранение
на битове диск за проверка честотна лента за големи четения или малки произволни Концепции
записи четения или записи
4 Паритет с преплитане на 1 грешка, 1 Ниски разходи за проверка; повече Паритетният диск е мрежа
блокове диск за проверка честотна лента за малки четения малък проблем за запис Уред
5 Разпределен паритет 1 грешка, 1 Ниски разходи за проверка; Малки записи 4 Широко използван
с преплитане на блокове диск за проверка повече честотна лента за малки дискови достъпа
четения и записи
Фигура D.4 Нива на RAID, тяхната толерантност към грешки и тяхното натоварване в излишни дискове. Документът, който въведе
терминът RAID [Patterson, Gibson и Katz 1987] използва числена класификация, която стана популярна. Всъщност, на
нередундантният дисков масив често се нарича RAID 0, което показва, че данните са разделени на няколко диска, но без
съкращаване. Обърнете внимание, че дублирането (RAID 1) в този случай може да преживее до осем повреди на диска, при условие че има само един диск
на всяка огледална двойка е неуспешна; най-лошият случай е и двата диска в огледална двойка да се повредят. През 2011 г. може да няма комерсиални
реализации на RAID 2; останалите се намират в широка гама от продукти. RAID 0 + 1, 1 + 0, 01, 10 и 6 се обсъждат в
Текстът.
подходът включва само два диска. Първо, масивът чете старите данни, които са на път
да бъдат презаписани, и след това изчислява какви битове ще се променят, преди да
запише новите данни. След това чете старата стойност на паритета на дисковете за
проверка, актуализира паритета според списъка с промени и след това записва новата
стойност на паритета на диска за проверка. Следователно, тези така наречени „малки
записи“ все още са по-бавни от малките четения – те включват достъп до четири диска –
но са по-бързи, отколкото ако трябва да четете всички дискове при всяко записване.
RAID 4 има същото ниско ниво на проверка на диска като RAID 3 и все още може да извършва
големи четения и записи толкова бързо, колкото RAID 3 в допълнение към малки четения
и записи, но контролът е по-сложен.
След като завършихме нашия бърз преглед на класическите RAID нива, вече можем
разгледайте две нива, които станаха популярни след въвеждането на RAID.
Една тема, която не винаги е описана в литературата за RAID, включва как отразяването в
RAID 1 взаимодейства с стрипинга. Да предположим, че имате, да кажем, четири диска с
данни за съхранение и осем физически диска за използване. Бихте ли създали четири
чифта дискове – всеки организиран като RAID 1 – и след това да разделите данните в
четирите RAID 1 двойки? Като алтернатива, бихте ли създали два комплекта от четири
диска — всеки организиран като RAID 0 — и след това огледално записване в двата комплекта
RAID 0? Терминологията на RAID еволюира, за да нарече първия RAID 1 + 0 или RAID 10
(„огледални ивици“), а втория RAID 0 + 1 или RAID 01 („огледални ивици“).
да се разтегне значително, като по този начин се увеличи MTTR. Освен увеличаването на времето за
реконструкция, друго притеснение е, че четенето на много повече данни по време на реконструкция
означава увеличаване на шанса за некоригируема повреда на носителя, което би довело до загуба на
данни. Други аргументи за безпокойство относно едновременните множество повреди са нарастващият
брой дискове в масиви и използването на ATA дискове, които са по-бавни и по-големи от SCSI дисковете.
Следователно през годините има нарастващ интерес към защита срещу повече от един отказ.
Network Appliance (NetApp), например, стартира чрез изграждане на RAID 4 файлови сървъри. Тъй като
двойните повреди се превръщаха в опасност за клиентите, те създадоха по-стабилна схема за
защита на данните, наречена паритет по диагонал на ред или RAID-DP [Corbett et al. 2004]. Подобно на
стандартните RAID схеми, паритетът по диагонал на редове използва излишно пространство въз
основа на изчисление на паритет на базата на лента. Тъй като защитава срещу двоен отказ, той добавя
два блока за проверка на лента от данни. Да приемем, че има общо p + 1 диска, така че p – 1 диска имат
данни.
Фигура D.5 показва случая, когато p е 5.
Дискът за паритет на редове е точно като в RAID 4; той съдържа четния паритет в другите четири
блока данни в своята лента. Всеки блок от диска за диагонален паритет съдържа четния паритет на
блоковете в същия диагонал. Имайте предвид, че всеки диагонал не покрива един диск; например
диагонал 0 не покрива диск 1. Следователно имаме нужда само от p – 1 диагонали, за да защитим p
дисковете, така че дискът има само диагонали от 0 до 3 на Фигура D.5.
Нека да видим как работи паритетът по диагонал на редове, като приемем, че дискове с данни 1
и 3 се провалят на фигура D.5. Не можем да извършим стандартното възстановяване на RAID, като
използваме първия ред, използвайки паритет на редове, тъй като липсват два блока данни от дискове 1 и 3.
Въпреки това, можем да извършим възстановяване на диагонал 0, тъй като липсва само блокът данни,
свързан с диск 3. По този начин, паритетът по диагонал на ред започва с възстановяване на един от
четирите блока на неуспешния диск в този пример, използвайки диагонален паритет.
Тъй като всеки диагонал пропуска един диск и всички диагонали пропускат различен диск, на два
диагонала липсва само един блок. Те са диагонали 0 и 2 в този пример,
Диск с данни 0 Диск с данни 1 Диск с данни 2 Диск с данни 3 Паритет на редове Диагонален паритет
0 1 2 3 4 0
1 2 3 4 0 1
2 3 4 0 1 2
3 4 0 1 2 3
Фигура D.5 Диагонален паритет на ред за p = 5, който защитава четири диска с данни от двойни
повреди [Corbett et al. 2004]. Тази фигура показва диагоналните групи, за които паритетът се
изчислява и съхранява в диска за диагонален паритет. Въпреки че това показва всички данни за
проверка в отделни дискове за паритет на редове и диагонален паритет, както в RAID 4, има
завъртяна версия на паритет по диагонал на редове, която е аналогична на RAID 5. Параметър p
трябва да е първичен и по-голям от 2; въпреки това можете да направите p по-голямо от броя на
дисковете с данни, като приемете, че липсващите дискове имат всички нули и схемата все още
работи. Този трик улеснява добавянето на дискове към съществуваща система. NetApp избира p да
бъде 257, което позволява на системата да нарасне до 256 диска с данни.
Machine Translated by Google
Въпреки че хората може да са склонни да живеят с компютър, който от време на време се срива и
принуждава всички програми да бъдат рестартирани, те настояват информацията им никога да
не се губи. След това основната директива за съхранение е да се помни информацията, независимо
какво се случва.
Глава 1 обхваща основите на надеждността, а този раздел разширява това
информация за предоставяне на стандартни дефиниции и примери за откази.
Първата стъпка е да се изясни объркването по отношение на термините. Термините грешка,
грешка и повреда често се използват взаимозаменяемо, но имат различни значения в литературата
за надеждност. Например грешка в програмирането грешка, грешка или провал ли е? Има ли
значение дали говорим кога е проектирана или кога се изпълнява програмата? Ако изпълняваната
програма не упражнява грешката, все още ли е повреда/грешка/провал? Пробвай друг. Да
предположим, че алфа частица удари клетка от DRAM памет. Повреда/грешка/повреда ли е, ако
не променя стойността? Грешка/неизправност ли е, ако паметта няма достъп до променения бит?
Възникна ли все още повреда/грешка/повреда, ако паметта имаше корекция на грешки и достави
коригираната стойност на процесора? Получавате движението на трудностите. Ясно е, че се
нуждаем от точни определения, за да обсъждаме интелигентно подобни събития.
Когато възникне грешка, тя създава латентна грешка, която става ефективна , когато се
активира; когато грешката действително засяга доставената услуга, възниква повреда.
Machine Translated by Google
Нека се върнем към нашите мотивиращи примери по-горе. Грешка в програмирането е грешка.
Последствието е грешка (или скрита грешка) в софтуера. При активиране грешката става ефективна.
Когато тази ефективна грешка генерира грешни данни, които засягат доставената услуга, възниква
повреда .
Алфа частица, удряща DRAM, може да се счита за повреда. Ако промени паметта, създава грешка.
Грешката ще остане латентна, докато не бъде прочетена засегнатата дума от паметта. Ако ефективната
грешка в думата засяга доставената услуга, възниква грешка. Ако ECC коригира грешката, няма да възникне
грешка.
Свойствата на грешките са (1) латентната грешка става ефективна, след като бъде активирана; (2)
грешката може да се движи между нейното латентно и ефективно състояние; и (3) ефективна грешка
често се разпространява от един компонент към друг, като по този начин създава нови грешки. По този
начин или ефективната грешка е предишна латентна грешка в този компонент, или се е
Повреда на компонент възниква, когато грешката засяга доставената услуга. Тези свойства са
1. Хардуерни грешки - устройства, които се провалят, като например поради алфа частица, удряща клетка
с памет
Периодичните повреди карат системата да се колебае между неизправна и безотказна работа. Постоянните
видим някои примери от реалния свят. Публикациите на реални нива на грешки са редки по две причини.
Първо, учените рядко имат достъп до значителни хардуерни ресурси за измерване. Второ, индустриалните
от висококачествени изображения на над 70 000 произведения на изкуството [Talagala et al., 2000]. The
базата данни се съхранява в клъстер, който се състои от 20 компютъра, свързани с a
комутируем Ethernet и съдържащ 368 диска. Заемаше седем стелажа с височина 7 фута.
Фигура D.6 показва процентите на отказ на различните компоненти на Tertiary Disk.
Преди да изградят системата, дизайнерите са приели, че SCSI дискове с данни
биха били най-малко надеждната част от системата, тъй като те са едновременно механични и
изобилни. Следващите щяха да бъдат IDE дисковете, тъй като имаше по-малко от тях, след това мощността
консумативи, последвани от интегрални схеми. Те предположиха, че пасивни устройства като напр
кабелите едва ли ще се повредят.
Фигура D.6 разбива някои от тези предположения. Тъй като дизайнерите последваха
Съветът на производителя да се увери, че кутиите за дискове са с намалени вибрации и добро
охлаждане, дисковете с данни бяха много надеждни. За разлика от това, шасито на компютъра,
съдържащо IDE/ATA дисковете, не позволяваше същия контрол на околната среда.
(IDE/ATA дисковете не съхраняваха данни, но помогнаха на приложението и работата
система за зареждане на компютрите.) Фигура D.6 показва, че SCSI задната платка, кабелите и
Ethernet кабелите не бяха по-надеждни от самите дискове с данни!
Тъй като Tertiary Disk беше голяма система с много излишни компоненти, тя
може да преживее този широк спектър от неуспехи. Компонентите бяха свързани и бяха поставени
огледални изображения, така че нито една повреда не можеше да направи някое изображение
недостъпно. Тази стратегия, която първоначално изглеждаше пресилена, се оказа жизненоважна.
Този опит също демонстрира разликата между преходните повреди и
тежки грешки. На практика всички откази на фигура D.6 се появяват първо като преходни
грешки. Операторът трябваше да реши дали поведението е толкова лошо, че те
трябва да бъдат заменени или ако могат да продължат. Всъщност думата „провал“ беше
не се използва; вместо това групата заимства термини, които обикновено се използват за справяне
с проблемни служители, като операторът решава дали даден проблемен компонент трябва
или не трябва да бъде „уволнен“.
Тандем
Процент
Компонент Общо в системата Тотално неуспешно се провали
Процесор/дънна платка 20 0 0%
1989 г. е основният източник на отчетени прекъсвания (62%), следван от системните операции (15%).
грешките са много трудни за събиране, тъй като операторите трябва да докладват лични грешки, които могат
сигурност на работното място и повишаване на заплатите. Грей предположи, че както екологичните грешки, така и
наличността изисква подобрение в качеството на софтуера и толерантността на софтуера към грешки, по-
Докато Tertiary Disk и Tandem са проучвания за надеждност, ориентирани към съхранението, ние
120
неизвестен
100
Околна среда (захранване, мрежа)
Операции (по клиент)
Поддръжка (от тандем)
80 Хардуер
0аГ
1
сн
60
и
иимкешт0ес0р
40
20
0
1985 г 1987 г 1989 г
100%
4% 5% 5%
6% 6%
9%
9%
80% 15%
12%
19% 5%
13%
7%
60%
29% 22%
ее
ц
инокегш
р
яит аП
р
отр к
зг
40%
62%
39%
20%
34%
0%
1985 г 1987 г 1989 г
Фигура D.7 Грешки в тандем между 1985 и 1989 г. Грей [1990] събра тези данни за
устойчиви на грешки тандемни компютри въз основа на доклади за откази на компоненти от
клиенти.
хардуер/операционна система премина от причиняване на 70% от сривовете в VAX системите през 1985 г.
52% през същия период. Мърфи и Гент очакваха системите за управление да бъдат
изисква всички телефонни компании да представят обяснения, когато претърпят прекъсване, което засяга
30 минути. Тези подробни доклади за смущения не страдат от проблема със самоотчитането на по-ранни данни,
прекъсвания между 1992 и 1994 г., а Enriquez [2001] направи последващо проучване за
се увеличи от около една трета на две трети от минутите за прекъсване на работата на клиента.
последици преди добавянето на нови функции, така че през 2011 г. до голяма степен се случиха неуспехи
другаде.
Въпреки че повреди могат да бъдат инициирани поради грешки от страна на операторите, това е лошо
надграждането са толкова податливи на грешки. Повечето доставчици на хранилища твърдят днес, че клиентите
харчат много повече за управление на хранилището през целия му живот, отколкото за закупуване на
е или да се толерират грешки от страна на операторите, или да се избегнат грешки чрез опростяване на задачите
I/O производителността има мерки, които нямат аналог в дизайна. Едно от тези
е разнообразие: Кои I/O устройства могат да се свързват към компютърната система? Друг е
(а именно време за реакция и пропускателна способност) също се прилагат за I/O. (I/O пропускателна способност е
понякога се нарича I/O честотна лента , а времето за реакция понякога се нарича латентност.)
Следващите две фигури предлагат представа за това как се търгуват времето за реакция и производителността
един срещу друг. Фигура D.8 показва простия модел производител-сървър. The
Опашка
Продуцент сървър
Времето за реакция се дефинира като времето, необходимо на задачата от момента, в който е поставена
в буфера, докато сървърът завърши задачата. Пропускателната способност е просто средният брой задачи,
сървърът никога не трябва да е неактивен, следователно буферът никога не трябва да е празен. Времето за
реакция, от друга страна, отчита времето, прекарано в буфера, така че празният буфер го свива.
Друга мярка за I/O производителност е намесата на I/O при изпълнението на процесора. Прехвърлянето на
Има и режийни разходи поради обработка на I/O прекъсвания. Нашата загриженост тук е колко време ще отнеме
Фигура D.9 показва пропускателна способност спрямо времето за отговор (или латентност) за типична I/O
система. Коляното на кривата е областта, където малко по-голяма производителност води до много по-дълго време
за реакция или, обратно, малко по-кратко време за реакция води до много по-ниска производителност.
Как архитектът балансира тези противоречиви изисквания? Ако компютърът взаимодейства с човешки
същества, Фигура D.10 предлага отговор. Едно взаимодействие или транзакция с компютър се разделя на три
части:
2. Време за реакция на системата — Времето между момента, в който потребителят въведе командата
Сумата от тези три части се нарича време за транзакция. Няколко проучвания съобщават, че производителността
че намаляването на времето за реакция на системата с 0,7 секунди спестява 4,9 секунди (34%) от
конвенционалната транзакция и 2,0 секунди (70%) от графичната транзакция. Този неправдоподобен резултат
се обяснява с човешката природа: хората се нуждаят от по-малко време за мислене, когато им се даде по-бърз
отговор. Въпреки че това проучване е на 20 години, времето за реакция често е много по-бавно от 1 секунда,
300
200
)аsр
смъкек
)еиняеинец mВ
р
аз
ае з(
100
Фигура D.9 Пропускателна способност спрямо времето за отговор. Латентността обикновено се отчита като
време за реакция. Обърнете внимание, че минималното време за реакция достига само 11% от
пропускателната способност, докато времето за реакция за 100% пропускателна способност отнема седем
пъти повече от минималното време за реакция. Забележете също, че независимата променлива в тази
крива е имплицитна; за да проследите кривата, обикновено променяте натоварването (едновременност).
Чен и др. [1990] събира тези данни за масив от магнитни дискове.
Натовареност
0 5 10 15
Време (сек)
Фигура D.10 Потребителска транзакция с интерактивен компютър, разделена на време за влизане, време
за отговор на системата и време за мислене на потребителя за конвенционална система и графична
система. Времената за влизане са еднакви, независимо от времето за реакция на системата.
Времето за влизане беше 4 секунди за конвенционалната система и 0,25 секунди за графичната система.
Намаляването на времето за реакция всъщност намалява времето за транзакция с повече от намаляването на
времето за реакция. (От Брейди [1986].)
Machine Translated by Google
1000 пъти по-бързо. Примери за дълги закъснения включват стартиране на приложение на настолен
компютър поради много дискови I/O или мрежови закъснения при кликване върху уеб връзки.
За да отразят значението на времето за реакция за производителността на потребителите, I/O
бенчмарковете също разглеждат компромиса между времето за реакция и пропускателната способност. Фигура D.11
D: подкрепа за вземане на решения (пенсиониран) 100, 300, 1000 100, Запитвания на час декември 1995 г
H: ad hoc подкрепа за вземане на решения 300, 1000 Запитвания на час октомври 1999 г
W: транзакционен уеб бенчмарк 50, 500 Уеб взаимодействия за секунда юли 2000 г
Фигура D.12 Бенчмаркове на Съвета за обработка на транзакции. Обобщените резултати включват както представянето
показател и съотношението цена-производителност на този показател. TPC-A, TPC-B, TPC-D и TPC-R бяха оттеглени.
Тези TPC бенчмаркове бяха първите — и в някои случаи все още единствените
които имат тези необичайни характеристики:
Подобно на TPC-C, SFS мащабира количеството съхранявани данни според отчетената производителност:
За всеки 100 NFS операции в секунда капацитетът трябва да се увеличи с 1 GB. Той също така
ограничава средното време за реакция, в този случай до 40 ms. Фигура D.13 показва средното време
за отговор спрямо пропускателната способност за две NetApp системи.
За съжаление, за разлика от TPC бенчмарковете, SFS не се нормализира за различни ценови
конфигурации.
SPECMail е еталон, който помага да се оцени производителността на пощенските сървъри при
доставчик на интернет услуги. SPECMail2001 е базиран на стандартните интернет протоколи SMTP и
7
34,089 47,927
6
2 Xeon 4 Xeon
5
136,048
4
m
е
яиецмке)аsраВ
р
з(
FAS3000 8 оптерона
3
FAS6000
100,295
2
4 оптерона
1
0
0 25 000 50 000 75 000 100 000 125 000 150 000
Операции/секунда
Фигура D.13 Производителност на SPEC SFS97_R1 за NetApp FAS3050c NFS сървъри в две
конфигурации. Два процесора достигнаха 34 089 операции в секунда, а четири
процесора направиха 47 927. Докладвани през май 2005 г., тези системи използват
операционната система Data ONTAP 7.0.1R1, 2,8 GHz Pentium Xeon микропроцесори, 2 GB
DRAM на процесор, 1 GB енергонезависима памет на система и 168 15K RPM, 72 GB, Fibre
Channel дискове. Тези дискове бяха свързани с помощта на два или четири дискови
контролера QLogic ISP-2322 FC.
Machine Translated by Google
софтуерният RAID том беше заменен с емулиран диск. Това беше компютърен софтуер, работещ с
помощта на SCSI контролер, който се показва на други устройства на SCSI
шина като диск. Дисковият емулатор позволи инжектирането на грешки. Грешките
инжектираните включваха различни преходни грешки на диска, като например поправими грешки при четене,
Linux Соларис
225 160
150
220
140
215 Реконструкция
130
210
Хвс
Хвс
ке
ке
уи
уи
донт
донт
еав
еав
120
Реконструкция
205
110
200
100
195 90
190 80
0 10 20 30 40 50 60 70 80 90 100 110 0 10 20 30 40 50 60 70 80 90 100 110
Windows
200
190
180
уи
донт
еав Х
кевс
Реконструкция
170
160
150
0 5 10 15 20 25 30 35 40 45
Време (минути)
Фигура D.14 Еталонен показател за наличност за софтуерни RAID системи на същия компютър, работещ с Red Hat 6.0
Операционни системи Linux, Solaris 7 и Windows 2000. Обърнете внимание на разликата във философията относно скоростта на реконструкция на
Linux спрямо Windows и Solaris. Оста Y е поведението в посещения в секунда при изпълнение на SPECWeb99. Стрелата
показва времето на въвеждане на грешката. Редовете в горната част дават 99% доверителен интервал на производителност преди грешката
се вмъква. 99% доверителен интервал означава, че ако променливата е извън този диапазон, вероятността е само 1%
че тази стойност ще се появи.
политиките на Linux, Solaris и Windows 2000 относно автоматичното резервно използване, скоростите на
възстановяване, преходните грешки и т.н. Отново никоя система не документира техните политики.
Пристигания Заминавания
Фигура D.15 Третиране на I/O системата като черна кутия. Това води до просто, но важно
наблюдение: ако системата е в стабилно състояние, тогава броят на задачите, влизащи в системата,
трябва да е равен на броя на задачите, които напускат системата. Това състояние на балансиран
поток е необходимо, но не достатъчно за стабилно състояние. Ако системата е била наблюдавана или
измервана достатъчно дълго време и средното време на изчакване се стабилизира, тогава
казваме, че системата е достигнала стабилно състояние.
Machine Translated by Google
отколкото симулация, ние няма да обхващаме такива анализи тук. (Вижте препратките в
независими заявки за I/O услуга, които са в равновесие: Скоростта на въвеждане трябва да е равна на скоростта
стабилно снабдяване със задачи, независимо колко дълго чакат за обслужване. В много
=
Среден брой задачи в системата Скорост на пристигане Средно× време за отговор
Законът на Литъл се прилага за всяка система в равновесие, стига да няма нищо вътре
черната кутия създава нови задачи или ги унищожава. Имайте предвид, че процентът на пристигане и
времето за отговор трябва да използва същата единица време; несъответствието във времевите единици е a
често срещана причина за грешки.
минути. По време на това наблюдение записваме колко време е отнело всяка задача
обслужени и след това сумирайте тези времена. Броят задачи, изпълнени през
Натрупано време
= ------------------------------------
Среден брой задачи в системата
Наблюдавайте времето
Натрупано време
= ------------------------------------
Средно време за реакция
Числови задачи
Числови задачи
Степен на пристигане = ----------------------------
Наблюдавайте времето
Ако заместим трите дефиниции по-горе в тази формула и разменим получените два термина от дясната страна,
=
Среден брой задачи в системата Скорост на пристигане Средно× време за отговор
Ако отворим черната кутия, виждаме фигура D.16. Областта, в която се натрупват задачите, чакащи да
Опашка сървър
Фигура D.16 Моделът с един сървър за този раздел. В тази ситуация I/O заявка
„тръгва“, като се изпълнява от сървъра.
Едно често срещано недоразумение може да бъде изяснено чрез тези дефиниции: дали въпросът е
колко време задачата трябва да изчака в опашката, преди да стартира услугата (Timequeue) или
колко време отнема задачата, докато бъде завършена (Timesystem). Последният термин е това, което
имаме предвид под време за реакция, а връзката между термините е Timesystem = Timequeue +
Timeserver.
Средният брой задачи в услуга (Lengthserver) е просто процент на пристигане × Timeserver, което
е законът на Little. Използването на сървъра е просто средният брой обслужвани задачи, разделен на
скоростта на обслужване. За единичен сървър цената на услугата е 1 ⁄ Timeserver. Следователно
използването на сървъра (и в този случай средният брой задачи на сървър) е просто:
Използване на сървъра = ×
Процент на пристигане Timeserver
Използването на услугата трябва да бъде между 0 и 1; в противен случай биха пристигнали повече
задачи, отколкото биха могли да бъдат обслужени, което нарушава нашето предположение, че
системата е в равновесие. Обърнете внимание, че тази формула е просто повторение на закона на
Литъл. Използването се нарича още интензивност на трафика и се представя със символа ρ в много
текстове на теорията на опашките.
Machine Translated by Google
Пример Да предположим, че I/O система с един диск получава средно 50 I/O заявки за секунда. Да приемем, че средното време
Отговор Използвайки уравнението по-горе, с 10 ms, представени като 0,01 секунди, получаваме:
50
= == ------- 0,01 сек × 0,50
Използване на сървъра Степен на пристигане Timeserver ×
сек
най-простата и най-разпространена дисциплина е първи влязъл, първи излязъл (FIFO). Ако приемем
FIFO, можем да свържем времето на чакане в опашката със средния брой задачи в
опашка:
обслужва се, когато пристигне нова задача. (Има още едно ограничение за пристигането
Последният компонент на уравнението не е толкова прост, колкото изглежда на пръв поглед. Нов
задачата може да пристигне във всеки един момент, така че нямаме основание да знаем колко дълго съществува
задача е била в сървъра. Въпреки че такива заявки са случайни събития, ако ние
на стойности с определена вероятност; това означава, че не можете да знаете точно какво следва
Заявките за услуга от I/O система могат да бъдат моделирани чрез произволна променлива, тъй като
операционната система обикновено превключва между няколко процеса, които генерират независими I/O
ротационни закъснения.
максимални стойности в поддиапазони, наречени кофи. След това хистограмите изобразяват числото
във всяка кофа като колони.
време на изчакване на I/O заявка, имаме два избора. Или имаме нужда от крива, за да
начертайте стойностите в целия диапазон, така че да можем да оценим точно стойността, или
имаме нужда от много фина времева единица, така че да получим много голям брой кофи
преценете точно времето. Например, хистограма може да бъде изградена от дискова услуга
времена, измерени на интервали от 10 μs, въпреки че времената за обслужване на диска са наистина непрекъснати
uous.
ni
-------------------
н
f =
аз
ni
i =1
Тогава среднопретеглената аритметична е
отклонение. Нека вместо това използваме дисперсията , която е просто квадратът на стандартното отклонение,
2
Дисперсия= f ( 1 ×Т1 + f++ × 2 … е n Tn
2 –
)
2 Т2 Среднопретеглено аритметично време2
разпределението е на времето. Ако времето е около 100 милисекунди, тогава повдигането му на квадрат дава
10 000 квадратни милисекунди. Това устройство определено е необичайно. Би било по-удобно, ако имахме
безединична мярка.
традиционно наричан C2 :
Дисперсия
C2 = -------------------------------------------------- ----------------------------
няма влияние върху вероятността събитие да се случи сега. Това забравено свойство е
поведение при използване на тези модели. (Да предположим, че това свойство без памет не съществува;
–a к
e × а
= ------------------
Вероятност( ) k
к!
където a = процент на събития × изминало време. Ако времето между пристиганията е експоненциално
разпределени и използваме скоростта на пристигане от по-горе за скоростта на събитията, броя на
пристигания във времеви интервал t е процес на Поасон, който има разпределение на Поасон
= ⁄1 ×2 Средно аритметично×1( C2 ) +
Средно остатъчно работно време
половината от средното време за обслужване, както бихме очаквали. Ако разпределението е случайно
Отговор Всички задачи в опашката (Lengthqueue) преди новата задача трябва да бъдат изпълнени
преди задачата да може да бъде обслужена; всеки отнема среден Timeserver. Ако една задача е при
сървъра, отнема средно остатъчно време за обслужване, за да завърши. Шансът на
използване × Средно остатъчно време за обслужване. Това води до нашата първоначална формула:
=
Timequeue Lengthqueue ×
Timeserver
= ⁄× × ( 1 C2
)+ ]
Използване на Timequeue Server × [ ( 1 2 Сървър за време
×
+ Степен на пристигане Timequeue ) Времеви сървър ×
= + ( × × Времеви сървър
Timequeue Използване на сървър Timeserver × Процент на пристигане Timequeue )
Пренареждайки последния член, нека заменим Скорост на пристигане × Сървър за време с използване на
сървъра:
= ×
+ × ( Скорост на пристигане Timeserver )
Времева опашка
Timequeue Използване на сървър Timeserver ×
= + ×
Използване на сървъра Timeserver × Времева опашка за използване на сървъра
= + ×
Timequeue Използване на сървър Timeserver × Времева опашка за използване на сървъра
–
Timequeue Използване ×
на сървъра Timequeue = Време за използване на× сървърасървър
–
1 Използване на сървъра ) = Използване на сървър
× Timeserver
Timequeue × (
Използване на сървъра
=
Timequeue Timeserver × -------------------------------------------------- -----
–
( 1 Използване на сървъра )
Законът на Литъл може да се приложи и към компонентите на черната кутия, тъй като
= ×
Lengthqueue Скорост на пристигане Timequeue
Използване на сървъра
= × × -------------------------------------------------- -----
Lengthqueue Скорост на пристигане Timeserver –
( 1 Използване на сървъра )
Тъй като процент на пристигане × сървър за време = използване на сървъра, можем да опростим допълнително:
Пример За системата в примера на страница D-26, която има сървърно използване от 0,5,
Както бе споменато по-рано, тези уравнения и този раздел се основават на област от приложната
математика, наречена теория на опашките, която предлага уравнения за прогнозиране на поведението
на такива случайни променливи. Реалните системи са твърде сложни, за да може теорията на
опашките да осигури точен анализ, следователно теорията на опашките работи най-добре, когато са
необходими само приблизителни отговори.
Теорията на опашките прави рязко разграничение между минали събития, които могат да бъдат
характеризирани чрез измервания с помощта на проста аритметика, и бъдещи събития, които са
прогнози, изискващи по-сложна математика. В компютърните системи ние обикновено предсказваме
бъдещето от миналото; един пример е най-скоро използваното заместване на блокове (вижте Глава
2). Следователно разликата между измерванията и прогнозираните разпределения често е
замъглена; ние използваме измервания, за да проверим вида на разпределението и след това
разчитаме на разпределението след това.
Нека прегледаме предположенията относно модела на опашка:
Системата е в равновесие.
Времената между две последователни пристигащи заявки, наречени времена между пристигане, са
експоненциално разпределени, което характеризира честотата на пристигане, спомената по-
рано.
предишното. Няма ограничение за дължината на опашката и тя следва първи влязъл, пръв излязъл
дисциплина на реда, така че всички задачи в реда трябва да бъдат изпълнени.
Пример Да предположим, че процесорът изпраща 40 I/O диска в секунда, тези заявки са експоненциално разпределени
следните въпроси:
= == ×
Използване на сървъра Скорост на пристигане Времеви сървър
40 0,02 × 0,8
0,8 0,8
= 20 ms × ----------------= 20
== × ------- 20 4 × 1 0,8 – 80 ms
0,2
Средното време за реакция е
= == ×
Използване на сървъра Скорост на пристигане Времеви сървър
40 0,01 × 0,4
Средното време за реакция е 10 + 6,7 ms или 16,7 ms, 6,0 пъти по-бързо от
старо време за реакция, въпреки че новото време за обслужване е само 2,0 пъти по-бързо.
Machine Translated by Google
сървър
I/O контролер
и устройство
сървър
Опашка
Пристигания
I/O контролер
и устройство
сървър
I/O контролер
и устройство
на фигура D.17. Такава система се нарича M/M/m модел в теорията на масовото обслужване.
Нека дадем същите формули за M/M/m опашката, използвайки Nservers за представяне
броя на сървърите. Първите две формули са лесни:
= ×
Lengthqueue Скорост на пристигане Timequeue
Ptasks Nservers
Timequeue Timeserver
= × -------------------------------------------------- --------------
N сървъри × (
1 Използване – )
–1
N сървъри Nсървъри–1 н
( N сървъри × Използване) ( N сървъри × Използване )
= 1+ -------------------------------------------------- ----------------- -------------------------------------------------- ------
Prob0 задачи
N сървъри! –
1 Използване ×() + н!
n =1
Тогава вероятността да има толкова или повече задачи, колкото имаме сървъри
N сървъри
N сървъри × Използване
Пробни задачи = × Prob0 задачи
-------------------------------------------------- ---------------
N сървъри –
Nservers! 1 Използване ×()
Machine Translated by Google
Пример Да предположим, че вместо нов, по-бърз диск, добавим втори бавен диск и дублираме
данните, така че четенията да могат да се обслужват от двата диска. Да приемем, че
заявките са всички четения. Този път преизчислете отговорите на предишните въпроси
използвайки M/M/m опашка.
1 –1
2 н
= 1+ ( 2 Използване × )
-------------------------------------------------- ( 2 Използване × )
----------------------------------------------
Prob0 задачи – +
2! 1 Използване ×() н!
n=1
2 –1 –1
(2 0,4 × 0,640
= ) 1++ ------------------------------
( 0,4 2)× = 1 + ------------- 0,800 +
×1 (0,4
2 )– 1,2
= 0,533 0,800+[] + =
–1 2,333–1 1
2
2 Използване ×
Пробни задачиN = ×
--------------------------------------------------
– Prob0 задачи
( 2!1) Използване ×
сървъри
2
(2 0,4 × ) 0,640
= ------------------------------ 2,333–1 × = -------------
× 2.333–1
2 1 0,4 × ( ) – 1.2
= 0,533 2,333 ⁄ = 0,229
Пробни задачи
N сървъри
=
Timequeue Timeserver × -------------------------------------------------- --------------
N сървъри × ( 1 Използване – )
0,229 0,229
= 0,020 × ------------------------ 0,020
= × -------------
2 1 0,4 ×1,2 ( ) =– 0,020 0,190 × =
0,0038
Средното време за реакция е 20 + 3,8 ms или 23,8 ms. За това натоварване две
дисковете намаляват времето за изчакване на опашката с коефициент 21 спрямо един бавен диск и a
коефициент 1,75 спрямо един бърз диск. Средното време на обслужване на система с a
единичен бърз диск обаче все още е 1,4 пъти по-бърз от един с два диска, тъй като
времето за обслужване на диска е 2,0 пъти по-бързо.
Machine Translated by Google
Би било чудесно, ако можем да обобщим модела M/M/m към множество опашки и множество
сървъри, тъй като тази стъпка е много по-реалистична. Уви, тези модели са много трудни за
решаване и използване, така че няма да ги разглеждаме тук.
Връзките от точка до точка и комутаторите стават все по-популярни, тъй като законът на Мур
продължава да намалява цената на компонентите. В комбинация с по-високите изисквания за I/O
честотна лента от по-бързи процесори, по-бързи дискове и по-бързи локални мрежи, намаляващото
предимство на разходите на автобусите означава, че дните на автобусите в настолните и
сървърните компютри са преброени. Тази тенденция започна при високопроизводителните
компютри в последното издание на книгата и до 2011 г. се разпространи в хранилището. Фигура
D.18 показва старите базирани на шина стандарти и техните заместители.
Броят на битовете и честотната лента за новото поколение е за посока, така че те се удвояват
и за двете посоки. Тъй като тези нови дизайни използват много по-малко кабели, обичаен начин
за увеличаване на честотната лента е да се предложат версии с няколко пъти по-голям брой
кабели и честотна лента.
Макс I/O
Стандартен Ширина (битове) Дължина (метри) Тактова честота MB/сек устройства
Фигура D.18 Паралелни I/O шини и техните заместители от точка до точка. Имайте предвид, че честотната
лента и кабелите са за всяка посока, така че честотната лента се удвоява при изпращане и в двете посоки.
Machine Translated by Google
като един виртуален „диск“. В RAID дисков масив логическата единица е конфигурирана като
конкретно RAID оформление, като например RAID 5. Физическият том е файлът на устройството,
използван от файловата система за достъп до логическа единица. Логическият том осигурява
ниво на виртуализация, което позволява на файловата система да разделя физическия том на
множество части или да разделя данните на множество физически томове. Логическата единица
е абстракция на дисков масив, който представя виртуален диск на операционната система,
докато физическите и логическите томове са абстракции, използвани от операционната
система за разделяне на тези виртуални дискове на по-малки, независими файлови системи.
След като разгледахме някои от термините за колекции от блокове, сега трябва да
попитаме: Къде трябва да се поддържа файловата илюзия: в сървъра или в другия край на
мрежата за съхранение?
Традиционният отговор е сървърът. Той има достъп до хранилището като дискови блокове
и поддържа метаданните. Повечето файлови системи използват файлов кеш, така че сървърът
трябва да поддържа последователност на достъпа до файлове. Дисковете могат да бъдат директно
прикачени - намерени в сървър, свързан към I/O шина - или прикрепени през мрежа за
съхранение, но сървърът предава блокове данни към подсистемата за съхранение.
Алтернативният отговор е, че самата дискова подсистема поддържа файловата абстракция,
а сървърът използва протокол на файловата система, за да комуникира със съхранението.
Примерни протоколи са мрежова файлова система (NFS) за UNIX системи и обща интернет
файлова система (CIFS) за Windows системи. Такива устройства се наричат мрежови устройства
за съхранение (NAS), тъй като няма смисъл съхранението да бъде директно свързано към сървъра.
Името е нещо като погрешно наименование, тъй като мрежа за съхранение като FC-AL може също да
се използва за свързване към блокиращи сървъри. Терминът filer често се използва за NAS
устройства, които предоставят само файлова услуга и съхранение на файлове. Network
Appliance беше една от първите компании, които направиха файлове.
Движещата сила зад поставянето на съхранение в мрежата е да се улесни много компютри да
споделят информация и операторите да поддържат споделената система.
Дисковете обикновено прекарват много повече време в механични забавяния, отколкото в прехвърляне на
данни. По този начин естественият път към по-висока входно/изходна производителност е паралелизмът,
Простият подход към I/O е да поискате данни и след това да започнете да ги използвате.
След това операционната система превключва към друг процес, докато пристигнат желаните
данни, и след това операционната система превключва обратно към искащия процес.
Такъв стил се нарича синхронен I/O - процесът изчаква, докато данните бъдат прочетени от
диска.
Изкуството на проектирането на I/O система е да се намери дизайн, който отговаря на целите за цена,
способност за зависимост и разнообразие от устройства, като същевременно се избягват тесните места
в I/O производителността и надеждността. Избягването на тесни места означава, че компонентите
трябва да бъдат балансирани между основната памет и I/O устройството, тъй като производителността
и надеждността - и следователно ефективната цена-производителност или надеждността на разходите
- могат да бъдат толкова добри, колкото и най-слабата връзка в I/O верига. Архитектът трябва също
така да планира разширяване, така че клиентите да могат да приспособят I/O към своите приложения.
Тази разширяемост, както в броя, така и в типовете I/O устройства, има своята цена в по-дълги I/O
шини и мрежи, по-големи захранвания за поддръжка на I/O устройства и по-големи шкафове.
При проектирането на I/O система ние анализираме производителността, цената, капацитета и
наличността, като използваме различни схеми на I/O свързване и различен брой I/O устройства от
всеки тип. Ето една поредица от стъпки, които трябва да следвате при проектирането на I/O система.
Отговорите за всяка стъпка могат да бъдат продиктувани от изискванията на пазара или просто от
целите за цена, производителност и наличност.
1. Избройте различните типове I/O устройства, които да бъдат свързани към машината, или избройте
стандартните шини и мрежи, които машината ще поддържа.
3. Избройте цената на всяко I/O устройство, включително частта от цената на всеки контролер,
необходим за това устройство.
5. Запишете нуждите от ресурси на процесора на всяко I/O устройство. Този списък трябва
включват:
Тактовата честота на процесора спира поради изчакване I/O да приключи използването на паметта,
шина или кеш
6. Избройте изискванията за памет и I/O шина за всяко I/O устройство. Дори когато процесорът не
използва памет, честотната лента на основната памет и I/O връзката е ограничена.
Като се имат предвид вашите цели за цена, производителност и наличност, вие избирате най-
добрата организация.
Целите за цена-производителност влияят върху избора на I/O схема и физически дизайн.
Производителността може да се измерва или като мегабайти в секунда, или като I/Os в секунда, в
зависимост от нуждите на приложението. За висока производителност единствените ограничения
трябва да бъдат скоростта на I/O устройствата, броя на I/O устройствата и скоростта на паметта и
процесора. За ниска цена по-голямата част от разходите трябва да бъдат самите I/O устройства.
Целите за наличност зависят отчасти от цената на недостъпността за организацията.