170 похожих чатов

Почему должна / не должна быть?

13 ответов

29 просмотров

Атомарные - это те, которые завершаются или не выполняются вообще. По идее это сложение, совмещённое с присваиванием, т.е. две операции.

Constantine-Drozdov Автор вопроса
Пользователь 62843
Атомарные - это те, которые завершаются или не вып...

Я понимаю, что такое атомарность, я не понимаю, почему вы считаете, что атомарность += специфицирована

Constantine-Drozdov Автор вопроса
Пользователь 62843
Атомарные - это те, которые завершаются или не вып...

Да, заметьте, что атомарность не означает "отсутствие блокировок" или "отсутствие цикла" (в частности, атомарное чтение shared_ptr вполне может содержать мьютекс)

Constantine Drozdov
Я понимаю, что такое атомарность, я не понимаю, по...

Тут операция += атомарна? float dot_prod(float* a, float* b, int n) { float sum = 0.0f; #pragma omp parallel for shared(sum) for(int i=0; i<n; i++) { #pragma omp atomic sum += a[i] * b[i]; } return sum; }

Constantine-Drozdov Автор вопроса
Пользователь 62843
Тут операция += атомарна? float dot_prod(float* a...

а что написано в документации к #pragma omp atomic

Constantine-Drozdov Автор вопроса
Пользователь 62843
А, понял

вообще, пример чудесен тем, как не надо писать многопоточные программы

Пользователь 62843
Тут операция += атомарна? float dot_prod(float* a...

OMP не специфицируется стандартом языка, не входит в рамки языка вообще. Это - расширение конкретного компилятора. Поэтому, атомарно оно или нет, читай в документации на конкретный используемый компилятор. К С++ это не относится. Кроме того, очень хочу наконец узнать, кто же так вас пичкает этим несчастным OMP? В промышленной эксплуатации это не используется вообще никогда. Ну или почти. Зачем это изучать, я не очень понимаю.

Пользователь 62843
А, понял

Вот Костя очень правильно заметил, именно поэтому это OMP и не используют, потому что надо уметь распараллеливать программы, а не вот так вот, и на самом деле, чем больше независимость параллельных кусков кода, тем более эффективно это все работает. Общих переменных в параллельном коде быть не должно вообще, в идеале, либо по минимуму.

Пользователь 62843
А чем лучше параллелить в 2021?

Руками, std thread, ну и корутины уже есть

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Подскажите пожалуйста, как в CustomDrawCell(Sender: TcxCustomGridTableView; ACanvas: TcxCanvas; AViewInfo: TcxGridTableDataCellViewInfo; var ADone: Boolean); получить наз...
A Z
7
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Раз начали говорить про embassy, то присоединюсь со своими парой вопросов. 1) Есть ли сопоставимые аналоги для асинхронного кода в emdebbed? 2) Можно ли внутри задач embassy ...
NI_isx
6
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
1
Он в одиночку это дело запилил или была какая-то команда?
Aquinary
12
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта