Надежная информация о производительности командной строки 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
Я не нашел такой большой разницы ни на что другое, что можно считать новым.