Вскрытие покажет: оперативная память
03.04.09Мой Компьютер, №04 (435), 15.01.2007
Ведь если маркетологи стараются показывать широкой общественности только те параметры, которые выставляют их продукцию в наиболее выгодном свете, у нас всегда найдется лишний часок-другой, чтобы порыться в Интернете и раскопать полную спецификацию интересующих нас устройств. И тогда колебаний по поводу «что купить» будет гораздо меньше, уж поверьте. В принципе, по-настоящему плохое «железо» сегодня уже редкий зверь даже в наших диких краях. Производители научились беречь «честь своего мундира», и даже если что-то вышло не так, считают за благо отозвать бракованную продукцию и в кратчайшие сроки предоставить адекватную замену. Поэтому стало очень сложно сказать, какая «железяка» лучше, а какая хуже. Даже при наличии объективных результатов в дело вступает Его Величество Рынок, который корректирует своей могучей дланью цифры на ценниках. И только те, кто упорствует до конца даже в цене, выбывают из бесконечной борьбы за покупателя. Что получается в итоге? Да все просто. Нельзя делить «железо» на «хорошее» и «плохое». Вопрос только в том, что будет лучше всего соответствовать вашим требованиям при тех деньгах, которые вы согласны заплатить. Не более, но и не менее.
Intel vs AMD, ATI vs nVidia, Creative vs HD Audio… Всему свое время. А начнем с того, что в последнее время как-то выпало из поля зрения нашего журнала — с оперативной памяти.
Вся жизнь — в клеточку
Думаю, многие из вас знают, что современная оперативная память состоит из отдельных ячеек, которые благодаря тем или иным параметрам могут хранить и отдавать минимальную порцию информации — 1 бит. Такие ячейки объединяются в двумерные массивы, в которых каждый элемент характеризуется номером строки (горизонтального ряда) и столбца (вертикального ряда). Но давайте пока остановимся на самих ячейках.
На заре компьютерной эры у инженеров, которые создавали первые вычислительные машины, особого выбора не было. Большую часть логических элементов приходилось строить на основе электронных ламп, однако так продолжалось недолго — как только появились первые полупроводниковые элементы, их тут же пристроили в качестве базовых ячеек, хранящих драгоценные нули и единицы. Углубляться в историю каменного века не станем, просто отметим, что на данный момент наиболее распространены именно полупроводниковые ячейки, в то время как память на основе биаксов (колец из ферромагнитных материалов) является скорее экзотикой. Магнитная память использовалась еще в старушке БЭСМ, однако в 2003 году идея была возрождена в виде MRAM, практически ни в чем не уступающей распространенной в то время SDRAM. Главным преимуществом магнитной памяти можно назвать способность очень долго (теоретически — бесконечно) хранить информацию без подведения электричества с тем же успехом, что у всем известной полупроводниковой флэш-памяти, но без ограничения по числу циклов записи. Кстати, в первую очередь именно из-за этого ограничения флэш никогда не станет полноценной заменой для нынешней энергозависимой памяти. 10 тысяч циклов перезаписи — это просто ничтожно мало… Возвращаясь к MRAM, нужно сказать, что несмотря на всю перспективность, такой тип памяти пока что слишком сильно проигрывает в цене своим полупроводниковым собратьям. Хотя кто знает? Возможно, в будущем магниты и вытеснят кремний…
Впрочем, оставим MRAM в покое и посмотрим на два типа полупроводниковой памяти, которые имеются в арсенале создателей компьютерной техники на данный момент.
Начнем с памяти на основе триггеров (SRAM), которую принято называть статической. Для тех, кто не проходил курса электротехники и не был радиолюбителем (конечно, я имею в виду не тех, которые сутки напролет слушают «Русское Радио» или какое-нибудь еще), достаточно будет сказать, что триггер — это простейший полупроводниковый элемент, который может сохранять состояние на своем выходе (выходах) сколько угодно времени (при условии, что на него подается питание). Ну, а сигнал на выходе — это и есть те самые ноль или единичка, в зависимости от присутствия/отсутствия напряжения.
Триггеры могут переключаться очень быстро, требуют небольшого напряжения питания и не нуждаются в «регенерации» своего содержимого (что это такое и почему это так важно, разберем чуть позже). В противовес достоинствам выстроились малый объем (или большая площадь кристалла — это с какой стороны посмотреть), а также высокая стоимость такой памяти (в перерасчете на стоимость одного байта).
Сейчас статическая память практически безальтернативно оккупировала кристаллы современных процессоров в виде кэша (что это такое, надеюсь, все знают), причем на Core 2 Duo кэш занимает большую часть площади! Ну, а для того, чтобы оценить стоимость триггерной памяти в условных единицах за мегабайт, посмотрите на цены похожих процессоров, но с разным объемом кэша. Убедительно? Впрочем, то от AMD, то от Intel поступает информация о революционных технологиях, которые должны уложишь SRAM на лопатки. Посмотрим.
Второй тип полупроводниковой памяти носит гордое имя «динамическая память» (DRAM). Ее базовыми элементами являются не триггеры, а электрические емкости (проще говоря — конденсаторы). Тут уж простите; что такое конденсатор, должен знать каждый школьник, углубляться в подробности не стану. Однако, как вы уже могли догадаться, «ноль» и «единичка» для конденсатора — это состояния «заряжен» и «не заряжен». С «нулем» все понятно, а вот при считывании «единички» невозможно избежать разрядки конденсатора. Вдобавок, конденсаторы могут хранить свой заряд очень недолго, и чем меньше становится размер конденсатора, тем меньше это время. Поэтому в динамической памяти приходится производить такую операцию, как «регенерация» (считать информацию о «нулях» и «единичках» и перезарядить все «единички» заново). Очевидно, что эта операция (абсолютно ненужная для статической памяти) делает DRAM медленнее. Впрочем, если бы только это… Тем не менее, микроскопические конденсаторы являются гораздо более простыми элементами, чем триггеры. Поэтому и производственная стоимость DRAM гораздо ниже.
Собираем кирпичики
Как уже было сказано выше, ячейки в виде микроконденсаторов собираются в прямоугольные блоки, состоящие из строк и столбцов. Именно из таких блоков и состоят микросхемы памяти. Блоки, как вы понимаете, могут быть самого разного объема в зависимости от длины строк и высоты столбцов. Простым перемножением одного на другое получаем количество элементарных ячеек (конденсаторов), которые составляют данный блок — это и будут те самые мегабиты, из которых делением на 8 получаются уже мегабайты, которыми принято характеризовать объем памяти. Углубляться дальше в структуру микросхем памяти не будем. Отметим только то, что основу современных чипов составляют блоки по 64, 128 или 256 мегабит с четырех-, восьми- или шестнадцатибитной шириной полосы передачи данных. До физического уровня структуры чипов памяти простому пользователю (равно как и программисту) уже никак не добраться, да и не нужно это. Зато важно отметить, что микросхемы, в свою очередь, разделяются на так называемые логические банки (как правило, 2 или 4). Это ухищрение позволяет минимизировать задержки, возникающие из-за необходимости перезарядки конденсаторов после каждой операции чтения или просто через некоторые промежутки времени (не забыли, да?). В то время, пока один логический банк «перезаряжается», второй может быть доступен для работы, и наоборот.
Далее микросхемы памяти объединяются на текстолитовой плате уже в физические банки. Если планка памяти должна иметь 64-битный интерфейс, то для ее набора (одного банка) потребуется, например восемь микросхем с восьмибитными интерфейсами (8´8=64) или четыре — с шестнадцатибитными (4´16=64). В принципе, никто не мешает собрать на одной планке сразу два банка (обычно такие модули памяти имеют микросхемы по обе стороны текстолитовой платы). Конечно, так получается компактнее, но все равно физические банки используют одну и ту же шину памяти. Поэтому чем больше банков, тем больше нагрузка как на саму шину, так и на контроллер памяти, которому, помимо всего прочего, приходится еще и разбираться, какому из банков отсылать запрос на то или иное действие.
Общая производительность подсистемы памяти, конечно же, зависит и от того, насколько хорошо контроллер справляется с раздачей команд, поэтому кроме задержек, возникающих в самой памяти (о чем будет чуть ниже), необходимо учитывать и задержки командного интерфейса. Кстати, на процессорах Athlon 64, в которых имеется встроенный контроллер памяти, задержки командного интерфейса поддаются регулированию. В BIOS этот пункт должен называться Command Rate и иметь два положения — 1Т и 2Т. Первый режим означает, что контроллер должен отсылать всю управляющую информацию на модуль памяти за один такт, а при втором режиме команды распределяются на два такта. Очевидно, что 2Т должен повлиять на производительность в худшую сторону, однако при работе с крупными блоками данных (когда команды отсылаются не очень часто) и/или при хорошей организации кэша на самом процессоре падение скорости работы может быть минимальным. В то же время стабильность явно увеличивается.
Про макроструктуру модулей памяти осталось сказать только то, что на каждой планке находится микросхема, которую называют Serial Presence Detect (SPD). Ее можно назвать таким себе «паспортом» модуля памяти, в котором записаны все основные параметры микросхем, составляющих этот модуль, оптимальные тайминги, имя производителя и так далее. В модулях DDR2 к информации, содержащейся в SPD, добавили оптимальный температурный режим, который для DDR2 гораздо более важен, чем для «простого» DDR. Но об этом опять-таки успеем поговорить позже. До этого момента нужно еще разок вернуться к столбцам и строкам, чтобы разобраться в том, что такое тайминги (задержки) и как они влияют на производительность памяти.
Корень зла
Итак, мы снова смотрим на базовый блок конденсаторов, состоящий из рядов и столбцов. Для чтения данных из какой-либо конкретной ячейки такого блока прежде всего нужно указать его адрес (строку и столбец). Для прямоугольных блоков (с разной длиной строк и столбцов) необходимо две отдельных адресных линии, однако если блок прямоугольный, то можно обойтись и одной, по которой адреса строк и столбцов будут передаваться последовательно. Правда, при этом на передачу адреса придется затратить уже два такта, но для принятой структуры памяти это не критично — все равно до выборки по столбцу нужно будет активизировать строку (сейчас станет понятно почему). Но для того, чтобы внутренний контроллер мог определять, какой адрес в данный момент находится на линии (строки или столбца), добавили две элементарных вспомогательных однобитовых адресных линии — RAS и CAS (row/column address strobe). Первая сигнализирует о том, что пора принимать адрес строки, а вторая — о том, что подоспел и адрес столбца.
Далее пойдем поэтапно.
1. Начинается все с процессора, которому требуется информация из определенного участка памяти, и он отправляет запрос на контроллер, а тот уже, в свою очередь, вычисляет конкретные адреса столбцов и строк, которые нужно подать на микросхему памяти. Этот этап целиком зависит от чипсета (для большинства платформ) или от процессора (для Athlon 64, в которых, как мы знаем, контроллер памяти находится прямо на процессоре). Именно тут и проявляется уже упомянутая задержка командного интерфейса, которая зависит от памяти лишь косвенно — через количество установленных физических банков.
2. Микросхема памяти получает сигнал RAS, который говорит о том, что пора заглянуть на адресную линию и активировать соответствующую строку памяти.
3. После определения нужной строки все ее содержимое «сливается» в специальный буфер, носящий название Sence Amp (по-нашему это можно перевести как «усилитель уровня»), а сама строка помечается как активная.
4. Поступает сигнал CAS, сигнализирующий о том, что по адресной линии уже можно считывать номер столбца, однако реально он считывается уже не из самого массива памяти, а из «усилителя уровня» (ведь конденсаторы после определения адреса строки пришлось разрядить).
5. После считывания необходимого бита из усилителя уровня все данные, которые в нем содержались, возвращаются на свое предыдущее место — в строку массива. Таким образом одновременно происходит и «перезарядка» всех ячеек этой строки. Впрочем, если команда контроллера не предусматривала возврат данных после чтения, усилитель уровня просто опустошается, а сигналы RAS и CAS возвращаются в «спокойное» положение.
Все, блок памяти снова готов к принятию команд.
При этом нужно учесть, что по сугубо электрофизическим причинам все сигналы добираются до микросхемы не мгновенно, а лишь спустя некоторое время. Проблема заключается в том, что ток распространяется по проводам не моментально, поэтому чем длиннее проводник, тем медленнее поступает сигнал (кстати, в связи с этим при создании схемы «дорожек» на текстолитовой основе инженеры стараются делать параллельные «дорожки» как можно более близкими по длине, иначе сигналы, отправленные с источника в одно и то же время, придут к точке назначения вразнобой, а это в не самом худшем случае может привести к потере одного-двух лишних тактов). То же и с частотой — при ее повышении проводники начинают превращаться в приемо-передающие антенны, создавая помехи друг другу. Затем не забудьте, что благодаря наличию какого-никакого, а все-таки сопротивления, любой проводник еще немного и конденсатор. Чем больше его длина и подаваемое напряжение — тем сильнее проявляются эти свойства, а конденсатор и проводник, как вы понимаете, понятия взаимно противоположные… В общем, причин, ограничивающих повышение скорости работы микросхем, предостаточно. При этом большая их часть упирается в размеры элементов схемы и проводников. Отсюда и стремление к миниатюризации, переход на новые техпроцессы, использование напряженного кремния и так далее и тому подобное. Априори получается, что память, имеющая более мелкие элементы, требующие более низкого уровня питания, должна быть способна работать на более высоких частотах и с меньшими задержками. Однако почему DDR имеет большие тайминги, чем обычная SDRAM, а DDR2 — чем DDR? Давайте разбираться, только для этого придется немного углубиться в историю.
Почти по Дарвину
После того, как электронные лампы были вытеснены полупроводниковыми элементами, развитие конструкции схем памяти двигалось последовательно. Без каких-либо революций. С каждым новым типом DRAM инженеры всего лишь оптимизировали отдельные задержки, стараясь как можно активнее задействовать сугубо логические приемы. Ну, а технология, само собой, двигалась в сторону миниатюризации независимо от всех ухищрений, которые мы сейчас и рассмотрим.
Первые модули памяти DRAM работали по описанной выше схеме, четко и последовательно выполняя каждый этап считывания данных. Однако если среднее время задержки в 200 нс соответствовало примерно двум тактам первых IBM-совместимых х86, то ко времени появления первых камней Pentium это значение доходило уже до 10‑12 тактов при шине, работающей на 66 МГц.
Тут надо снова прервать стройный ход повествования и уточнить значение термина «синхронная память». Изначально модули памяти были асинхронными относительно частоты системной шины и работали на своей частоте. Проще говоря, память и шина шли вразнобой, поэтому запрос на данные (в соответствии с частотой шины) мог прийти к памяти в момент, когда она находилась на середине «своего» очередного такта. В итоге запросу приходилось ждать лишние полтакта, чтобы память соизволила принять его и приступить к обработке. С появлением синхронной памяти (работающей на той же частоте, что и системная шина) от потерь времени на такое «ожидание» удалось избавиться. Впрочем, гармония продлилась не так уж долго, поскольку в современных платформах шина памяти не связана напрямую с процессорной шиной. Например, в уже упомянутых Athlon 64, несмотря на то, что контроллер находится на процессоре и работает на одной частоте с ним, для перевода этой частоты в мегагерцы шины памяти имеет отдельный множитель, далеко не всегда совпадающий с множителем процессорной шины. То же самое касается и процессоров Core Duo / Core 2 Duo / Core 2 Quad. При частоте шины памяти 200 МГц (800 DDR) процессор может работать на «своей» шине в 233 МГц (при множителе процессора, равном 10, получим его частоту 2.3 ГГц). Однако в любом случае проблема с «перекрытием» тактов минимизирована, поскольку теперь контроллер «пляшет» от частоты процессора, а не его шины.
Так, с этим разобрались, возвращаемся к оптимизации задержек.
Итак, первым делом встал вопрос, зачем сбрасывать состояние Sense Amp’a, если нужно считать не только один бит, но и несколько последующих (или хотя бы хранящихся в той же строке)? Ответом стало введение понятия «сокращенных адресов», благодаря которым при считывании больших «кусков» информации можно было избавиться от некоторых задержек, кроме задержки на CAS (определение столбца внутри уже загруженной в усилитель строки), выдачу данных на буфер обмена и периодическую перезарядку ячеек. Правда, если данные нужно читать «вразнобой», то все преимущество такого нововведения сходит на нет. Да, такой тип памяти назывался FPM DRAM (Fast Page Mode).
Следующим этапом эволюции стала EDO DRAM (Extended Data Out), в которой применили триггер, фиксирующий значение CAS на то время, пока данные выгружаются из усилителя уровня в буфер обмена с шиной памяти. В результате для получения следующего адреса столбца не нужно ждать до окончания передачи данных. На этом было сэкономлено почти 30% времени работы памяти.
Очередная идея была связана с тем, что объемы обрабатываемых данных возросли до такой степени, что ситуация, в которой требовалось прочитать значение только одной ячейки памяти, превратилась в большую редкость. Поэтому вполне логичным стало введение в конструкцию еще одного компонента — счетчика адресов столбца, который, вообще не дожидаясь сигнала CAS от контроллера, заставлял отправлять в буфер обмена четыре бита подряд. Такая память носила название BEDO RAM (Burst EDO) и будто бы отлично подходила для использования с новыми на то время процессорами Pentium (они по своей архитектуре обрабатывают не меньше четырех смежных битов информации за одно обращение к памяти). Но бедой BEDO стал тот факт, что она оставалась асинхронной, как прямая наследница самой «древней» DRAM.
Специально для новых процессоров была разработана первая синхронная память, которую так и назвали Sychronous DRAM (SDRAM). Нововведений было немало. Кроме собственно синхронности, адреса столбцов и строк стали приходить одновременно, чтобы озадачить один логический банк памяти за один такт, а в следующем такте выдать ценные указания уже второму логическому банку (надеюсь, начало статьи еще не забыто, и вы помните, что такое логические банки… в общем, впервые они появились в SDRAM). В дополнение к названному была «доведена до ума» идея BEDO RAM, поскольку SDRAM оснащалась полноценным счетчиком адреса столбца. Теперь можно было получать не только жестко установленные 4 бита, а вообще сколько влезет в усилитель уровня — хоть всю строку сразу. Перезарядка ячеек, которая раньше требовала закрытия активной строки, теперь происходила автоматически, без каких-либо команд. И действительно, открытая строка находится в усилителе уровня, ее перезаряжать пока не надо. Зато остальные строки абсолютно ничем не заняты и на состояние активной строки никак не влияют. Зачем же ее закрывать при каждой перезарядке других строк?
Ну, и последним по счету (но никак не по важности) стал переход на 64-битную шину передачи данных, что означало при той же частоте удвоенную скорость передачи прочитанной информации. Очевидно, что старый 32-битный интерфейс уже не мог «потянуть» поток данных, увеличившийся в разы по сравнению с тем, который могла выдавать память типа DRAM, для которой он и был создан.
В итоге SDRAM могла работать на частоте системной шины синхронно с процессором и обеспечивать именно ту производительность, на которую и рассчитывали создатели Pentium, вводя в него ограничение на минимальный пакет данных. Задержки внутри логических банков были минимизированы благодаря распараллеливанию всего, что только можно было распараллелить, а задержки на буфере обмена с шиной в большинстве ситуаций делились на количество логических банков. SDRAM надолго стала стандартом и дальнейшая эволюция памяти пошла по экстенсивному пути наращивания тактовой частоты вслед за системной шиной.
Начинаем есть собак
Надеюсь, после прочтения всего вышенаписанного вы уже смогли сообразить, что с учетом всех оптимизаций память превратилась в довольно неоднозначный элемент системного блока. После прохождения этапов эволюции от DRAM до SDRAM производительность стала зависеть не только и не столько от рабочей частоты микросхем и разрядности шины, сколько от конкретной задачи, выполняемой в данный момент процессором. Считывание данных большого объема при возможности одновременно задействовать все доступные логические банки происходит намного быстрее, чем чтение «вразброс». И надо отдать должное производителям процессоров, которые благодаря увеличению объемов и быстродействия процессорного кэша свели к минимуму потребность частому обращению к памяти за мелкими порциями данных. Но какой бы удачной ни была конструкция SDRAM, прогресс не может стоять на месте.
Однако прежде чем мы перейдем к рассмотрению актуальных на сегодняшний день типов оперативной памяти, нужно еще раз сделать перерыв и углубиться в изучение того, что определяет производительность SDRAM на микроуровне. А именно — таймингов. Конечно, в DDR не обошлось без изменений в структуре отдельных блоков, но они уже не были такими кардинальными, как в случае с SDRAM. Поэтому все наши выкладки будут так же актуальны и для DDR/DDR2. К тому же без понимания, откуда берутся это загадочные «5-5-5-15» и другие числа, невозможно будет понять и то, почему для DDR они выше, чем для SDRAM. Когда, казалось бы, чем меньше задержки — тем лучше… Все верно, но наберемся терпения и приступим к рассмотрению немного скучных, но важных деталей.
После получения сигнала RAS и адреса строки происходит ее активизация (читай — перенос в усилитель уровня). Затем вполне логично предположить, что строку активизируют не просто для того, чтобы на нее полюбоваться, а чтобы считать данные на внешний буфер. И на это требуется некоторое время, поэтому до определенного момента строка не может быть «закрыта». Вот этот промежуток и называется минимальным временем активности строки (t-RAS).
С другой стороны, пока какая-то одна строка является открытой, читается/перезаписывается и, соответственно, занимает усилитель уровня, никакая другая строка из этого же блока ячеек не может быть открыта для чтения. Для того, чтобы активизировать вторую строку, нужно дождаться закрытия первой (выгрузки ее из усилителя уровня назад в банк), и отсюда получается вторая величина — минимальное время цикла строки (t-RC), которое должно пройти от активизации одной из строк до того момента, когда станет возможной активизация другой.
Тем не менее, многобанковая структура SDRAM позволяет работать с отдельными банками независимо. Поэтому, несмотря на только что активизированную строку в одном из банков, можно тут же активизировать другую строку в другом банке. Ограничение на промежуток между активизацией строк в разных банках принято так и называть Row-to-Row Delay (t-RRD).
Если сигнал RAS (плюс адрес строки) является фактически сигналом на активизацию (загрузку в усилитель уровня), то CAS (плюс адрес столбца) в свою очередь можно приравнять к сигналу на чтение или запись. Этот параметр называется RAS-to-CAS Delay (t-RCD) и являеися «составной частью» t-RAS.
По прошествии t-RAS начинается последовательное считывание данных в том количестве, которое было запрошено процессором (как мы уже знаем, не менее 4 бит) из усилителя уровня в буфер обмена, откуда информация поступает уже непосредственно на шину памяти и в виде потока электронов топает по направлению к процессору… В общем, вы уже догадались, время, которое затрачивается на данную операцию, называется задержкой сигнала на считывание (или просто — CAS) и обозначается как t-CL. Учитывая, что все оптимизации процесса чтения сводятся к тому, чтобы минимизировать время, которое затрачивается на обработку запросов, критичным остается время обработки последнего из них. Того, от которого уже просто никак не избавиться. Таким сигналом и является CAS. В итоге получается, что t-CL едва ли не в большей степени определяет реальную производительность банка памяти, чем остальные задержки.
При записи до последнего этапа все происходит по тому же сценарию с теми же задержками. Как правило, данные, которые необходимо записать, приходят к памяти одновременно с сигналом на активизацию строки, поэтому отличие от процесса чтения заключается лишь в том, что с получением сигнала CAS данные не считываются из усилителя уровня, а записываются в него. И в результате мы получаем два варианта для замены параметра t-CL.
Если свежезаписанные данные нужно тут же считывать обратно, усилитель уровня остается «при своих» и строка не закрывается. Значит, нужно учесть только время между подачей окончательного сигнала CAS на запись и возможностью подачи очередного CAS, но уже на чтение. Этот промежуток носит название «задержки между записью и чтением» (t-WТR). Если же данные записаны и не понадобятся процессору в следующем же такте (а это наиболее частый вариант), то время отсчитывается от того же первого CAS, но уже до возможности подачи команды на возврат данных из усилителя уровня в родную строку.
Последнее, что осталось назвать, это время на подзарядку (возврат данных) строки (t-RP).
Немного особняком стоит время, необходимое на передачу пакета данных, предназначенного для обработки (хоть чтения, хоть записи) по внутренней шине непосредственно к микросхеме. Дело в том, что «пакет» состоит из так называемых «слов» — минимального для данной микросхемы числа одновременно обрабатываемых битов. Длина «слова» определяется разрядностью внешней шины микросхемы памяти (одной микросхемы, а не всей планки!), которая может довольно сильно варьироваться (от 4 бит и выше). В то же время пакет может состоять из двух, четырех или восьми «слов». Соответственно, если память SDRAM имеет два логических банка, то за один такт она сможет «проглотить» два «слова» данных, соответствующих разрядности микросхем. Если логических банков четыре — то за один такт можно отдавать ровно четыре «слова» данных, и так далее. В итоге число тактов, необходимых на передачу всего пакета, можно получить простым делением количества слов, из которых он состоит, на количество логических банков в памяти.
* * *
Ну что ж, считайте, что самую скучную часть материала вы осилили. Однако без нее, как я уже говорил, будет трудно понять, чем так хороша (если хороша) память DDR и DDR2, почему в настольных системах так и не прижилась память типа RDRAM (но для нее еще не все потеряно), и что нас ждет в ближайшем будущем. До следующего номера!
Bateau
Web-droid редактор
Не пропустите интересное!
Підписывайтесь на наши каналы и читайте анонсы хай-тек новостей, тестов и обзоров в удобном формате!


Обзор ноутбука Acer Predator Helios Neo 16: золотая середина



Мы уже тестировали сбалансированные игровые ноутбуки Acer Nitro 16, Predator Helios 16 и Predator Helios Neo 14. Сегодня расскажем об увеличенной версии последнего — Predator Helios Neo 16

Монитор ViewSonic ColorPro VP2788-5K планируется как альтернатива Apple Studio Display ViewSonic монитор
ViewSonic представила монитор ColorPro VP2788-5K, предлагающий альтернативу Apple Studio Display по более доступной цене.
Kensington выпустила мышку с трекболом концепт мышка
Компания Kensington стала обладателем престижной награды IF Design Award 2025 за беспроводную мышь Expert Mouse TB800 EQ Multi-Connection Trackball.