Я где-то читал, что hyperthreading может сделать 32-битный int (на 32-битном процессоре) читать и писать неатомно, даже когда он граничит. Может ли кто-нибудь объяснить, как это влияет на hyperthreading?Может ли гиперпоточность влиять на атомарность 32-битного int чтения/записи на 32-битном процессоре?
Может ли гиперпоточность влиять на атомарность 32-битного int чтения/записи на 32-битном процессоре?
ответ
Если бы это было так, это была бы какая-то ужасная ошибка ЦП, которая была бы конкретной для конкретной модели или степпинга. То, что 32-битные чтения и записи являются атомарными, имеет фундаментальное значение для свойств платформы x86, и на них полагаются Windows, Linux и множество и множество прикладных программ.
Единственное, что я могу думать о том, что это, возможно, имел в виду, это переход от одноядерных ЦП без гиперпоточности к одноядерным ЦП с гиперпотоком. На одноядерном процессоре x86 без гиперпотока отдельные команды (такие как приращение), которые выполняют операции чтения-изменения-записи на выровненных 32-битных переменных, являются атомарными даже без префикса блокировки. (Они не гарантированы, они просто случаются). Процессор с гиперпотоком ведет себя как процессор с двумя физическими ядрами, поэтому операции чтения-изменения-записи (кроме обмена) не гарантируются атомом без префикс блокировки.
Это неуместное различие теперь, поскольку подавляющее большинство процессоров, с которыми ваше программное обеспечение столкнется, будет иметь более одного ядра так или иначе. Таким образом, даже однонаправленные операции чтения-изменения-записи при выровненных 32-битных значениях не будут атомарными, если не заблокированы. (Exchange является исключением, поскольку он заблокирован даже без префикса.)
Aligned чтение или запись всегда является атомарным даже в многопроцессорных системах. Что не является атомарным (и это, вероятно, то, что вы слышали) или, по крайней мере, то, что вы должны были услышать) являются инструкциями read-modify-write, такими как приращение или добавление с целью памяти. Они не являются атомарными даже в системах HT, но они являются атомарными (а не гарантированно, а не случайно) для систем с одним логическим процессором, даже если они не заблокированы.
У вас есть ссылка на это, которая уточняется далее? – DuckMaestro
- 1. Может ли изменение без знака int влиять на размер__выхода?
- 2. Может ли распараллеливание отрицательно влиять на производительность?
- 3. Может ли setbuf() влиять на cout?
- 4. Может ли контроллер влиять на файл _layout.cshtml?
- 5. Может ли «//» влиять на производительность HTTP-запроса?
- 6. Может ли указатели на C++ влиять на файл Windows?
- 7. Может ли RequiredFieldValidator влиять на другие элементы на странице?
- 8. Может ли файл на основе CacheDependency отрицательно влиять на производительность?
- 9. Каков размер int на 8-битном процессоре?
- 10. На какие переменные может влиять вызов функции
- 11. Почему всплывающее предупреждение может влиять на «designMode»?
- 12. Может ли плавающий элемент влиять на элементы «кузена»?
- 13. MVC: Может ли частичный просмотр влиять на iframe?
- 14. Может ли тег ALT влиять на отображение изображения или нет?
- 15. Может ли длина FFT влиять на точность фильтрации?
- 16. Может ли дочерний процесс влиять на среду родительского процесса?
- 17. Может ли css влиять на элементы, добавленные document.write?
- 18. Может ли __attribute __ ((упакован)) влиять на производительность программы?
- 19. Может ли структура папок влиять на производительность приложения Windows Phone?
- 20. Может ли слишком много каротажа влиять на производительность веб-приложения?
- 21. Может ли управляемый код влиять на уровень параллелизма?
- 22. Может ли javascript работать внутри iframe влиять на главную страницу?
- 23. Может ли конструктор по умолчанию ничего не влиять на производительность?
- 24. Может ли частичный просмотр влиять на разметку вне себя?
- 25. Может ли ob_start() влиять на включенные и необходимые файлы?
- 26. Будет ли запрос NHibernate влиять на производительность?
- 27. Может ли DirectCompute действительно использоваться на графическом процессоре DX10.1?
- 28. Может ли эта многопоточная программа работать правильно на одноядерном процессоре?
- 29. Может ли GPU использоваться для запуска программ, работающих на процессоре?
- 30. Может ли несколько процессов ОС работать параллельно на многоядерном процессоре?
Я не уверен, что вы правильно поняли. Я считаю, что чтение является атомарным (все выровненные по слову 4 байта все еще читаются сразу), но модель памяти может дать сюрпризы тому, что на самом деле читается. –
Ссылка, или этого не произошло. Мы не можем оспаривать каждый сумасшедший слух, который кто-то «где-то читал». (Возможно, это было неправильно прочитано.) – cHao
Если простые арифметические операции не могли выполняться над словом атомарно, я считаю, что это может иметь некоторые довольно интересные последствия ... – Corbin