Несколько дней назад мне довелось посмотреть очень интересную презентацию Стефана Т. Лавейжа, в которой упоминается оптимизация «Мы знаем, где вы живете» (извините за использование аббревиатуры в заголовке вопроса, ТАК предупредил меня, что в противном случае вопрос мог бы быть закрыт), и эту прекрасную презентацию Херба Саттера о машинной архитектуре.
Коротко говоря, оптимизация «Мы знаем, где вы живете» заключается в размещении счетчиков ссылок в том же блоке памяти, что и объект, создаваемый make_shared, что приводит к выделению одной памяти вместо двух и делаетshared_ptr более компактным. (Примечание для читателей: это неверная интерпретация WKWYL)
Однако после суммирования того, что я узнал из двух презентаций выше, я начал задаваться вопросом, не может ли оптимизация WKWYL ухудшить производительность в случае, если к Shared_ptr обращаются несколько потоков, работающих на разных ядрах.
Если счетчики ссылок близки к реальному объекту в памяти, то с большей вероятностью они будут выбраны в ту же строку кэша, что и сам объект. Это, в свою очередь, если бы я правильно усвоил урок, было бы более вероятно, что потоки будут замедляться, конкурируя за одну и ту же строку кэша, даже если в этом нет необходимости.
Предположим, что одному потоку необходимо обновить счетчик ссылок несколько раз (например, при копировании разделяемого_ptr), в то время как другим просто нужен доступ к указанному объект: не замедлит ли это выполнение всех потоков, заставляя их конкурировать за одну и ту же строку кэша?
Если бы счетчик ссылок находился где-то в другом месте в памяти, я бы сказал, что конфликты возникнут с меньшей вероятностью.
Является ли это хорошим аргументом против использования make_shared() в аналогичных случаях (пока это реализует оптимизацию WKWYL, конечно)? Или в моих рассуждениях есть ошибка?
Подробнее здесь: https://stackoverflow.com/questions/143 ... -some-mult
Вводит ли оптимизация WKWYL в make_shared<>() штраф для некоторых многопоточных приложений? ⇐ C++
Программы на C++. Форум разработчиков
1761574263
Anonymous
Несколько дней назад мне довелось посмотреть очень интересную презентацию Стефана Т. Лавейжа, в которой упоминается оптимизация «Мы знаем, где вы живете» (извините за использование аббревиатуры в заголовке вопроса, ТАК предупредил меня, что в противном случае вопрос мог бы быть закрыт), и эту прекрасную презентацию Херба Саттера о машинной архитектуре.
Коротко говоря, оптимизация «Мы знаем, где вы живете» заключается в размещении счетчиков ссылок в том же блоке памяти, что и объект, создаваемый make_shared, что приводит к выделению одной памяти вместо двух и делаетshared_ptr более компактным. ([b]Примечание для читателей:[/b] это неверная интерпретация WKWYL)
Однако после суммирования того, что я узнал из двух презентаций выше, я начал задаваться вопросом, не может ли оптимизация WKWYL [b]ухудшить производительность[/b] в случае, если к Shared_ptr обращаются несколько потоков, работающих на разных ядрах.
Если счетчики ссылок близки к реальному объекту в памяти, то с большей вероятностью они будут выбраны в [b]ту же строку кэша[/b], что и сам объект. Это, в свою очередь, если бы я правильно усвоил урок, было бы более вероятно, что потоки будут замедляться, конкурируя за одну и ту же строку кэша, даже если в этом нет необходимости.
Предположим, что [b]одному[/b] потоку необходимо [b]обновить счетчик ссылок[/b] несколько раз (например, при копировании разделяемого_ptr), в то время как [b]другим просто нужен доступ к указанному объект[/b]: не замедлит ли это выполнение [b]всех[/b] потоков, заставляя их конкурировать за одну и ту же строку кэша?
[b]Если бы счетчик ссылок находился где-то в другом месте в памяти, я бы сказал, что конфликты возникнут с меньшей вероятностью[/b].
Является ли это хорошим аргументом против использования make_shared() в аналогичных случаях (пока это реализует оптимизацию WKWYL, конечно)? Или в моих рассуждениях есть ошибка?
Подробнее здесь: [url]https://stackoverflow.com/questions/14342159/does-the-wkwyl-optimization-in-make-shared-introduce-a-penalty-for-some-mult[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия