Почему цикл, делающий 6% работы, выполняется столько же времени

Gallery of Processor Cache Effects

Igor Ostrovsky на примерах на C# показывает, как кэш процессора влияет на производительность. Цикл, умножающий каждый 16-й элемент массива, выполняется почти так же долго, как цикл по всем элементам, из-за кэш-линий: процессор загружает память блоками по 64 байта, и шаги от 1 до 16 не меняют число промахов. Также разбираются размеры L1/L2, параллелизм на уровне инструкций и ассоциативность кэша.

Первый цикл умножает каждое значение в массиве на 3, а второй — только каждое 16-е. Второй цикл выполняет лишь около 6% работы первого, но на современных машинах оба цикла занимают примерно одинаковое время: 80 и 78 мс соответственно на моей машине.

Ещё за этот день

2026-10-07