зачем std::atomic?
От: Barbar1an Украина  
Дата: 16.07.20 16:15
Оценка: -1
разве операции с простымит типами(bool, int) не атомарные изначально?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: зачем std::atomic?
От: T4r4sB Россия  
Дата: 16.07.20 16:17
Оценка: +6
Здравствуйте, Barbar1an, Вы писали:

B>разве операции с простымит типами(bool, int) не атомарные изначально?


Нет
Re: зачем std::atomic?
От: Alexander G Украина  
Дата: 16.07.20 16:25
Оценка: 8 (2) +4
Здравствуйте, Barbar1an, Вы писали:

B>разве операции с простымит типами(bool, int) не атомарные изначально?


Не гарантировано. Даже если и атомарно (по факту таки да, атомарно):
* Нет memory_order, всегда как бы memory_order_relaxed, даже чутка хуже (некоторые перестановки компилятором возможны, которые memory_order_relaxed запрещает)
* Нет read-modify_write операций. Т.е. i = 1 (store) или return i (load) -- атомарны, i++ уже нет.
Русский военный корабль идёт ко дну!
Re: зачем std::atomic?
От: B0FEE664  
Дата: 16.07.20 16:55
Оценка: 6 (1) +2
Здравствуйте, Barbar1an, Вы писали:

B>разве операции с простымит типами(bool, int) не атомарные изначально?


Нет. Более того, компилятор может соптимизировать переменную так, что её в исполняемом коде вообще не будет. Поэтому в старом коде можно встретить volatile вместо atomic, но даже для volatile при наличии атомарности не гарантируется (не гарантировалась ?) ожидаемая работа, когда есть исполнение на двух или более ядрах.
И каждый день — без права на ошибку...
Re[2]: зачем std::atomic?
От: Barbar1an Украина  
Дата: 16.07.20 16:57
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Здравствуйте, Barbar1an, Вы писали:


B>>разве операции с простымит типами(bool, int) не атомарные изначально?


AG>Не гарантировано. Даже если и атомарно (по факту таки да, атомарно):

AG>* Нет memory_order, всегда как бы memory_order_relaxed, даже чутка хуже (некоторые перестановки компилятором возможны, которые memory_order_relaxed запрещает)
AG>* Нет read-modify_write операций. Т.е. i = 1 (store) или return i (load) -- атомарны, i++ уже нет.


ааа, ммммммм,понял, спасибо посоны)
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: зачем std::atomic?
От: Alexander G Украина  
Дата: 17.07.20 08:17
Оценка: 4 (2)
Здравствуйте, B0FEE664, Вы писали:

BFE>Нет. Более того, компилятор может соптимизировать переменную так, что её в исполняемом коде вообще не будет. Поэтому в старом коде можно встретить volatile вместо atomic


Кстати, по теме оптимизации атомиков

N4455 No Sane Compiler Would Optimize Atomics
  spoiler

Abstract

False.

Compilers do optimize atomics, memory accesses around atomics, and utilize architecture-specific knowledge. This paper illustrates a few such optimizations, and discusses their implications.

Русский военный корабль идёт ко дну!
Re[3]: зачем std::atomic?
От: B0FEE664  
Дата: 17.07.20 08:36
Оценка:
Здравствуйте, Alexander G, Вы писали:

AG>Кстати, по теме оптимизации атомиков

AG>N4455 No Sane Compiler Would Optimize Atomics
AG>
  spoiler
AG>

AG>

Abstract

AG>False.
AG>Compilers do optimize atomics, memory accesses around atomics, and utilize architecture-specific knowledge. This paper illustrates a few such optimizations, and discusses their implications.


Это не правильный спойлер. Вот правильный:

Atomic operations are unsuitable to express that memory locations can be externally modified. Indeed, volatile (or volatile atomic) should be used in these circumstances.

И каждый день — без права на ошибку...
Re[4]: зачем std::atomic?
От: Alexander G Украина  
Дата: 17.07.20 08:45
Оценка:
Здравствуйте, B0FEE664, Вы писали:

BFE>Это не правильный спойлер. Вот правильный:

BFE>

BFE>Atomic operations are unsuitable to express that memory locations can be externally modified. Indeed, volatile (or volatile atomic) should be used in these circumstances.


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

Про то, что с этим делать, дискуссия пошла дальше: P0062R1: When should compilers optimize atomics?
  Скрытый текст

The use of volatile qualifiers for this purpose may not be effective, and is discouraged.

Русский военный корабль идёт ко дну!
Re: зачем std::atomic?
От: σ  
Дата: 17.07.20 14:15
Оценка:
B>разве операции с простымит типами(bool, int) не атомарные изначально?

atomic нужен в основном не для атомарности доступа к самому atomic-объекту, а для упорядочивания операций с другими объектами вокруг такого доступа.
Re: зачем std::atomic?
От: 3V Россия  
Дата: 18.08.20 19:30
Оценка:
Здравствуйте, Barbar1an, Вы писали:

B>разве операции с простымит типами(bool, int) не атомарные изначально?


Сделай выровненную упакованную структуру.
Вначале — заполнение данными. В конце — int, пересекающий границы кешлайна.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.