Надежная информация о производительности командной строки x86?

Общий widsom заключается в том, что rep movsb намного медленнее, чем rep movsd (или на 64-разрядной, rep movsq) при выполнении идентичных операций. Тем не менее, я тестировал несколько современных машин, и время выполнения выходит одинаково (вплоть до шумов измерений) в огромном диапазоне размеров буфера (от 10 до 2 мегабайт). Пока что я только что протестировал на двух машинах (32-разрядный Intel Atom D510 и 64-разрядный AMD FX 8120).

  • Существуют ли современные x86 (32- или 64-разрядные) машины, где rep movsb медленнее, чем rep movsd (или rep movsq)?

  • Если нет, то какая была последняя машина, где разница была значительной, и насколько она была значительна?

Я задаю этот вопрос с точки зрения необходимости избегать грубого кулинарного тестирования, чтобы разбить память на непривязанную голову/хвост и выровненную середину ради использования rep movsd или rep movsq, если нет фактическая польза для этого...

Ответ 1

Здесь много тестов: instlatx64.atw.hu

Например, (Intel Core 2 Duo E6700):

REP MOVSB   BW in L1D:13.04 B/c  34829MiB/s
REP MOVSW   BW in L1D:13.29 B/c  35493MiB/s
REP MOVSD   BW in L1D:13.40 B/c  35783MiB/s

Что показывает, что есть разница, но она крошечная.

Этот для SandyBridge немного странный:

REP MOVSB   BW in L1D:25.50 B/c  86986MiB/s
REP MOVSW   BW in L1D:18.09 B/c  61721MiB/s
REP MOVSD   BW in L1D:27.47 B/c  93693MiB/s

Кажется, большая разница в некоторых Atoms (кажется, исчезла с D5xx, поэтому вы просто пропустили ее):

REP MOVSB   BW in L1D: 0.53 B/c    990MiB/s
REP MOVSW   BW in L1D: 1.93 B/c   3598MiB/s
REP MOVSD   BW in L1D: 3.74 B/c   6960MiB/s

Я не нашел такой большой разницы ни на что другое, что можно считать новым.