"это", есть самый оптимальный метод копирование памяти?

Тема в разделе "WASM.A&O", создана пользователем Protorus, 7 мар 2010.

  1. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Protorus
    Конечно. Дело ж не в том, идёт выборка на чтение или запись, а именно в самом выравнивании :)

    Студия порождает примерно такой код, как Вы привели в самом начале. Это не значит, что нельзя лучше, просто, во-первых, это сложнее реализовать (надо дополнительные бяки в компилятор вставлять), а во-вторых, это не будет работать на всех процессорах. MOVS есть везде, а вот инструкции SSE появились сравнительно поздно, причём их набор постепенно увеличивается. Соответственно, программа, "вылизанная" под какой-нибудь Core 2 Quad, может попросту не заработать на ранних Pentium 4, а это не всегда допустимо.
     
  2. Protorus

    Protorus New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2009
    Сообщения:
    51
    Ну то есть, слово "оптимальный" в названии топика подтверждается на 100% ..
    SII
    А вот, как выровнять и приемник в дополнение к источнику?
    Тут, за двумя зайчиками погонишся ...
     
  3. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    Protorus
    Совершенно верно, в общем случае обеспечить выравнивание и того, и другого не удастся. Поэтому-то и нельзя быть уверенным, что некий код будет гарантированно самым оптимальным при любом сочетании исходных условий (особенно с учётом того, что он может работать на разных процессорах). Вероятно, если речь идёт о написании собственной программы, лучше самому позаботиться об одинаковом выравнивании исходных данных -- и источника, и приёмника в данном случае. Кроме того, если есть гарантия, что приёмник имеет не меньшую длину, чем источник, и эта длина всегда кратна некоей величине (для простоты предположим, что 4), то лучше выполнить одну "лишнюю" пересылку с помощью MOVSD, чем геморроиться с MOVSB. Т.е., например, если пересылаемый источник имеет реальную длину 15 байт, но и под него, и под приёмник отведено 16 (или больше) байт, то лучше выполнить четыре MOVSD, чем три MOVSD и три MOVSB.
     
  4. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    Rockphorr
    Тем что там не показан код, дьявол как известно в деталях. К тому же там HL, а это вообще сплошной туман.
     
  5. G13

    G13 New Member

    Публикаций:
    0
    Регистрация:
    24 мар 2006
    Сообщения:
    499
  6. SII

    SII Воин против дзена

    Публикаций:
    0
    Регистрация:
    31 окт 2007
    Сообщения:
    1.483
    Адрес:
    Подмосковье
    G13
    И настоятельно рекомендуемая к изучению, если производительность упирается именно в память (т.е. если нужны передачи больших порций данных при сравнительно несложной их обработке). Ну и, есно, руководства по оптимизации фирм-производителей.
     
  7. Protorus

    Protorus New Member

    Публикаций:
    0
    Регистрация:
    30 дек 2009
    Сообщения:
    51
    G13
    Спасибо
    Странно, что раньше не встречалось ..