Что такое параметры синхронизации памяти
Что такое синхронизация ОЗУ и почему она имеет значение?
Оперативная память является основным компонентом компьютера, но мы не будем много говорить об этом. Если у него нет конструкций радиораспределителя Rad и аксессуаров RGB, RAM редко получает день на солнце. Процессор устанавливает условие, при котором работает остальная часть вашей сборки, но вы можете получить немного больше скорости от вашего ПК с более быстрой оперативной памятью. И тактовая частота, и время, или задержка определяют скорость вашей оперативной памяти.
Нахождение тактовой частоты вашей оперативной памяти
Скорость вашей оперативной памяти можно узнать на коробке или модуле с помощью программного обеспечения, такого как CPU-Z, или в BIOS / UEFI. Полное имя вашего модуля ОЗУ будет примерно таким:
DDR4 описывает поколение DDR, с которым совместим чип. Тот же номер (2, 3 или 4) появляется в номере ПК, описывая то же самое.
Часто говорят, что первое четырехзначное число, 3200 в нашем примере, показывает тактовую частоту оперативной памяти в мегагерцах. Это на самом деле немного маркетинговый обман, но не расстраивайтесь: недоразумение напрямую поощряется производителями ПК и розничными продавцами. Это число фактически указывает скорость передачи данных, измеренную в мегатрансферах в секунду, или 106 операций передачи данных в секунду.
В DDR RAM фактическая тактовая частота составляет половину скорости передачи данных – в нашем примере 1600 МГц, хотя даже она повышается с внутренней тактовой частоты ОЗУ 400 МГц с помощью мультипликативных битов предварительной выборки. Но поскольку DDR передает данные дважды за такт, можно сказать, что эффективная тактовая частота в два раза выше реальной тактовой частоты. В результате скорость передачи данных эффективна так же, как и видимая тактовая частота ОЗУ в МГц.
Номер ПК, 25600 в нашем примере, показывает скорость передачи, измеренную в мегабайтах в секунду (МБ / с). Умножив скорость передачи данных (в мегатрансферах) на ширину шины ввода-вывода (64-битной во всех современных материнских платах), мы можем определить максимально возможную скорость передачи:
3200 мегапередач в секунду x 64 бита на передачу / 8 бит на байт = 25600 МБ / с
Каждый номер независимо говорит вам, как быстро работает ОЗУ. Но оба числа предоставляют одну и ту же информацию, только в разных формах.
Каковы сроки ОЗУ?
Синхронизация – это еще один способ измерения скорости оперативной памяти. Времена измеряют задержку между различными общими операциями на чипе RAM. Задержка – это задержка между операциями. Это можно считать «временем ожидания». Минимальное время задается спецификацией, поэтому вы можете прочитать таблица самых быстрых таймингов ОЗУ для каждой спецификации DDR.
Мы измеряем время RAM в тактах. Ритейлеры перечисляют время как четыре числа, разделенные черточками, например 16-18-18-38. Меньшие числа быстрее. Порядок чисел говорит вам об их значении.
Первый номер: CAS Latency (CL)
Время, которое требуется памяти для ответа на процессор, – это задержка CAS (CL). Но CL нельзя рассматривать изолированно. Эта формула преобразует синхронизацию CL в наносекунды, которая основана на скорости передачи в ОЗУ:
В результате более медленная RAM может фактически иметь более низкую фактическую задержку, если у нее более короткий CL.
Второй номер: TRCD
Модули ОЗУ используют сетку для адресации. Пересечение строк и номеров столбцов указывает конкретный адрес памяти. От адреса строки к задержке адреса столбца (TRCD) измеряется минимальная задержка между вводом новой строки в память и началом доступа к столбцам внутри нее. Вы можете думать об этом как о времени, которое требуется ОЗУ, чтобы «добраться» до адреса. Время получения первого бита из ранее неактивной строки составляет TRCD + CL.
Третий номер: ГТО
Время предварительной зарядки строки (TRP) измеряет задержку, связанную с открытием новой строки в памяти. Технически, он измеряет задержку между выдачей команды предварительной зарядки для простоя (или закрытия) одной строки и командой активации для открытия другой строки. Это часто идентично второму номеру. На задержку обеих операций влияют одни и те же факторы.
Четвертый номер: TRAS
Время активной строки (TRAS) измеряет минимальное количество циклов, в течение которых строка должна оставаться открытой для правильной записи данных. Технически он измеряет задержку между командой активации в строке и выдачей команды предварительной зарядки в той же строке или минимальным временем между открытием и закрытием строки. Для модулей SDRAM TRCD + CL рассчитывает TRAS.
Заключение
Эти задержки ограничивают скорость вашей оперативной памяти. Но спецификации ОЗУ устанавливают предел, а не физику. Контроллер памяти, который управляет вашей оперативной памятью, применяет эти тайминги, что означает, что они настраиваются (если материнская плата разрешает это). Вы можете получить производительность из своей оперативной памяти, разогнав и сократив время на несколько циклов.
Разгон оперативной памяти – наиболее темпераментный из методов аппаратного разгона, требующий наибольшего количества зависаний и экспериментов. Но более быстрая ОЗУ сокращает время обработки для рабочих нагрузок, связанных с ОЗУ, повышая скорость рендеринга и скорость отклика виртуальной машины.
Эта статья полезна? да нет
Полное руководство по покупке оборудования
Хотите узнать, как выбрать оборудование для вашей установки? Полное руководство по покупке оборудования показывает, на что обращать внимание при покупке оборудования.
Получи это сейчас! Больше электронных книг »
Как избавиться от разрывов изображения в играх: о вертикальной синхронизации V-sync
Содержание
Содержание
Проблемы с качеством изображения в видеоиграх могут возникнуть у любого геймера. Независимо от того насколько мощный у вас ПК. Хотя на старых «машинах» такое встречается все же чаще. В статье разберем, что такое V-sync и чем отличается от G-Sync или FreeSync.
Tearing
Разрывы кадров (известные также как тиринг, от англ. Tearing), словно некто порезал картинку в игре на части и неровно склеил, могут серьезно попортить нервы геймеру. Не дав вам возможности, не то что с головой погрузиться в игру, но и просто нормально ее пройти. Выглядит это так:
Чтобы понять, как бороться с разрывами изображения, нужно знать причину их появления. Тут все предельно просто — тиринг вызван отсутствием синхронизации работы видеокарты и монитора. То есть видеокарта генерирует кадры с непостоянной частотой (это называется FPS, фреймрейт). Скорость создания новых кадров зависит от сложности 3D-сцены в видеоигре. Монитор же способен выводить кадры только с фиксированной частотой. Вот из этого несоответствия и рождаются разрывы изображения.
Если бы видеокарта по умолчанию успевала бы отрисовывать кадры перед отправкой их на монитор (как показано на схеме), то разрывы картинки канули бы в Лету. Но это недостижимая мечта.
Для плавной картинки, которую способно воспринимать человеческое зрение нужно минимум 25 к/с, иначе задержки становятся видны невооруженным глазом. Например, у вас монитор с частотой обновления 60 Гц (60 к/с). И слабенькая видеокарта, которая не справляется с генерацией кадров. Она не поспевает за монитором — тот обновляет картинку быстрее, чем видеокарта обрабатывает новые сцены. Поэтому, вместо нового целого кадра, который видеочип не успел создать полностью, монитору приходится показывать половину нового и половину старого кадра. Это и есть разрыв изображения.
Понятно, что эта конкретная проблема вызвана программной стороной медали. Поэтому и исправлять ее мы будем тоже программно.
Частота обновления монитора
Но прежде небольшое лирическое отступление про мониторы. Разные модели могут отличаться частотой обновления изображения. Стандартные 60 Гц — для обычных геймеров, максимальные 240 Гц — для киберспортсменов. Чем выше частота (известная также как вертикальная разверстка монитора), тем чаще обновляется изображение. И тем выше шанс, что задержек изображения и разрывов станет меньше. Однако в корне это проблему не решает. Есть куда более изящное решение, не требующее от вас покупки нового «киберспортивного» монитора.
Схема, наглядно показывает разницу во времени для мониторов с разной частотой обновления.
Еще лучше разницу частоты обновления в мониторах демонстрирует данное видео.
V-Sync — вертикальная синхронизация
И тут на сцену выходит технология V-Sync, известная как вертикальная синхронизация. Каждый внимательный геймер находил такой пункт в настройках практически любой видеоигры. При желании ее можно найти и в интерфейсе для вашей видеокарты под названием «Вертикальный синхроимпульс» (для интерфейса Nvidia). Это пригодится, если в настройках игры нет пункта «Вертикальная синхронизация» (такое часто можно наблюдать в инди-играх).
Вертикальная синхронизация — это технология, которая синхронизует работу видеокарты и монитора. При ее включении генерация кадров графическим процессором привяжется к частоте отображения кадров монитора.
Какие плюсы несет игроку такая привязка? Во-первых, гарантированно исчезнут разрывы изображения.Теперь кадры будут поступать на монитор в такт с частотой обновления изображения. Картинка в видеоигре станет плавной и красивой.
Во-вторых, если видеокарта мощная и выдает FPS больше, чем позволяет отобразить стандартный монитор (60 Гц), то вертикальная синхронизация снизит нагрузку на видеочип. Это позволит уменьшить нагрев видеокарты и шум системы охлаждения. Нетрудно догадаться, что это продлит срок службы графического процессора.
Казалось бы, все прекрасно. Врубай V-Sync и наслаждайся игрой. Но не тут то было. Подводные камни вертикальной синхронизации куда больше айсберга, потопившего легендарный Титаник. Большинство геймеров V-Sync выключают и терпят разрывы кадров. Почему?
Схематичная работа видеокарты и монитора при отключенной вертикальной синхронизации. Картинку рвет на две части.
Потому что включенная V-Sync может вызывать задержки вывода картинки (тормоза, фризы, инпут-лаг) во время игры. Это связано с тем, что рендеринг кадра в сложной сцене занимает больше времени, чем цикл отображения изображения на мониторе. И, если без V-Synk монитор покажет нам разорванную картинку из двух кадров, но без задержек, то в обратном случае мы увидим на экране снова старый кадр. То есть игра, хоть и на короткое время, но подвиснет.
Схематичная работа видеокарты и монитора при включенной вертикальной синхронизации. Один и тот же кадр нам показывают два раза. А это означает подвисание картинки.
Тогда зачем она нужна? Вертикальная синхронизация хороша для «медленных» игр с одиночным прохождением. Таких, где вопрос визуальной красоты стоит важнее, чем скорость геймплея. Например, The Vanishing of Ethan Carter. Также ее рекомендуют включать, если вы играете в старую игру на мощном ПК (чтоб увеличить срок службы видеочипа).
Существует еще Adaptive Sync — адаптивная синхронизация, которая представляет собой улучшенную версию вертикальной. Она «адаптируется» под ситуацию и работает так: если появились разрывы — убирает их, включая V-Sync. А если картинка сильно тормозит — ускоряет ее, отключая V-Sync. Что приводит к появлению тиринга. Это, своего рода, «костыль», который кардинально проблему не решает.
В итоге игроки оказываются перед выбором: плавная картинка с задержками или рваное изображение, но без тормозов. Куда не кинь — всюду клин. Однако разработчики NVIDIA сумели избавить игровую индустрию и от этой дилеммы.
G-Sync — синхронизация от Nvidia
Отличие G-Sync от V-Sync заключается в том, что за рендеринг кадров и вывод их на монитор здесь полностью отвечает видеокарта. Она генерирует кадры и «приказывает» монитору их выводить только тогда, когда кадр полностью отрисован. При таком подходе частота обновления изображения из постоянной величины превращается в динамическую (при V-Sync или без нее — время обновления всегда жестко фиксировано). То есть, как только кадр готов, он сразу же появляется на экране — игроку не приходится ждать окончания цикла обновления изображения.
Плавность изображения – результат работы G-Synk. Кадры поступают на монитор сразу же после их полной отрисовки
Технология G-Sync избавляет геймера от разрывов изображения, зависаний картинки, рывков и артефактов, связанных с выводом кадров на монитор. Плавная быстрая цельная картинка — предел мечтаний true-геймера, но…
Во-первых, G-Sync имеет ограниченный диапазон использования, выраженный в FPS: от 30 к/с до 240 к/с. Максимальная планка зависит от вашего монитора. Например, 30–60 к/с для стандартного 60 Гц экрана. И если FPS упадет ниже границы и станет 25 к/с, то толку от G-Sync будет не больше, чем от обычной вертикальной синхронизации.
Во-вторых, воспользоваться G-Sync смогут только те пользователи, у которых и видеокарта, и монитор поддерживают данную технологию. И к тому же, оснащены популярным интерфейсом DisplayPort 1.2. И если с видеочипом все просто (G-Sync поддерживают все видеокарты, начиная с GeForce GTX 650 Ti Boost и выше), то монитор, возможно, придется сменить. А модели, поддерживающие данную технологию, стоят дороже, чем устройства без нее. Но и тут у нас есть альтернатива…
FreeSync — синхронизация от AMD
FreeSync — это аналог и ответ компании AMD на технологию Nvidia G-Sync. Она обеспечивает все те же прелести, что и ее предшественник, но за меньшую стоимость. Это объясняется тем, что G-Sync это запатентованная технология от Nvidia, использование которой требует лицензии (то есть дополнительных трат от производителей мониторов). FreeSync от AMD распространяется бесплатно.
Для ее использования вам понадобятся: подходящая видеокарта, монитор и интерфейс DisplayPort. Здесь подойдет видюха, начиная с серии Radeon HD 7000, выпущенной в 2012 году и любые новые экземпляры. Мониторов, поддерживающих данную технологию, тоже немало. И стоят они значительно дешевле, чем их G-Synk конкуренты. Еще один плюс FreeSync — увеличенный диапазон использования от 9 к/с до 240 к/с.
Отметим, что FreeSync можно запустить, даже имея на борту связку — видеокарта Nvidia+FreeSync монитор. Нужна лишь любая видеокарта Nvidia Geforce серии 10 (с архитектурой Pascal) и более новые, поддерживающие DisplayPort Adaptive-Sync. И немного сноровки для включения FreeSync в настройках NVidia.
Существует несколько уровней технологии FreeSync. На скриншоте хороша видна разница между ними.
Оценить разницу в ощущениях от изображения без вертикальной синхронизации, с ней, а также с G-Sync (на FreeSync будет аналогично) можно на видео ниже.
Когда целесообразно использовать G-Sync или FreeSync? Если у вас частота монитора существенно выше FPS. Например, у вас топовый 144 Гц монитор и устаревшая видеокарта выдающая, например, 30 к/с. В таком случае использование этих технологий эффективно и оправдано. Если ситуация обратная — современная видеокарта последних серий и монитор 60 Гц — читаем дальше.
FastSync и Enhanced Sync
Чтобы окончательно вас запутать в ворохе всех этих технологий, добавим, что существуют еще два вида синхронизаций — FastSync (быстрая синхронизация) от Nvidia и Enhanced Sync (улучшенная синхронизация) от AMD. Это две аналогичные технологии, которые условно можно назвать промежуточным звеном между V-Sync и G-Sync (FreeSync).
Преимущества быстрой/улучшенной синхронизаций налицо: они убирают разрывы и задержки изображения и при этом не требуют покупки нового монитора. Только наличие подходящей видеокарты. Для Fast Sync это видеокарты с архитектурой Pascal и Maxwell, включая Geforce GTX 1080, GeForce GTX 1070 и GeForce GTX 1060. Enhanced Sync поддерживается любыми графическими процессорами и их комбинациями на основе архитектуры GCN и (или) дисплеями с поддержкой технологии AMD Eyefinity.
Но и здесь есть свои ограничения. Чтобы вышеупомянутые технологии приносили толк, нужно чтобы FPS был значительно выше, чем частота монитора. Например, при FPS 120 к/с и частоте монитора 60 Гц использовать быструю/улучшенную синхронизацию имеет смысл.
Кому это нужно? Обладателям мощных видеокарт и стандартных мониторов 60 Гц. Если монитор 144 Гц, а видеокарта устаревшая и выдает FPS в 75 к/с, то FastSync и Enhanced Sync вам не нужны. Здесь необходимо использовать G-Sync или FreeSync.
Важный момент! Технологии синхронизации могут работать в связке, выдавая максимальную плавность картинки и отсутствие задержки.FastSync+G-Sync, Enhanced Sync+FreeSync — это лучшие на сегодняшний день сочетания, гарантирующие великолепные впечатления от игрового процесса.
Стоит знать еще и то, что быстрая синхронизация (Fast Sync) пока не поддерживается для игр DX12.
Артефакты изображения
С разрывами, подергиваниями и подвисаниями, связанными с проблемами вывода кадров с видеокарты на монитор разобрались. Все остальные неприятности, вызванные другими причинами — это артефакты изображения.
Они представляют собой различные искажения картинки. Это не разрывы кадра. Чаще всего полосы на экране, точки, квадратные и прямоугольные скопления, фантомы и другие искажения. Отметим, что неполадки должны наблюдаться именно во время запуска игр или других «тяжелых» графических приложений, нагружающих видеокарту. Если точки на мониторе висят постоянно, то это битые пиксели. Не перепутайте!
Вот здесь на скриншоте явно не артефакт изображения:
Артефакты изображения могут иметь программное или аппаратное происхождение (как показывает практика, чаще всего второй вариант).
Что можно сделать, чтобы избавиться от артефактов программно:
Проблема может крыться и в самой игре. Скачали пиратский репак — получили проблему с изображением. Крайне редкое явление, но может случиться. Тут поможет установка другой версии игры.
Большинство аппаратных проблем, вызывающих артефакты изображения, своими руками решить невозможно. Просто перечислим их для развития кругозора:
Единственный момент, который можно исправить самостоятельно — это если искажения возникают из-за перегрева видеокарты (проверяем температуру специальной программой, например Everest). Можно почистить ее от пыли, заменить термопасту или поменять систему охлаждения на более мощную.
Но и здесь стоит понимать, что если графический процессор устаревший и не справляется с современными играми, то хоть лед к нему приложите (так делать точно не стоит) — кардинально ситуацию это не исправит.
В случае возникновения подозрения, что шалит именно «железо», несем его в специализированный сервисный центр.
Заключение
Если вы заядлый геймер или киберспортсмен и сталкмиваетесь с вышеперечисленными проблемами, то покупка монитора с частотой 144 Гц (и выше) с поддержкой G-Sync или FreeSync технологии + соответствующая видеокарта — вопрос решенный.
Если же вы просто играете время от времени и динамичные шутеры — это не про вас, то вполне можно обойтись стандартным монитором 60 Гц и маломощной видеокартой. В таком случае не забудьте включить виртуальную синхронизацию!
Контроллер памяти: структура и синхронизация
Введение
Много ли вы слышали о контроллере памяти? Возможно, вы когда-то пытались найти информацию о контроллере памяти, но толком ничего не находили. Даже в книгах, к сожалению, есть только небольшие упоминания. Получается, что все знают про то, что контроллер памяти существуют, но никто не имеет представление, что это такое (именно на таких читателей рассчитана данная статья). Мне повезло наткнуться на статьи инженеров, которые решают проблемы проектирования и синхронизации контроллеров памяти в своих проектах. Эту информацию мы используем, чтобы понять, как устроен и как работает КП на высоком уровне.
Для самых маленьких
реклама
Процессору необходимо обращаться в память, как для получения инструкций, так и для данных, требуемых при исполнении инструкций. В качестве памяти может служить и основная оперативная память. Здесь появляется контроллер памяти, обрабатывающий запросы процессора. В общем-то о его предназначении вы узнаете, если прочитаете статью полностью.
Как устроена память
Во-первых, разберёмся с тем, как устроена память в принципе. Вы наверняка знаете, что у плашки оперативной памяти есть чипы памяти. Характеристика «плотность чипов» как раз обозначает объём в чипе памяти. Всё просто. Если есть чипы, емкость которых по 8 гигабит каждая (по одному гигабайту каждая), то 8 таких в сумме дадут 8 гигабайт (64 гигабит), поэтому мы и скажем, что это плашка на 8гб. Сам чип состоит из нескольких банок, а в свою очередь банки состоят из совокупности ячеек. Объём всех ячеек в чипе памяти одинаковый, причем ячейка по объёму не обязательно равна одному биту.
реклама
Важно сказать, что в реальности данные и адреса не направлены в разные стороны. Это единая шина, у которой линии разделены соответственно на информационные (D) и адресные (A) линии. А могут быть не разделены, если применяется мультипелксная шина. В такой реализации и адреса, и данные передаются по одним и тем же линиям последовательно. Это может решить проблему расфазировки шины (когда данные приходят быстрее адреса), но мультиплекс будет медленнее. Помимо всего прочего в статье И.А Петрова упоминается DDR4 3DS, использующая стеки чипов (друг на друга кладутся), которые взаимодействуют через связь сквозь кремний (through silicon via, TSV). Один такой чип в стеке называется логическим ранком. Логической страницей называется матрица внутри банка.
Механизм интерливинга и конвейерная шина памяти
Теперь разбираемся с механизмом интерливинга. Из статьи И.А Петрова: «В каждом логическом банке (размером от 256 Мбайт до 2 Гбайт) можно одновременно задействовать лишь одну страницу памяти (8 Кбайт). Переход к другой странице в рамках одного логического банка возможен через 45–50 нс». Далее написано, что механизм интерливинга, то есть перемешивание страниц памяти, находящихся в других банках памяти, избавляет от этой проблемы. Сначала непонятно каким образом, но это действительно так. Оказывается, банки для того и были введены, чтобы осуществлять несколько параллельных запросов к ним. Это так называемая конвейерная архитектура шины памяти. Если вы знакомы с конвейерной архитектурой ядер процессора, тогда вы примерно понимаете насколько круто, что у памяти такая тоже есть.
реклама
Здесь CK — это линия, по которой идут импульсы от тактового генератора с определенной частотой. Можно сказать, что шина работает на частоте CK или синхронизируется по CK. Как мы видим, циклом шины является период от фронта (переход от логического 0 к 1, поднятие по импульсу) синхросигнала до фронта следующего синхросигнала. Группа управляющих линий обозначена CMD, адресных — ADDR, а информационных — DATA.
Запрос к памяти состоит из трёх этапов:
1) Открытие строки для подготовки к обращениям (ACT).
2) Обращение к отдельным словам строки или к нескольким словам при использовании пакетного режима (длина пакета фиксирована).
3) Закрытие строки (PRECHARGE) и подготовка к следующей активизации.
В нашем примере важно, чтобы фаза активизации (ACT) предшествовала фазе READ (или WRITE) на 2 цикла (обязательно смотрите на рисунок). Также известно, что данные готовы на следующем цикле после фазы READ (WRITE), а PRECHARGE происходит минимум на два цикла позже фазы READ (WRITE). Данные обязательные условия называются протоколом. Все операции занимают определенное число циклов шины, поэтому известно, когда получать данные, когда открывать и закрывать строку. Конвейерный режим нужен, чтобы исключить простои. Ещё раз смотрите на рисунок: без конвейерного режима на цикле 1 образовался бы пустой цикл. Вместо простоя происходит активизация строки из другого банка. Преимущества очевидны.
Структура контроллера памяти
реклама
Это КП планировшегося Эльбруса 16CB. В контроллерах памяти есть буферы записи и чтения (в нашем примере этот буфер расположен за пределами КП). Когда КП получает данные от основной ОЗУ, данные сначала помещаются в буфер чтения. Аналогично с записью: данные от ядер поступают в буфер записи. Буферы выступают в роли промежуточной памяти для хранения, так как удобно получать данные большего объёма. Ведь ядру, которому понадобились данные по адресу A, с большой вероятностью понадобятся данные по адресу A+1. Это так называемый принцип локальности, на нем также основывается принцип кэширования. Буфер записи в свою очередь реализует отложенную запись.
В реестре запросов, как ни странно, хранятся запросы обращения к основной памяти. Каждая ячейка реестра включает в себя адрес, тип операции, признак готовности данных для записи, возраст запроса и стадию обработки запроса.
Планировщик занимается тем, что выбирает порядок запросов так, чтобы сократить среднее время на обработку одной заявки. Как это достигается? С помощью последовательно соединенных фильтров планировщика. На выходе планировщика расположен блок формирования операций для шины памяти, в котором запросы полностью перекрываются (отсутствуют пустые циклы на шине, что уже было описано выше).
В Эльбрус 16CB фильтры соединены в таком порядке:
фильтр ресурсов, задерживающий запросы, выполнение которых невозможно вследствие недостаточности объемов буферов чтения или записи
фильтр адресной зависимости, обеспечивающий корректную последовательность обращений в случае обращений по одному адресу (запросу по одному адресу должны выполняться последовательно. Представим ситуацию, что в реестр поступает запрос на запись данных в оперативную память на адрес A, а следующий запрос — чтение данных по адресу A. Без этого фильтра, так как чтение имеет более высокий приоритет над записью, считались бы устаревшие данные)
фильтр приоритета выполнения запроса в открытую страницу логического банка, исключающий дополнительные операции открытия страниц (ACT). Запрос отсеивается, если он попадает в закрытую страницу, хотя в то же время есть запросы, адресованные в открытую страницу. Данный фильтр минимизирует команды активизации, что и уменьшит среднее время обработки заявки в реестре.
фильтр на приоритет операций чтения. Чтение гораздо важнее записи для производительности, поэтому у планировщика в приоритете запросы чтения
фильтр протокольных блокировок, задерживающий запросы, нарушающий протокол (об этом было раньше и ещё будет позже)
фильтр возраста. Выбирается самый старший запрос, то есть, который вошёл раньше всех в реестр.
О фильтрах почти полностью скопировано со статьи И.А Петрова, но кое-где добавлены собственные пояснения. Ниже приложен схематичный рисунок планировщика
Теперь про протокольные блокировки. Когда мы говорили о конвейерной шине памяти, я написал, что есть некий протокол. Его необходимо соблюдать для каждого банка памяти с помощью счетчиков-таймеров внутри контроллера протокольных блокировок. Из книги Танебаума: «Как Core i7 узнает, когда следует ожидать возвращения данных команды READ и когда можно выдавать новый запрос к памяти? Для этого он осуществляет полное моделирование внутренней деятельности каждой подключенной микросхемы DDR3. Соответственно он ожидает возвращения данных в правильно выбранном цикле и знает, что операцию предзаряда не следует начинать раньше чем через два цикла после последней операции чтения. Core i7 может прогнозировать все эти события, потому что интерфейс памяти DDR3 работает синхронно, так что все операции занимают четко определенное количество тактов шины DDR3.»
Моделированием внутренней деятельности как раз занимается контроллер блокировок. Фильтр протокольных блокировок в планировщике использует это и отсеивает невозможные запросы. Основой динамической памяти (любая SDRAM DDR относится к динамической памяти) является конденсатор. Конденсатор может хранить заряд в течении короткого времени, иными словами может служить битом памяти. Ведь у бита, как и у конденсатора, есть два состояния. У конденсатора либо есть заряд (бит 1, логический 1), либо его нет (бит 0, логический 0). При считывании конденсатор разряжается, и если заряд был, то значение однобитной ячейки равно единице, и это значение мы можем использовать. Также после считывания нужно заряжать конденсатор заново, если заряд был (другими словами: значение однобитной ячейки должно быть равно одному, если её значение было равно одному до разрядки). Контроллер регенерации памяти как раз занимается тем, что выдает команды регенерации памяти.
Обычно для реализации многоканального режима работы устанавливают несколько рассмотренных нами одноканальных контроллеров памяти. Как, например, двухканальный контроллер памяти Эльбруса S2 включает по сути два отдельных контроллера памяти, находящиеся в одном блоке.
Синхронизация подсистемы памяти
В подсистеме памяти чаще всего различают три частотных домена: системный домен, домен контроллера памяти и домен самой памяти. Пример представлен ниже.
Решение проблемы синхронизации включает в себя следующие вопросы: какие тактовые частоты будут у доменов и каким образом они будут взаимодействовать в совокупности. От этого будет зависеть задержка обращения в память и максимально допустимая частота памяти, ведь частота контроллера памяти может её ограничить. Итак, синхронизация подсистемы памяти влияет на её эффективность.
Для начала рассмотрим проблему метастабильности на примере триггеров. Что такое триггеры? Это защелки, которые синхронизируются на фронте или спаде тактового импульса. Много непонятных слов? О том, как работают защелки знать не обязательно. Достаточно понимать, что защелка может хранить один бит информации. Но синхронная защелка может записать бит информации только тогда, когда на одном из входов защелки есть тактовый импульс. Таким образом, тактовый импульс является своего рода сигналом, что данные с входа данных можно записать. А триггер отличается тем, что ему нужен не весь тактовый импульс, а только его фронт или спад.
В нашем случае триггеры будут синхронизироваться по фронтам, так что далее рассматривать будем только фронт, но помним, что для спада всё то же самое.
Для правильной работы триггера необходимо, чтобы входные данные триггера некоторое время оставались неизменны до фронта импульса. Этот временной интервал называется Time Setup (Ts). Аналогично после фронта импульса данные также некоторое время должны оставаться неизменными, и это временное требование называется Time Hold (Th).
Если требования для входных данных выполняются, то на выходе триггера данные также появляются. А иначе верное выходное значение триггера устанавливается через большее время. Такое состояние называется метастабильностью. В метастабильном состоянии сигнал пребывает в состоянии, которое нельзя назвать ни логическим нулём, ни логической единицей. Дальнейшее распространение метастабильного сигнала может привести к сбою всей системы.
Данная проблема характерна для передачи данных между доменами с разными частотами. Вы узнаете почему позже, а пока просто покажу частоты доменов подсистемы памяти в разных проектах.
Эльбрус-С+:
системный домен с частотой 500 МГц (системная частота);
домен оперативной памяти, частота которого относится к системной как 4/5, 2/3, 3/5 или 1/2;
домен ядра контроллера оперативной памяти, отношение его частоты к частоте памяти равно 1/2.
Один из КП А.С Кожина:
Системный домен (System domain) – 800/1000 МГц
Домен оперативной памяти (DDR domain) – 800, 666, 533, 400 МГц
Домен ядра контроллера (MC domain) – частота в 2 раза ниже частоты памяти
Домен оперативной памяти ровно в два раза меньше эффективной частоты оперативной памяти.
В двух случаях мы наблюдаем подсистему памяти, частотные домены которой имеют разные частоты (логично).
Возвращаемся к проблеме метастабильности. На рисунке (а) мы видим, что фронт CLKB захватывает нестабильный сигнал DA. Временной интервал между фронтами оказался недостаточным. В итоге мы имеем метастабильный сигнал DB.
Одними из решений данной проблемы является добавление ещё одного триггера. Совокупность триггеров на приемной стороне образует синхронизатор (рисунок б). Дополнительный триггер помог избавиться от дальнейшего распространения метастабильности сигналов, ведь DB2 принимает правильное значение. Однако не всегда такой синхронизатор решает проблему метастабильности. Например, здесь.
В первом случае CLKB не успевает захватить сигнал данных DA, а во втором случае CLKB захватывает DA три раза, то есть по сути одиночную посылку воспринимает, как множество посылок. В первом случае наблюдается передача из высокочастного домена в низкочастотный домен, а во втором — из низкочастотного в высокочастотный. Рассмотрим другой метод.
W_ADR соответствует значению Write Pointer, R_ADR соответствует значению Write Read.
Так как буфер асинхронный, то и write control logic, и read control logic функционируют на разных частотных доменах (имеют разные частоты).
Блок Flag Logic служит для формирования информационных сигналов о заполнении. Ниже представлена та же схема на более низком уровне.
Сначала указатель записи формируется в модуле в GRAYCOUNTER в коде Грея. Код Грея характерен тем, что в последовательности предыдущее значение от данного отличается только одним битом.
То есть в двоичной системе счисления будет так:
000
001 (отличается от предыдущего(000) одним битом)
010 (отличается от предыдущего(001) уже двумя битами в двух позициях)
011
100 (а здесь данное слово отличается всеми тремя битами от предыдущего)
101
110
111
Тогда как в коде Грея это будет выглядеть вот так:
000
001
011
010
110
111
101
100
Если мы возьмем любое значение, то опять же увидим, что оно отличается от предыдущего и от следующего только одним битом в какой-либо позиции. А зачем он нужен здесь вы узнаете совсем скоро. Далее из GRAYCOUNTER данные указателя отправляются в приемник через шину wrptr_g, а приемник работает на другой частоте. Здесь под шиной мы понимаем только совокупность проводников, по которым идет по биту информации. Но для исключения метастабильности на этом этапе к каждой линии шины подведен дополнительный триггер на передающей стороне, на рисунке он также изображен, и три триггера на принимающей стороне (на рисунке синхронизатор). Тогда возможно такое (при изменении указателя записи, то есть данных в GRAYCOUNTER), что сигналы на линиях шины будут задержаны относительно друг-друга, а это приведет к тому, что в одних линиях приемник захватит новые значения, а в других — старые. А в коде Грея новое значение отличается всего на один бит. У нас будет всего два варианта: либо старое (пусть будет 011), либо новое значение (пусть будет 010). А это к сбою работы FIFO-буфера не приведет. Далее gray2bin модуль сможет преобразовать код Грея в двоичное число. Также в любом FIFO-буфере с помощью сравнений указателей записи и чтения, узнается пуст ли или полон буфер. Верхняя граница известна, а при равенстве указателей мы понимаем, что буфер пуст. Ведь нельзя считать пустотой буфер или записать данные в переполненный, так что устанавливаются флаги из Flag Logic.
Асинхронные FIFO-буферы используются очень часто из-за того, что они могут передать данные доменов с очень разным соотношением частот. Да и вообще это очень удобно, ведь можно их заказывать готовые. Но, к сожалению, задержки будут гораздо больше: прохождение сигналов через триггеры, преобразование в код Грея и обратно — это довольно долго.
Ещё один интересный метод пересинхронизации я вычитал из статьи А.С Кожина, какую я укажу в источниках. Этот метод использовался в Эльбрус-C+, он предусматривает метки (сигналы) для высокочастотного домена. Причем для входа высокочастотного домена предусматривается метка clabel_i, служащая для того, чтобы высокочастотный домен не воспринимал одну посылку, как несколько (об этом было сказано, когда мы рассматривали синхронизаторы). Для выхода высокочастотного домена используется метка clabel_o, гарантирующая, что низкочастотный приемник примет данные (об этом тоже было сказано).
Здесь метка clabel_o разрешает изменение данных на выходе триггеров со стороны высокочастотного домена (обращайте внимание на data_out). На следующем фронте импульса приемника (приемник работает на частоте 2/5 Fsys), данные захватываются (это второй импульс 2/5 Fsys. Соотнесите его с data_out). Таким образом выполняется передача данных из высокочастотного домена в низкочастотный.
Здесь важно правильно формировать метки, чтобы соблюдались следующие требования: новые данные на data_out не должны захватываться предыдущим фронтом импульса (если бы первый импульс 2/5 Fsys захватил данные вместо второго), новые данные должны успеть переключиться до следующего фронта импульса (такое произошло, если бы второй импульс cabel_o появился позже).
Всё аналогично при передаче из низкочастотного домена в высокочастотный. Только в этому случае метка cabel_i обеспечивает выбор только одного фронта высокой частоты. Метки формируются в специальном блоке формирования меток.
Он состоит из регистра (такая память, состоящая из триггеров). Значение в регистре определяет, в какие такты периода биений (T align) разрешено выдавать метку. Период биений здесь, как вы можете посмотреть на предыдущем рисунке с меткой cabel_o — это период, при котором совпадают фронты импульсов. Ширина регистра определяется количеством тактовых импульсов за период биений (в Fsys было 5 таких). Основная метка выдается на частоте большего домена. Сигнал mode задает режим работы блоку формирования в зависимости от частот передающего и принимающего доменов. Указатель (Pointer) указывает на значение регистра, отвечающее за состояние метки (будет ли выдана или нет). Сигнал beat — это комбинационный сигнал биений, который определяет начало периода биений. Он помогает восстановить правильное значение указателя, если в нем изменился разряд.
Также синхронизация невозможна без самого блока пересинхронизации. Здесь всё стандартно, но всё-таки требуется раскрыть передачу из одного домена в другой, когда частоты доменов близки. Близкими частоты будут, если на низкочастотный импульс приходится один фронт высокочастотного домена или f1/f2 f2). Прием/передача могут быть невозможны из-за несоблюдения временнЫх интервалов. В этом случае используются триггеры, задерживающие на половину такта данные, и дополнительная метка, определяющая, когда задержанные данные можно использовать.
Подобный метод пересихронизации не так удобен и универсален, как асинхронный FIFO-буфер, но зато имеет меньшие задержки.
На этом всё. Спасибо за внимание, критикуйте, обсуждайте и задавайте вопросы.
Источники
Архитектура компьютера, 6-ое издание, Э. Танебаум и Т. Остин (Отсюда я взял про триггеры и прочее на цифровом логическом уровне, устройство памяти и шины)
Контроллер памяти DDR2 SDRAM и его система синхронизации в составе системы на кристалле «Эльбрус-S2», А. С. Кожин (по факту источник-пустышка, отсюда впервые услышал про метки, но взял только картинку с кп)
Метастабильность триггера и межтактовая синхронизация, «nerudo» (статья с хабра. Взял отсюда картинку, где Ts и Th интервалы)
Одно- и двухпортовая память. FIFO-буфер. Проблемы метастабильности, юутб-канал «Электроника и наноэлектроника» (типо лекция, мне показалась она достаточно сомнительной, но разобраться действительно помогла)
Что такое кэш процессора, и как он работает, Сергей Пахомов (здесь было про промежуточную память)
Флэш-память на любой вкус, Сергей Пахомов (про регенерацию памяти на уровне конденсаторов)