"Реальная частота памяти" или о вашей отсталости от технологий
реклама
«Реальная частота памяти» или о вашей отсталости от технологий
Предисловие
Когда-то я уже писал статью на такую тему, она была залита в некоторые паблики, посвященные компьютерной тематике и набрала около 4-ех тысяч просмотров. Статьи гораздо перспективнее писать на сайты, чем в группы, ведь статьи из групп обычно не отображаются в поисковых строках. Было решено сделать ремейк старой статьи и опубликовать на сайт
Мы можем слышать утверждения, в которых используется термин реальная частота памяти. Рядовой пользователь, когда захочет узнать, что это, откроет сомнительный сайт и прочитает что-то вроде: «есть реальная частота, а есть эффективная, которая в два раза выше из-за двойной передачи Double Data Rate». Такая формулировка не очень точна и может ввести в заблуждение. Эта статья призвана расширить определения физической и эффективной частот памяти для массового читателя.
Как устроена память и немного о SDRAM
реклама
Любая основная оперативная память — это DRAM (динамическая) память произвольного доступа (то есть мы можем обращаться к отдельным словам, отдельным участкам памяти произвольно). Разница динамической памяти от статической (SRAM) в том, что бит динамической памяти представлен конденсатором, а бит статической – триггером. Конденсатор в зависимости от наличии заряда имеет два дискретных значения, на которых базируется вся цифровая логика: 0 и 1. Проблема в том, что конденсаторы могут разряжаться, поэтому их приходится подзаряжать, что учитывается и протоколом (в том числе и таймингами), и контролером памяти, и самой организацией памяти.
SDRAM синхронна по тактовому генератору. Это означает, что любое действие в микросхемах памяти зависит от тактового генератора. Наличие в системе тактовой частоты — это лишь средство синхронизации, а не обязательная характеристика любой микросхемы, так как микросхема может быть асинхронной к тактовому генератору вообще. До SDRAM память была асинхронной
реклама
SDRAM состоит из двух банков памяти, обращение к которым можно чередовать. Банк состоит из двухмерной матрицы, состоящей из строк и столбцов. Чтобы обратиться к ячейке памяти, нужно сначала задать адрес строки (с помощью сигнал RAS), а затем адрес столбца (CAS). Когда задается адрес строки, происходит её активизация (ACT), чтобы с ней можно было работать. В одном банке может быть активна только одна строка. Чтобы закончить работу со строкой, нужно её закрыть командой (PRECHARGE) и открыть новую. Чтобы иметь две и более открытых строки, были созданы банки памяти. Из этого состоит чип памяти, а их на планке памяти несколько
Если данные готовы к передаче, то данные передаются на каждом фронте (подъем от логического 0 к логической 1) тактового генератора
реклама
Понятие буфера ввода/вывода будет введено потом. Частота ядра памяти — это и есть частота ячеек оперативной памяти. По сути ядро памяти — это то же самое, что и банк памяти
DDR SDRAM
DDR SDRAM отличается тем, если передача на SDR SDRAM (так назвали первую SDRAM) осуществлялась только по фронту импульсов тактового генератора, то на DDR SDRAM происходит передача так по фронту, так и по спаду
Такт — это период от фронта одного импульса до фронта другого
реклама
Таким образом, за такт на SDR SDRAM была возможна одна передача по фронту, а за такт на DDR SDRAM - две передачи по фронту и спаду, и именно поэтому этот тип памяти получил название Double Data Rate
Но чтобы была возможно отправка двух элементов, нужно, чтобы эти два элемента были доступны для передачи. Когда задается адрес столбца, считывается не только этот столбец но и ещё и соседний. Элементы передаются по двум внутренним шинам в буфер ввода/вывода. Это по сути «предвыборка», поэтому эту технологию назвали n-prefetch. Так как выбирается два элемента, то мы имеем дело с 2n-prefetch
Введём понятие буфера ввода/вывода. Буфер ввода/вывода — это вся логика, обеспечивающая сохранение данных от внутренних шин и передачу этих данных на внешнюю шину. Буфер ввода-вывода представляет из себя набор регистров и мультиплексоров.
Таким образом мы за такт частоты ядра 133МГц удвоили количество передаваемых данных. По сути
SDR SDRAM 266MHz = DDR SDRAM 133MHz
DDR2, DDR3, DDR4 и DDR5
Вы, наверное, удивитесь, но технология n-prefetch почти с каждым поколением обновлялась
Давайте чисто теоретически предположим, что передавать внутренних шин от ядра памяти до буфера ввода/вывода будет не 2, а 4. Предположим, что мы можем передать по ним еще несколько столбцов в строке. Тогда за сколько тактов буфер ввода/вывода передаст эти 4 элемента на внешнюю шину? Логично, что если за такт осуществляется две передачи, то для осуществления передачи 4-ех элементов потребуется два такта буфера ввода/вывода. А если мы увеличим частоту буфера ввода/вывода в два раза? Тогда все также потребуется два такта, но эти такты будут в два раза короче. Иначе говоря, эти два такта буфера ввода/вывода на удвоенной частоте есть то же самое, что и один такт ядра памяти. Таким образом, можно получить 4 передачи за такт ядра памяти, что соответствует учетверению частоты памяти. Это можно назвать 4n-prefetch, такое используется в DDR2
Как думаете, чему равно количество элементов на DDR3? Восьми. На DDR3 используется та же самая технология, но частота буфера ввода/вывода в 4 раза больше относительно частоты ядра памяти. И это называется 8n-prefetch
Но DDR4 не использует 16n-prefetch, как вы могли предположить. Там осталась технология 8n-prefetch. А вот DDR5 использует
n-prefetch технология в общем виде
Распишем принцип работы n-prefetch в общем виде
Имеется частота ядра памяти F(Core). Имеется n внутренних шин, по которым передается несколько соседних столбцов одной и той же строки. Внутренние шины памяти передаются в буфер вводы/вывода, работающий на частоте в n/2 раза больше, то есть F(IO) = F(Core) * n/2. Отсюда длина тактов буфера/вывода T(IO) в 2/n раза длиннее, чем длина тактов ядра памяти T(Core), то есть T(IO) = T(Core) * 2/n
Для передачи n элементов требуется n/2 тактов. Зная количество тактов и длину одного такта, можно посчитать время передачи всех элементов
Latency = T * Cycles
Latency = T(IO) * n/2 = T(Core) * 2/n * n/2 = T(core)
Отсюда видно, что время, за которое передается n элементов равно частоте ядра памяти. Таким образом, за один такт T(Core) осуществляется n передач, что то же самое, что увеличение частоты ядра памяти SDR SDRAM в n раз
Критика «реальной частоты»
Итак, если вы прочитали и хорошо поняли текст этой статьи, то вы знаете, что есть два тактовых домена: частота ядра памяти и частота буфера ввода/вывода. Есть ещё частота вывода данных, но это то же самое, что частота буфера ввода/вывода, просто данные выводятся по фронту и по спаду той же самой частоты (за такт произойдет две передачи, но частота остается той же самой).
Если под эффективной частотой понимают частоту вывода данных, то что понимают под реальной частотой? Вот именно, что ничего не понимают
«Таким образом можно сделать вывод, что реальная частота памяти это частота тактового генератора (число электрических импульсов/тактов в секунду), а эффективная частота это реальная частота, умноженная на число бит, передаваемых за один рабочий такт.»
Хорошо, значит, реальная частота – это частота ядра памяти. DDR3 способна передавать за такт ядра памяти 8 бит информации. Но этот же самый автор пишет
«Вот и получается, что для DDR3 указанная реальная частота в 800 МГц равняется 1600 МГц эффективной (800 МГц * 2 бита)»
Неверно. 800 МГц — это частота буфера ввода/вывода, а не частота ядра памяти. Мы умножаем на два, потому что буфер ввода/вывода передает по фронту и спаду, а не потому, что за такт реальной частоты происходит передача двух бит памяти. В комментариях к статье кое-кто даже поинтересовался: «Почему DDR3 не способна передавать больше бит информации за такт?». Способна ещё как
«Почему CPU-Z показывает вдвое уменьшенное значение текущей частоты? Потому что эта программа отображает только реальную тактовую частоту памяти. И вот здесь мы сталкиваемся с ещё одним вектором разделения понятий частоты оперативной памяти – реальная и эффективная. Понятия реальная и эффективная частота памяти появились после выхода на рынок планок памяти типа DDR. Тип-предшественник – память SDRAM - работала только на реальной тактовой частоте, работала за счёт считывания команд только по фронту микросхемы памяти. В памяти типа DDR находится та же микросхема памяти SDRAM, но работает DDR с удвоенной скоростью, т.е. с удвоенным объёмом передаваемых за такт данных. Достигается такая удвоенная скорость работы за счёт двойного считывания команд из микросхемы памяти. И вот частота работы памяти типа DDR называется эффективной. Такое понятие, как реальная частота оперативной памяти, не применяется производителями и продавцами, они при указании характеристик всегда указывают только эффективную частоту. И многие программы-диагносты работают с показателями эффективной частоты, за исключением программ типа CPU-Z.»
Этот автор говорит про удвоенный объем передаваемых данных за такт, но в пример показывает опять DDR3. Говорит: «удвоенных данных за такт за счет удвоенного считывания команд из микросхем памяти». Но мы с вами выяснили, что объем считывания данных из микросхем памяти равен длине пакета, а принцип передачи по фронту и спаду не противоречит возможности передачи этого самого пакета». Вообще этот текст написан очень кривым язык, скорее всего, автор сам не понимает о чем говорит: за какой «такт»? За такт работы ядра процессора, ядра оперативной памяти, буфера ввода/вывода, микронтроллера моей микроволновки?
В том проблема, что под реальной частотой подразумевают частоту ядра памяти. Но на самом деле частота ядра памяти не в 2, а в n раз ниже, чем частота эффективная
Разрядность элементов и длина пакета
Разрядность элементов равна разрядности чипа памяти. В зависимости от количества рангов и чипов, мы можем посчитать разрядность чипа.
Разрядность одного чипа = 64 / количество чипов на ранг
Если ранг один, то количество чипов на ранг – это в принципе и есть количество чипов
Если ранга два и более, то на каждый ранг приходится равное число чипов, то есть число чипов на ранг = число чипов / количество рангов. По предыдущей формуле можно вычислить разрядность чипа
Для любопытных, откуда взялось число 64. Шина данных на любой DDR SDRAM равна 64 (кроме ECC, где имеются 8 дополнительных контрольных битов четности), а ранг по определению – это количество областей 64-бит. Дело в том, что несколько чипов вместе занимают и делят эту область, поэтому мы можем узнать разрядность одного чипа таким образом
Оперативная память имеет характеристику Burst Lenght (BL), длина пакета. Длина пакета напрямую зависит от технологии n-prefetch, так как пакет — это и есть элементы, передаваемые по внутренним шинам от ядра памяти к буферу ввода/вывода. Эта характеристика измеряется в четвертичных словах, то есть Quad Word (QW). На DDR1 длина пакета составляла 2QW, на DDR2 – 4QW и т.д, в соответствии с технологией n-prefetch
Тайминги
Некоторые из вас могут подумать: «если реальная частота гораздо меньше, чем мы думали, то неужели и тайминги гораздо больше? Ведь тайминги синхронизируются по реальной частоте». Тайминги действительно измеряются в тактах. Тактах какой частоты? В тактах частоты шины памяти, а не реальной частоты, она в два раза ниже эффективной памяти. Если нужно посчитать латентность тайминга в наносекундах, то работает формула
T(ns) = 1 / bus_clock(GHz)
Latency = T * Cycles
Вариативность длины пакета От ядра памяти к буферу ввода-вывода идет несколько шин. Предположим, что их число равно 8-ми. За один такт ядра памяти (что соответствует 4-ем тактам буфера ввода-вывода) мы считываем весь пакет целиком. А что если мы удвоим длину пакета? Тогда, не меняя количество шин, за две транзакции, за два такта ядра (что соответствует 8-ми тактам буфера ввода-вывода) можно считать этот удвоенный пакет. Система с длиной пакета, превышающая длину предвыборки, не представляет особого интереса и особой сложности с точки зрения разработчика. Более того, есть способ считывания не 16-ти (в данном случае) последовательных данных со словами, а двух пакетов в одной строке по 8 слов каждый последовательно. Если вы не поняли в чем разница: в первом случае мы задаем адрес строки и столбца и считываем удвоенный пакет за две транзакции (сначала первый пакет, потом второй), а во втором — задаем адрес строки и дважды задаем адрес столбца (первый раз — для первого пакета, второй — для второго) и считываем эти пакеты разными транзакциями, но делаем это последовательно. Причем разницы в производительности нет. Достигается это за счёт того, что после подачи сигнала CAS (подача адреса строки) до начала выдачи слова на шину должен соблюдаться тайминг tCL. За это время подается ещё один сигнал CAS до начала передачи. Тайминг, обозначающий, через сколько после подачи первого CAS подается второй CAS, называется tCCD.
Это называется чтение Back-To-Back.
Мы выяснили, что длина пакета может превышать предвыборку во много раз. Но может ли длина пакета быть меньше предвыборки? В любой статье по оперативной памяти, а в частности про n-prefetch, будет заявлено, что такое в принципе невозможно. В действительности: если шин 8, то передав 4 элемента, только два такта буфера ввода-вывода будут передавать данные, а остальные два будут бесполезными. Но для разработчика-инженера нет преград, поэтому был разработан способ передачи длины пакета меньше, чем длина предвыборки, но без потери производительности. Сделано это за счёт чередования передач двух микросхем памяти, как это показано ниже
Разработка n-prefetch
(для тех, кому интересна цифровая схемотехника)
Для интереса попробуем разработать собственную цифровую схему, реализующую передачу пакета данных. Схема не требует сложных манипуляций с битами, поэтому можно её реализовать через программу logisim с помощью вентилей вручную. У нас имеется система, где от ядра памяти к буферу ввода-вывода передается 4 элемента по 4-ём независимым шинам. Причем элементы равны одному биту (хотя это вовсе не обязательно должно быть так)
За основу буфера ввода-вывода был взят мультиплексор. Здесь представлен 4-ех входовой мультиплексор с двумя линиями управления. На каждый вход мультиплексора подана шина от регистра из 4-ех триггеров. На линии управления циклически подаются сигналы: 00, 01, 10, 11, чтобы каждый вход мультиплексора был выведен на выход. Смена линий управления происходит посредством полусумматора и сумматора. За каждый такт происходит сложение числа 01 и линий управления, но так как триггера два, то после суммы 11 + 01 перенос в старший разряд не происходит, поэтому сумма равна 00. Важнейшим аспектом схемы является синхронизация. Требуется, чтобы за такт ядра памяти происходила передача 4-ех элементов. Так как в logisim отсутсвуют делители/множители частоты, то с помощью конечного автомата был реализован делитель частоты на 4. На мультиплексор подается большая частота, а на ядро памяти — меньшая. Конечный автомат является конечным автоматом Мура, имеет 4 состояния. Имеет выход, равный 1, только в нулевом состоянии. С помощью комбинационной логики вычисляется следующее состояние. Через такт (большей частоты) состояние переходит в следующее и становится текущим, оно же опять проходит через комбинационную логику и вычисляется следующее. Состояния закодированы следующищим образом
состояние 0 = 00
состояние 1 = 01
состояние 2 = 10
состояние 3 = 11
Старший бит — S1. Младший бит – S0. Текущее состояние обозначается апострофом
Тогда верно, что
S0’ = !S0
S1’ = S1(!S0) + (!S1)S0
Выход равен 1 только в первом состоянии, это значит, что Y = !(S1)!(S0) = !(S1 + S0)
Так мы получаем делитель частоты для ядра памяти. За такт ядра памяти одновременно передается 4 элемента в мультиплексор (буфер ввода-вывода). Мы получили собственную небольшую реализацию чтения n-prefetch, но не записи. Это не значит, что запись сложнее реализовать, просто операции чтения критичнее для производительности, поэтому по ходу статьи вы только и видели примеры с чтением, но не с записью. Однако технология также актуальна и для операций записи
Спасибо за внимание, в источниках оставляю только патент о системе с длиной пакета, меньшей, чем длина предвыборки, так как знание об n-prefetch было получено давно и изучено из разных источников
https://patentimages.storage.googleapis.com/17/7f/34/c4ed31c5ae54d4/EP1488323B1.pdf
реклама
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила