>> Есть, начиная с 16-ти разрядных 8086.
>> rep movs
>> В какие-то периоды времени она работала медленнее, чем цикл с предвыборкой из
>> кеша (prefetchnta), но давно ускорили.
> Зачем тогда avx используют для копирования?
> И разве это не просто способ повторения копирования одного слова?Не знаю, зачем. Может маркетинг, или очередной выигрыш на уровне погрешности измерений.
Вот цитата 64-ia-32-architectures-optimization-manual.pdf
2.6.6 REP String Enhancement
REP prefix in conjunction with MOVS/STOS instruction and a count value in ECX are frequently used to
implement library functions such as memcpy()/memset().
...
Fast string (ECX >= 76: excluding REP MOVSB): the processor implementation provides hardware
optimization by moving as many pieces of data in 16 bytes as possible. The latency of REP string
latency will vary if one of the 16-byte data transfer spans across cache line boundary:
...
In order for REP string to operate in “fast string” mode, previous microarchitectures requires address
alignment. In Intel microarchitecture code name Nehalem, REP string can operate in “fast string”
mode even if address is not aligned to 16 bytes.
Обратите внимание на "аппаратная оптимизация" (hardware optimization).
Проблема со скоростью копирования была во времена Athlon XP и разобрана в http://files.rsdn.ru/23380/AMD_block_prefetch_paper.pdf
Смысл в том, что память читается не побайтно, а кратно размеру линии кэша, и лишнего загрязнения кэша желательно избегать.
В следующем поколении Intel оптимизировали REP MOVSB и она догнала по скорости оптимизированные циклы.