2014-09-11 2 views
2

Предположим, есть две переменные, хранящиеся в одной и той же строке кэша ЦП, если я успешно использую CAS одну из переменных, будет ли вся строка кэша обновляться сразу после инструкции CAS?Будет ли строка кэша кэша процессора после сравнения и свопинга?

ответ

0

Он не нуждается в обновлении, он уже обновлен. Видимость кэша (в обычных системах и типах памяти) гарантирует, что любая строка кэша, считываемая с обычными операциями, обладает таким же результатом, как если бы вся память была плоской и обновлялась последовательно. Если, с другой стороны, вы имеете дело с частичным, WC, потоковым или любым другим необязательно-когерентным доступом, то вы не получите эту гарантию.

С заблокированными операциями это обычно достигается аппаратными средствами путем захвата внутренней блокировки по линии кэша, так что CAS выполняется атомарно (read-modify-write), но это ортогонально когерентности кеша. Независимо от выполняемой вами операции (даже в простом хранилище) любая операция чтения, попадающая в эту строку кэша сразу после «(младше в порядке выполнения программы в том же потоке или в хронологическом порядке потом на любом другом потоке/ядре), увидит линию после операции CAS. Конечно, доступ из других потоков также может отследить линию до этой операции и увидеть старые данные (в зависимости от порядка вашей системной памяти и любых мер предосторожности, которые принимает ваш код).

0

Да, это полный барьер памяти в этой строке кэша. Поэтому, если вы обновили некоторую другую переменную в одной и той же строке кеша, а затем выполните свою атомную операцию, значение будет видимым для всех других процессов/потоков.


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

Смежные вопросы