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