MFENCE & LFENCE

Тема в разделе "WASM.HEAP", создана пользователем Red Alert, 17 июн 2005.

  1. Red Alert

    Red Alert New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2005
    Сообщения:
    20
    читаю у Юрова описалово subj и не могу въехать, зачем

    они нужны. Может, кто поможет ? На конкретном примере.
     
  2. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    Вот пример кода, где используется sfence. Нужна эта команда для выгрузки данных из буфера записи в память при "хитрой" работе с кэшем, как в примере по ссылке.
     
  3. Red Alert

    Red Alert New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2005
    Сообщения:
    20
    спасибо, будем изучать
     
  4. Red Alert

    Red Alert New Member

    Публикаций:
    0
    Регистрация:
    8 июн 2005
    Сообщения:
    20
    Статья полезная. Однако еще больше запутала.

    Читаем Юрова - "гарантированная запись информации из кэш-памяти всех уровней. Команда сохраняет данные из кэш памяти по соотв. адресам оперативной памяти. Выполняется сериализация (сохранение в долговременную память) всех операций записи в память, инициированных перед выдачей команды sfence."

    В статье же сказано, "заметим, что sfence необходима после того, как данные записаны ,для очистки буфера записи".

    IMHO это разные по сути трактовки.

    Или следует понимать "для сброса данных из кэша в ОЗУ и очистки буфера записи"?

    А про LFENCE & MFENCE там ни слова.;( Охота уже активно юзать SSE & SSE2.

    А получается, что без полного понимания того, как работает к.-л. инструкция,пользоваться ими иногда и опасно. Если, к примеру, процедурка обслуживания аппаратного прерывания сделает тот же самый sfence где-нить в середине указанного оптимизирующего цикла, то все ухищрения из этой статьи - коту под хвост, isn't it?

    PS

    Может я не понял чего, просьба сильно матом не ругать ;)
     
  5. S_T_A_S_

    S_T_A_S_ New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2003
    Сообщения:
    1.754
    При всём уважении к Юрову - вряд ли он написал больше про эти команды, чем просто перевод описания из 2го тома Интела. Скорее всего, твоя "обобщённая" формулировка и есть правильная :) только вместо "очистки буфера записи" наверное лучше будет "сохранение его содержимого в памяти". Я как-то делал что-то командами movntq, и если в конце не было sfence, то часть данных просто пропадала (?) не сохраняясь.

    Статью я ту к чему привёл - как я понимаю, команды эти в отдельности имеют мало смысла и служат вспомогательными при играх с конвеером и кэшем. Ещё можно почитать раздел "Optimizing Cache Usage" из IA-32 Intel® Architecture Optimization Reference Manual, что бы ещё больше запутаться :)
     
  6. leo

    leo Active Member

    Публикаций:
    0
    Регистрация:
    4 авг 2004
    Сообщения:
    2.542
    Адрес:
    Russia
    При некешируемых записях типа movntq и т.п. данные не пишутся сразу в ОЗУ, а накапливаются в write-combining (WC) буферах.(В PIII и P4 имеется 4 доступных для записи WC буфера, каждый размером = пакету записи в ОЗУ, в PIII 32 байта, в P4 64 байта). Команды SFENCE\MFENCE (а также CPUID) форсируют запись этих буферов в ОЗУ. Если не выгрузить эти буферы принудительно, то данные будут сидеть в процессоре неопределенное время, пока не случится прерывание, переключение задачи и т.п. или пока не потребуется освободить буфер(ы) для других операций записи (как некешируемых, так и кешируемых при отсутствии соответсвующей линейки в L2)