Сравнение памяти

Тема в разделе "WASM.ASSEMBLER", создана пользователем DLag, 3 ноя 2006.

  1. DLag

    DLag New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    14
    Нужна код сравнивающий две области памяти с одинаковой длиной на идентичность.
    Т.е. есть два указателя, есть длина, при первом же отличии выполняется допустим jne _CompFalse если всё идентично, то выполняется jne _CompTrue и т.п.
    Нужно чтобы быстро работало.
    Объём памяти будет кратен 4-м.
    Если есть наработки или если не впадлу - выложите.
     
  2. n2k

    n2k kris kaspersky

    Публикаций:
    0
    Регистрация:
    22 янв 2005
    Сообщения:
    102
    Адрес:
    Russia
    посмотри асмовые исходники memcmp от студии, интела и других компилеров.
    "быстро работать" будет после того как правильно сформулируюшь задачу.
    какие объемы памяти сравниваются? какова средняя длина совпадающих блоков?
    в некоторых случаях выгодно считать хеши блоков и сравнивать их,
    что, кстати, очень рулит на многоядерных процессорах
     
  3. Th0r

    Th0r New Member

    Публикаций:
    0
    Регистрация:
    18 окт 2006
    Сообщения:
    5
    в самом простом варианте:
    repe cmpsd
     
  4. DLag

    DLag New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    14
    Заделитесь memcmp.asm из интеловского компилера С++.
     
  5. nitrotoluol

    nitrotoluol New Member

    Публикаций:
    0
    Регистрация:
    5 сен 2006
    Сообщения:
    848
    Th0r
    Нужно идти в ногу со временем.. )
    FPU,SSE,SSEII, MMX...
    Плюс, человек верно говорит, в некоторых случаях куда рульнее сравнивать хеши...
     
  6. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    nitrotoluol
    Ну сравни память на FPU ;)
     
  7. sergh

    sergh New Member

    Публикаций:
    0
    Регистрация:
    31 авг 2005
    Сообщения:
    128
    Адрес:
    rsdn
    Хеши имеют смысл только если производится многократное сравнение для одного и того же набора блоков (типа, тысяча блоков и надо сравнить каждый с каждым). Иначе их только вычислять дольше чем простое сравнение сделать.
     
  8. kaspersky

    kaspersky New Member

    Публикаций:
    0
    Регистрация:
    18 май 2004
    Сообщения:
    3.006
    sergh
    так ведь сравниваются хэши не всех блоков сразу ;)
    блоки нарезаются на кусочки ;)

    была бы известна задача - был бы ответ.
    а так... можно только хвостом помахать.

    рассмотрим три варианта:

    а) сравниваются две структуры данных на предмет искажений.
    CRC32 отлетает сразу, поскольку если ситуация допускает
    _предумышленные_ искажения, то это ласты. хэши дают
    _надежный_ негативный ответ (блоки не совпадают),
    а вот если блоки "как бы совпадают" надо перепроверить еще раз.
    а это уже тормоза.

    б) имеем файл и хотим найти все его копии на диске.
    поскольку большинство файлов имеют расхождение
    в первом же десятке байт (не говоря про размер :derisive:,
    то на фиг париться с хэшами...

    в) имеет несколько астрономических фото
    (случай из моей практики) и нам надо отделить
    шумы матрицы от настоящих звезд.
    так вот, разрезав фотоку на блоки (а она каждая в bpm
    и очень до хвоста метров весит я скажу), для каждого
    из которого мы вычисляем хэш, мы получаем ~2x ускорение
    на двухядерном процессоре, а при большом кол-ве фоток
    можем легко распределить эту задачу между кучей
    компьютеров (помогает на сильно зашумленных снимках,
    на которых возможно появление реально новой звезды).
     
  9. DLag

    DLag New Member

    Публикаций:
    0
    Регистрация:
    31 июл 2006
    Сообщения:
    14
    Не уходите от темы.
    Нужен код простого побайтного сравнения на Асме.
    Используя rep cmpsb.
    Пытался писать сам, но уровень знания языка не позволяет написать рабочую функцию.
    Помогите.
     
  10. IceStudent

    IceStudent Active Member

    Публикаций:
    0
    Регистрация:
    2 окт 2003
    Сообщения:
    4.300
    Адрес:
    Ukraine
    DLag
    memcmp в помощь. Она как раз на асме.