50.12.1. СПЕКУЛЯТИВНАЯ ЗАГРУЗКА И ДРУГИЕ ХИТРОСТИ С ПАМЯТЬЮ
Спекулятивная загрузка
THIS SECTION IS UNDER CONSTRUCTION
Где повышает быстродействие?
Там где мы примерно знаем куда обратимся дальше:
Например обход списка
Делаем спекулятивную загрузку следующего элемента в списке
пока обработает текущий - следующий уже будет в cache
Или например проход по таблицам в базах данных
LoadSpec
.....
DO_SOME_OTHER_ACTIONS
.....
WaitLoadSpecReady
Memory Hints
THIS SECTION IS UNDER CONSTRUCTION
Загрузка/Запись
не в cache (not temporary)
(это позволяем минимизировать засорение cache)
MOVNTI
MOVNTDQ
PREFETCHNTA
в определенный уровень cache
PREFETCH0
PREFETCH1
PREFETCH2
во все уровни cache
Сброс линии cache
(если мы знаем что больше не понадобится)
CLFLUSH
Чередование банков памяти
THIS SECTION IS UNDER CONSTRUCTION
+------------+
| | +------+
| Memory |----------|Bank 0|
| controller | +------+
| |
| | +------+
| |----------|Bank 1|
| | +------+
+------------+
Посколько обращения в основном идут подряд (выборка, загрузка линии cache).
Write Buffers
В принципе процессору не обязательно ждать пока выполнится операция записи
до конца (особенно для низкоскоростных устройств), он может ее сбросить
в Write Buffers (которые находятся либо в BUI, либо внутри Chipset,
либо и там и там. Это повышает скорость.
+----------+
| +------+ |
| | WB | |
CPU пишет в WB | +------+ | Из WB асинхронно от CPU пишут дальше
------------> | = ... = | ------------------->
| +------+ |
| | WB | |
| +------+ |
+----------+
Понятно, что если все Write Buffers заполнены процессор будет ждать.
Для сохранения когерентности:
Все операции с Write Buffer идут in-order
(т.е. Первый помещен в WB, первый уйдет на шину)
Любое чтение будет ждать пока все Write Buffers не будут записаны.
Быстрые spin-locks
TODO: Быстрые спин-локи
MONITOR/MWAIT
идеи.
Index Prev Next