Спекулятивная загрузка
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 (которые находятся либо в BUI, либо внутри Chipset, либо и там и там. Это повышает скорость. +----------+ | +------+ | | | WB | | CPU пишет в WB | +------+ | Из WB асинхронно от CPU пишут дальше ------------> | = ... = | -------------------> | +------+ | | | WB | | | +------+ | +----------+ Понятно, что если все Write Buffers заполнены процессор будет ждать. Для сохранения когерентности: Все операции с Write Buffer идут in-order (т.е. Первый помещен в WB, первый уйдет на шину) Любое чтение будет ждать пока все Write Buffers не будут записаны. Write Buffers
TODO: Быстрые спин-локи MONITOR/MWAIT идеи. Быстрые spin-locks