‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

самая непонятная команда

RISC-V spec:
The FENCE instruction is used to order device I/O and memory accesses as viewed by other RISCV harts and external devices or coprocessors. Any combination of device input (I), device output
(O), memory reads (R), and memory writes (W) may be ordered with respect to any combination
of the same. Informally, no other RISC-V hart or external device can observe any operation
in the successor set following a FENCE before any operation in the predecessor set preceding the
FENCE. The execution environment will define what I/O operations are possible, and in particular,
which load and store instructions might be treated and ordered as device input and device output
operations respectively rather than memory reads and writes. For example, memory-mapped I/O
devices will typically be accessed with uncached loads and stores that are ordered using the I and O
bits rather than the R and W bits. Instruction-set extensions might also describe new coprocessor
I/O instructions that will also be ordered using the I and O bits in a FENCE.


Все слова понятны, но смысл не угадываеся. Что значит "may be ordered with respect to any combination of the same", особенно в контексте повествования? Я вроде догадываюсь, что речь про кэширование - мол, если одно ядро (hardware thread - "hart" в их терминологии) пишет-читает память сквозь кэш, то ежели второе ядро исполняет код, в котором есть FENCE, то эта команда заставит первый кэш закоммитить все изменения в основную память и, видимо, обнулить кэш для второго ядра? ну ок, допустим, а причём тут тогда обращения к I/O - оно же психически номральными разработчиками не кэшируется, что они там такое имеют в виду?

Следующее:
The FENCE.I instruction is used to synchronize the instruction and data streams. RISC-V does not
guarantee that stores to instruction memory will be made visible to instruction fetches on the same
RISC-V hart until a FENCE.I instruction is executed. A FENCE.I instruction only ensures that a
subsequent instruction fetch on a RISC-V hart will see any previous data stores already visible to
the same RISC-V hart. FENCE.I does not ensure that other RISC-V harts’ instruction fetches will
observe the local hart’s stores in a multiprocessor system. To make a store to instruction memory
visible to all RISC-V harts, the writing hart has to execute a data FENCE before requesting that
all remote RISC-V harts execute a FENCE.I


Тут уже более понятно, что речь всё-таки про кэширование и, заодно, про конвейер - но я понял так, что ядро, встретив эту инструкцию, должно протолкнуть её сквозь конвейер целиком и только после её отработки всосать следующую инструкцию. Но т.к. смысл этого действа ускользает, делаю вывод, что я понял неправильно.

Не ясно, что делать в случае наличия единственного ядра и, соответственно, отсутствия межпроцессорных взаимодействий - надо ли эти команды реализовать (но как? и что они будут делать?) или достаточно будет забить их NOPами?
Tags: worklog
Subscribe

  • Спохватились

    На Байконуре расследуют предполагаемую кражу деталей с дорогостоящими редкоземельными металлами. Она могла произойти на площадке №110, с которой…

  • Ну что.

    SN10 - первый прототип старшипа, взлетевший дважды с минимальным техническим обслуживанием между стартами, с отработкой метода быстрого избавления от…

  • Как выглядит хорошо аргументированное мнение?

    Это можно узнать на примере соломонова фотовладьки: Истерикой несгибаемого борца с мировым злом удовлетворён. Кстати, о синонимах

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments