Указание справочного руководства по оптимизации архитектуры Intel® 64 и IA-32, §2.4.6 "Улучшение строки REP":
Характеристики производительности использования строки REP можно отнести к двум компонентам: накладные расходы на запуск и пропускную способность передачи данных.
[...]
Для строки REP более крупной передачи данных детализации, как значение ECX увеличивается, стартовые служебные данные REP String показывают пошаговое увеличение:
- Короткая строка (ECX <= 12): латентность REP MOVSW/MOVSD/MOVSQ составляет 20 циклов,
Быстрая строка (ECX >= 76: исключая REP MOVSB): реализация процессора обеспечивает аппаратное обеспечение оптимизации, перемещая как можно больше фрагментов данных по 16 байтам. Задержка латентности строки REP будет отличаться, если одна из 16-байтовых данных перенос охватывает границу линии кэша:
- Без разделения: задержка состоит из стартовой стоимости около 40 циклов, и каждые 64 байта данных добавляют 4 цикла,
- Разделение кэша: задержка состоит из запуска стоимость около 35 циклов, и каждые 64 байта данных добавляют 6 циклов.
Промежуточные длины строк: латентность REP MOVSW/MOVSD/MOVSQ имеет стартовая стоимость около 15 циклов плюс один цикл для каждой итерации перемещение данных в слове /dword/qword.
(акцент мой)
Больше не упоминается такая стоимость запуска. Что это? Что он делает и почему требуется больше времени?