Пропускная способность и время ожидания - разные вещи. Вы не можете просто добавить затраты на цикл. Информацию о пропускной способности см. В разделе Загрузка / сохранение за цикл для последних поколений архитектуры ЦП. - 2 загрузки за такт пропускная способность для большинства современных микроархитектур. И см. Как может кеширование быть таким быстрым? для микроархитектурные детали исполнительных модулей загрузки / сохранения, включая отображение буферов загрузки / сохранения, которые ограничивают степень параллелизма на уровне памяти, которую они могут отслеживать. Остальная часть этого ответа будет сосредоточена только на задержке, которая актуальна для рабочих нагрузок, связанных с отслеживанием указателей (например, связанных списков и деревьев), и на том, сколько задержки необходимо скрыть неупорядоченному исполнителю. (Промахи кэша L3 обычно слишком продолжительны, чтобы их можно было полностью скрыть.)
Задержка одноциклового кэша раньше была проблемой для простых конвейеров с более низкой тактовой частотой (поэтому каждый цикл занимал больше наносекунд), особенно с более простыми кешами (меньшими, не такими ассоциативными, и с меньший TLB для кешей, которые не были адресованы чисто виртуально.) например классический 5-этапный конвейер RISC, такой как MIPS I, предполагает 1 цикл для доступа к памяти при попадании в кеш , с вычислением адреса в EX и доступом к памяти в одной стадии конвейера MEM, перед WB.
Современные высокопроизводительные процессоры разделяют конвейер на большее количество этапов, что позволяет сократить каждый цикл. Это позволяет простым инструкциям, таким как add
/ or
/ and
выполняться очень быстро, с задержкой в 1 цикл, но с высокой тактовой частотой.
Для получения дополнительных сведений о подсчете циклов и выполнении вне очереди см. pdf-файл с микроархитектурой Agner Fog и другие ссылки в вики-странице тегов x86.
Задержка использования нагрузки Intel Haswell L1 составляет 4 цикла для отслеживания указателя, что типично для современных процессоров x86. т.е. насколько быстро mov eax, [eax]
может работать в цикле с указателем, указывающим на себя. (Или для связанного списка, который попадает в кеш, легко микростенд с замкнутым циклом). См. Также Есть ли штраф, когда база + смещение находится на другой странице, чем базовая? Этот особый случай задержки с 4 циклами применяется только в том случае, если указатель поступает непосредственно из другой нагрузки, в противном случае это 5 циклов.
Задержка использования нагрузки на 1 цикл выше для векторов SSE / AVX в процессорах Intel.
Задержка перезагрузки хранилища составляет 5 циклов и не связана с попаданием или отсутствием кеша (это пересылка хранилища, чтение из буфера хранилища для данных хранилища, которые еще не зафиксированы в кеш-памяти L1d).
Как прокомментировал Гарольд, доступ к регистру составляет 0 циклов. Так, например:
inc eax
имеет задержку в 1 цикл (только операция ALU)
add dword [mem], 1
имеет задержку в 6 циклов, пока загрузка из dword [mem]
не будет готова. (ALU + переадресация магазина). например хранение счетчика цикла в памяти ограничивает цикл одной итерацией на 6 циклов.
mov rax, [rsi]
имеет задержку в 4 цикла от rsi
готовности до rax
готовности к удару L1 (задержка использования нагрузки L1).
http://www.7-cpu.com/cpu/Haswell.html есть таблица задержки на кэш (которую я скопирую здесь) и некоторые другие экспериментальные числа, включая задержку попадания L2-TLB (при промахе L1DTLB).
Intel i7-4770 (Haswell), 3,4 ГГц (Turbo Boost выключен), 22 нм. Оперативная память: 32 ГБ (PC3-12800 cl11 cr2).
Кэш данных L1 = 32 КБ, 64 байт / строка, 8-WAY.
Кэш инструкций L1 = 32 КБ, 64 байт / строка, 8-WAY.
Кэш L2 = 256 КБ, 64 Б / линия, 8-WAY
Кэш L3 = 8 МБ, 64 Б / строка
Задержка кэша данных L1 = 4 цикла для простого доступа через указатель (mov rax, [rax]
)
Задержка кэша данных L1 = 5 циклов для доступа со сложным вычислением адреса (mov rax, [rsi + rax*8]
).
Задержка кэша L2 = 12 циклов
Задержка кэша L3 = 36 циклов
Задержка ОЗУ = 36 циклов + 57 нс
Страница теста верхнего уровня: http://www.7-cpu.com/utils.html, но все еще не объясняет, что означают разные размеры тестов, но код доступен. Результаты теста включают Skylake, который почти такой же, как Haswell в этом тесте. .
В ответе @ paulsm4 есть таблица для многосокетного Nehalem Xeon, включая некоторые удаленные (другие сокеты) номера памяти / L3.
person
Peter Cordes
schedule
24.08.2016
inc eax
имеет задержку 1 цикл,inc [mem]
имеет задержку 6 циклов (ALU + переадресация хранилища). - person Peter Cordes   schedule 25.08.2016