Может ли гиперпоточность влиять на атомарность 32-битного чтения / записи int на 32-битном процессоре? - PullRequest
0 голосов
/ 15 марта 2012

Я где-то читал, что гиперпоточность может заставить 32-битные int (на 32-битном процессоре) считывать и записывать неатомарные, даже если они выровнены по границе. Кто-нибудь может объяснить, как это вызывает гиперпоточность?

Ответы [ 2 ]

6 голосов
/ 15 марта 2012

Если бы это было правдой, это была бы какая-то ужасная ошибка процессора, которая была бы характерна для одной конкретной модели или степпинга.То, что 32-разрядные операции чтения и записи являются атомарными, является фундаментальным для свойств платформы x86, и на них полагаются Windows, Linux, а также множество прикладных программ.

Единственное, что я могу думать об этом, этоВозможно, речь идет о переходе от одноядерных процессоров без гиперпоточности к одноядерным процессорам с гиперпоточностью.В одноядерном процессоре x86 без гиперпоточности отдельные инструкции (например, приращение), которые выполняют операции чтения-изменения-записи для выровненных 32-разрядных переменных, являются атомарными даже без префикса блокировки.(Они не гарантированы, они просто случаются.) ЦП с гиперпоточностью ведет себя очень похоже на ЦП с двумя физическими ядрами, поэтому операции чтения-изменения-записи (кроме обмена) не гарантируются атомарными безпрефикс блокировки.

Это не имеет значения, поскольку подавляющее большинство процессоров, с которыми столкнется ваше программное обеспечение, будет иметь более одного ядра, так или иначе.Таким образом, даже операции чтения-изменения-записи с одной инструкцией для выровненных 32-разрядных значений не будут атомарными, если они не заблокированы.(Exchange является исключением, поскольку он заблокирован даже без префикса.)

2 голосов
/ 15 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...