Кэш (англ. cache произносится /k??/) [1] — в компьютерных науках это подборка данных, дублирующих оригинальные значения, сохранённые где-то или вычисленные ранее, когда оригинальные данные труднодоступны из-за большого времени доступа или для вычисления. Другими словами, кэш — это промежуточный буфер с быстрым доступом, который хранит в себе ту информацию, которая с наибольшей вероятностью может быть запрошена. Один раз сохранённые в кэше данные в будущем могут использоваться доступом к кэшированной копии — это будет быстрее, чем повторная выборка или повторное вычисление оригинальных данных, так что среднее время доступа будет короче. Таким образом, кэш помогает ускорить доступ к данным.
Кэш —- это память с большей скоростью доступа, предназначенная для ускорения обращения к данным, содержащимся постоянно в памяти с меньшей скоростью доступа (далее «основная память»). Кэширование применяется ЦПУ, жёсткими дисками, браузерами и веб-серверами.
Кэш состоит из набора записей. Каждая запись ассоциирована с элементом данных или блоком данных (небольшой части данных), которая является копией элемента данных в основной памяти. Каждая запись имеет идентификатор, определяющий соответствие между элементами данных в кэше и их копиями в основной памяти.
Уровни кэша
Кэш центрального процессора разделен на несколько уровней (до 3 для универсальных процессоров по состоянию на начало 2007 года). Кэш-память уровня N+1 как правило больше по размеру и медленнее по скорости обращения, чем кэш-память уровня N.
Самой быстрой памятью является кэш первого уровня (она же L1-cache), по сути, она является неотъемлемой частью процессора, поскольку расположена на одном с ним кристалле и входит в состав функциональных блоков, без неё процессор не сможет функционировать. Память L1 работает на частоте процессора, и в общем случае обращение к ней может производится каждый такт (зачастую является возможным выполнять даже несколько чтений/записей одновременно), латентность доступа обычно равна 2—4 такта ядра, объём этой памяти обычно невелик — не более 64 Кб. Второй по быстродействию является L2 (в отличие от L1 её можно отключить с сохранением работоспособности процессора), кеш второго уровня, она обычно расположена либо на кристалле, как и L1, либо в непосредственной близости от ядра, например, в процессорном картридже (только в слотовых процессорах), в старых процессорах её располагали на системной плате. Объём L2 побольше — от 128 Кб до 1—8 Мб (в конце 2007 года кеш L2 размером 4 и 8 мегабайт есть у современных многоядерных процессоров, на каждое ядро приходится по 2 Мб). Обычно латентность L2 расположенной на кристалле ядра составляет от 8 до 20 тактов ядра. Кеш третьего уровня наименее быстродействующий и обычно расположен отдельно от ядра ЦП, но он может быть очень внушительного размера и всё равно значительно быстрее чем оперативная память.
[править]
Ассоциативность кэша
Одна из фундаментальных характеристик кэш-памяти — уровень ассоциативности — отображает ее логическую сегментацию. Дело в том, что последовательный перебор всех строк кэша в поисках необходимых данных потребовал бы десятков тактов и свел бы на нет весь выигрыш от использования встроенной в ЦП памяти. Поэтому ячейки ОЗУ жестко привязываются к строкам кэш-памяти (в каждой строке могут быть данные из фиксированного набора адресов), что значительно сокращает время поиска. С каждой ячейкой ОЗУ может быть связано более одной строки кэш-памяти: например, n-канальная ассоциативность (англ. n-way set associative) обозначает, что информация по некоторому адресу оперативной памяти может храниться в n местах кэш-памяти.
При одинаковом объеме кэша схема с большей ассоциативностью будет наименее быстрой, но наиболее эффективной.
Translation lookaside buffer (TLB) — это буфер сверхоперативной памяти центрального процессора, используемый для ускорения трансляции адреса виртуальной памяти в адрес физической памяти. TLB используется всеми современными процессорами для поддержки страничной организации памяти. TLB содержит фиксированный набор записей и является контентно-адресуемой памятью. Каждая запись содержит соответствие адреса виртуальной памяти адресу физической памяти с гранулярностью 1 страница. При попадании в TLB используется адрес физической памяти, сохраненный в TLB. При промахе процессор обходит таблицы страниц и сохраняет сгенерированный адрес в TLB. Промах TLB от 10 до 60 раз дороже, чем генерация адреса с использованием TLB. Вероятность промаха TLB от 0.01% до 1%.
Скажу от себя :
ALU - это арифметико-логическое устройство, которое выполняет арифметические и логические операции, что понятно. ( сложение, вычитание, умножение, деление, и -- или - логические операции, различные сдвиги и пр. ) ALU относится к исполнительным устройствам - те устройства, ради чего нужна вся эта "катавасия" . Также к исполнительным устройствам относятся и регистры - это самая быстрая память в компьютере, которая находится вблизи ALU, и работает она гораздо быстрее кэша и понятное дело ОЗУ - оперативной памяти. Важной характеристикой регистров является их разрядность - самая большая 128 бит. ALU вообще является "сердцем" процессора.
FP - floating point. FPU - floating point unit - "сопроцессор" , часть исполнительных устройств, которое занимается вычислениями с плавающей точкой, т. е. повышенной точности. Для таких вычислений требуется больше тактов процессора - больше затрат. ( Кстати, по моему обработкой SSE - это мультимедийные инструкции как раз и занимается блок FPU, эти инструкции тоже бывают разные, начиная с SSE1 и сейчас заканчивая SSE4.1- это у новых процессоров Intel. Эти инструкции еще применяются в играх, например SSE2 - если процессор не поддерживает их, то увы, игра не запустится). Кстати FPU как раз и разогревает самое большее процессор.
AGU- тоже относится к блоку исполнительных устройств, AGU - "занимается" адресами, к нему ,как я понимаю, подключена адресная шина.
ADD - это сложение, значит FADD - сложение с плавающей точкой, т. е. большей точности.
MUL - умножение.
LOAD/Store - это наверно устройства загрузки/выгрузки - относятся к конечным стадиям конвеера.
Конвеер - это исполняющая цепочка, это тот период за который какие либо данные, инструкции успеют обработаться процессором и пройти до полной "отставки" - записаться в кэш - в лучшем случае, ну а в худшем понятно куда.
Декодер - это такое устройство, которое имеет n - входов и 2 в степени n - выходов.
Декодер в процессоре разбивает инструкции на микрооперации и отправляет их на исполнительные устройства. Т. е. процессор "работает" не с тем, что написал программист, а с машинными кодами.
Вообще основные этапы конвеера такие:
1. Fetch - выборка необходимых данных
2. Decode - декодирование
3. Sheduler - планировщик, распределяет "потоки" по исполнительным устройствам.
4. Execute - исполнение
Но на самом деле этапов конвеера гораздо больше как у AMD - 12 у Intel - 14 -- это все в лучшем случае, потому что может произойти сброс конвеера например, может не оказаться необходимых операндов - (то над чем исполняются операции) в кэше , может ошибиться блок предсказания ветвлений - его еще называют brench prediction
в основном процессор работает с условными переходами, так вот, вот этот блок и "угадывает", что делать процессору в ближайшее будущее. В процессоре как бы ведется некая "таблица статистики", основанная на логике. Этот блок не ошибается на 98-99 %. Понятно, что между 98 и 99 разница очень большая, то ли 1% либо 2% ошибок в работе процессора. А что будет если он ошибется ?? Понятное дело - наверное сброс конвеера, что влечет за собой потери процессорного времени. Этот блок располагается вблизи декодеров, декодер не 1-н в процессоре.
На счет кэша. Кэш-память с большим уровнем ассоциативности - предполагает как бы большую эффективность записи в нее данных. С меньшим уровнем ассоциативности ( у L1 - кэша) - большую эффективность при чтении из нее данных, ведь понятно что с меньшей ассоциативностью будет и меньшая доля промахов при чтении, что очень важно для процессора.
SSE - это еще специальные регистры, которые находятся вблизи FPU / ALU . Хранят промежуточные вычисления с плавающей точкой.
TLB - тоже делится на уровни как кэш-память . Вообще процессор работает с виртуальными адресами ( виртуальной памятью - что сделано для удобства, так как ОЗУ раньше было в малых количествах; виртуальная память - это ОЗУ + файл подкачки на жестком диске, еще файл подкачки называют файлом виртуальной памяти; называют и своп - файлом; своп - это замещение страниц ОЗУ и файла подкачки; если даже и отключить файл подкачки в Виндоусе, то все равно система будет хоть какую - то малую часть и отводить файлу подкачки, просто это не будет заметно пользователю, да и механизм виртуальной памяти как работал так и будет работать)... и как раз вот этот TLB и нужен для преобразования виртуальных адресов в физические, ведь все шины как и контроллер памяти работает с физическими адресами.
Контроллер памяти - понятно из названия, участвует в передаче потоков данных из DDR в процессор. В случае Intel он расположен на чипсете - это набор системной логики, связывающий процессор со всеми остальными устройствами( но не всегда !!! есть DMA - это аббревиатура, обозначающая прямой доступ к памяти, обычно прямой доступ к памяти, DDR, имеют дисководы, CD/DVD приводы , при этом эти устройства как бы "менуют" процессор, тем самым давая ему заниматься другими задачами, ему и так есть чем заняться!!!) ... в случае Intel контроллер памяти расположен на чипсете и процессор связан с конт. памяти через шину FSB - front side bus - системная боковая шина- или системная шина ( не путать с шиной задающей частоту проца!!)
У AMD контроллер памяти встроен в процессор ( не там где происходит цепочка конвеера) - это является его главным преимуществом и единственным
А узким местом у Intel является как раз эта FSB - она вносит дополнительную латентность ( т. е. задержки на распространение сигнала от входа до выхода чего либо). И память DDR2 800 Mhz и уж тем более DDR3 не проявляют себя в полной мере, в смысле их пропускная способность практическая далека от теоритической ( да и у AMD тоже так, но чуть получше понятно из-за чего ....). Вот поэтому всегда у Intel был L2-кэш больше чем у AMD.
Ну пожалуй все, если что не так вносите свои изменения/исправления .......