2012-03-15 1 views
0

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

+0

Я не уверен, что вы правильно поняли. Я считаю, что чтение является атомарным (все выровненные по слову 4 байта все еще читаются сразу), но модель памяти может дать сюрпризы тому, что на самом деле читается. –

+6

Ссылка, или этого не произошло. Мы не можем оспаривать каждый сумасшедший слух, который кто-то «где-то читал». (Возможно, это было неправильно прочитано.) – cHao

+2

Если простые арифметические операции не могли выполняться над словом атомарно, я считаю, что это может иметь некоторые довольно интересные последствия ... – Corbin

ответ

5

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

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

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

2

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

+0

У вас есть ссылка на это, которая уточняется далее? – DuckMaestro

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