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

Где можно почитать про подобную оптимизацию от компилятора? void foo(std::atomic<bool>&

val)
{
if(!val.load(std::memory_order_relaxed))
{
Do1();
}

if(!val.load(std::memory_order_relaxed))
{
Do2();
}
}

To

void foo(std::atomic<bool>& val)
{
auto ___tmp = !val.load(std::memory_order_relaxed);
if(___tmp)
{
Do1();
Do2();
}
}

11 ответов

10 просмотров

А что именно ты хочешь про нее прочитать? В каких условиях компмлятор способен ее проделать?

我が名はレギオン- Автор вопроса
Mikail Bagishov
А что именно ты хочешь про нее прочитать? В каких...

Хочу "название" такой оптимизации, условия и какой-то реф пейдж чтобы ссылаться можно было. Не смог нагуглить

我が名はレギオン
Хочу "название" такой оптимизации, условия и какой...

Наверное, потому, что такая оптимизация невозможна на атомиках.

Alexander "Ternvein" Isaev
Наверное, потому, что такая оптимизация невозможна...

https://stackoverflow.com/questions/33127973/can-atomic-loads-be-merged-in-the-c-memory-model

Mikail Bagishov
https://stackoverflow.com/questions/33127973/can-a...

Ну и приписка в конце ответа тоже есть.

Alexander "Ternvein" Isaev
Там другой пример, где cst ordering.

seq_cst дает сильно меньше свободы оптимизатору чем relaxed

Alexander "Ternvein" Isaev
Ну и приписка в конце ответа тоже есть.

Ну ок, сейчас компиляторы консервативно боятся такое делать. Это не повод считать такую оптимизацию невозможной и не повод закладываться на ее отсутствие.

Mikail Bagishov
Ну ок, сейчас компиляторы консервативно боятся так...

Вообще в коде автора оптимизация такого рода вообще невозможна, потому что невозможно доказать, что значение атомика не изменится между вызовами. Даже теоретически.

Alexander "Ternvein" Isaev
Вообще в коде автора оптимизация такого рода вообщ...

ну если реализация функции Do1 в том же TU, то почему бы и нет

Boris Usievich
ну если реализация функции Do1 в том же TU, то поч...

Я исхожу из того, что Do1 и Do2 — чёрный ящик (как в вопросе).

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

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

Интересно, нет ли какого-то способа получить из dll не адрес самой метки, а адрес со смещением?
The Bird of Hermes
54
generic procedure function test<T>(param: T); type case T of longint: NewT = word; longword: NewT = byte; end; var v1: NewT; Как это можно сделать? Чтобы у меня...
notme
21
Делал задачу вот такую https://stepik.org/lesson/4985/step/9?unit=1083 получилось такое https://play.haskell.org/saved/ipKrepqe оно работает, тестов много не писал, но работае...
Fedor
22
Всем добрый вечер. Нужна помощь с прикруткой telegram-vapor-bot к проекту Vapor. Удалось после старта приложения отправить тестовое сообщение в бот, вот только сразу после это...
advanc3d
3
program Project1; procedure generic_proc<T>(); begin end; begin generic_proc<Int64>(0); end. Я чет не понял, а как в Delphi сделать такое? процедуру-дженерик... PS: а на...
notme
10
Кстати, что FPC мешает сделать нормальные проперти в юнитаз, завызанные на переменные? Нет, инлайнинг геттеров и геттеров кажется работает в принципе, но это же сколько лишн...
Arioch The
8
Хотел уточнить: копирование из одного рекорда в другой однотипный рекорд можно только по полям отдельно или можно чохом, типа Assign?
Ed Doc
9
Похоже опять туплю задача https://stepik.org/lesson/5431/step/8?unit=1132 код и его работа https://play.haskell.org/saved/lmYTShXM на мой взгляд все правильно, и даже избыто...
Fedor
8
Sometimes I like to solve problems the hard way. What do I mean? You know many problems can be fixed by restarting the system, but how much do you learn about the system? P...
Matthias Hoffmann
1
что-то я не понимаю, в линуксе отладочную информацию как убрать из бинаря? он что с этой опцией, что без - одного и того же (достаточно большого) размера (да, я про лазарь)
Iluha Companets
13
Карта сайта