Вводит ли оптимизация WKWYL в make_shared<>() штраф для некоторых многопоточных приложений?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Вводит ли оптимизация WKWYL в make_shared<>() штраф для некоторых многопоточных приложений?

Сообщение Anonymous »

Несколько дней назад мне довелось посмотреть очень интересную презентацию Стефана Т. Лавейжа, в которой упоминается оптимизация «Мы знаем, где вы живете» (извините за использование аббревиатуры в заголовке вопроса, ТАК предупредил меня, что в противном случае вопрос мог бы быть закрыт), и эту прекрасную презентацию Херба Саттера о машинной архитектуре.
Коротко говоря, оптимизация «Мы знаем, где вы живете» заключается в размещении счетчиков ссылок в том же блоке памяти, что и объект, создаваемый make_shared, что приводит к выделению одной памяти вместо двух и делаетshared_ptr более компактным. (Примечание для читателей: это неверная интерпретация WKWYL)
Однако после суммирования того, что я узнал из двух презентаций выше, я начал задаваться вопросом, не может ли оптимизация WKWYL ухудшить производительность в случае, если к Shared_ptr обращаются несколько потоков, работающих на разных ядрах.
Если счетчики ссылок близки к реальному объекту в памяти, то с большей вероятностью они будут выбраны в ту же строку кэша, что и сам объект. Это, в свою очередь, если бы я правильно усвоил урок, было бы более вероятно, что потоки будут замедляться, конкурируя за одну и ту же строку кэша, даже если в этом нет необходимости.
Предположим, что одному потоку необходимо обновить счетчик ссылок несколько раз (например, при копировании разделяемого_ptr), в то время как другим просто нужен доступ к указанному объект: не замедлит ли это выполнение всех потоков, заставляя их конкурировать за одну и ту же строку кэша?
Если бы счетчик ссылок находился где-то в другом месте в памяти, я бы сказал, что конфликты возникнут с меньшей вероятностью.
Является ли это хорошим аргументом против использования make_shared() в аналогичных случаях (пока это реализует оптимизацию WKWYL, конечно)? Или в моих рассуждениях есть ошибка?

Подробнее здесь: https://stackoverflow.com/questions/143 ... -some-mult
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»