Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Linux - прямой доступ к кешу ОЗУ
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
robix
Всем привет!
Форумчане, помогите разобраться в важном вопросе!!!
Суть проблемы следующая - необходимо обеспечить высокую скорость рандомного доступа к большому массиву данных (относительно большому, несколько мегабайт).
Если брать стандартную базу данных, то для поиска элемента в таблице из 1000000 компонентов требуется порядка 100 микросекунд, что не приемлемо.
Рандомный доступ в ОЗУ современных ПК может достигать 300 наносекунд (могу ошибаться). То есть если выполнять поиск по таблице без базы данных, то 2^20=1000000, это значит нам нужно как минимум 20 раз выполнить рандомный доступ в память для поиска эелемента. В теории получается порядка 6 микросекунд. Это уже на много лучше, но не достаточно.
Кто нибудь может сказать, можно ли взять, например Xeon с 10 Мб кеша ОЗУ и разместить массив целиком в нем и производить поиск в кеше не обращаясь в ОЗУ?
Буду рад любым комментариям!
krux
во-первых, если ваши данные кратны (нормально влезают в) cache line и ваш код не вызывает cache-miss'ов из-за кривых, не выровненных структур данных, то все попадет в кэш без вашего участия.

во-вторых, во время работы BIOS при включении ПК процессор ещё не видит SDRAM-памяти, и весь кэш... на самом деле не кэш а большой такой RAM, и BIOS фактически использует в качестве памяти кода и данных его. После инициализации SDRAM код копируется туда, и RAM переводится в режим кеша при помощи записи в регистр.
Регистр этот является write-once, т.е. запись в него допускается только один раз после подачи питания, поэтому после того как BIOS отработал, он бесполезен.
robix
Спасибо, Krux, за ответ.
То есть, если я правильно понял, прямого доступа в кеш нет.
Если работать в автоматическом режиме, то Вы хотите сказать что имея таблицу размером в 8 мегабайт, при частых обращениях к ней она целиком вся будет в кеше?
Например для Xeon 6 ядер и 10 МБайт кеша всего!? Если второе верно, то это тоже неплохой вариант.


Цитата(krux @ Oct 22 2013, 21:29) *
во-первых, если ваши данные кратны (нормально влезают в) cache line и ваш код не вызывает cache-miss'ов из-за кривых, не выровненных структур данных, то все попадет в кэш без вашего участия.

во-вторых, во время работы BIOS при включении ПК процессор ещё не видит SDRAM-памяти, и весь кэш... на самом деле не кэш а большой такой RAM, и BIOS фактически использует в качестве памяти кода и данных его. После инициализации SDRAM код копируется туда, и RAM переводится в режим кеша при помощи записи в регистр.
Регистр этот является write-once, т.е. запись в него допускается только один раз после подачи питания, поэтому после того как BIOS отработал, он бесполезен.

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.