ideas
ideas copied to clipboard
атрибут заменяющий реализацию benchmark::DoNotOptimize(..)
<Описание вашей идеи> Для бенчмаркинга используют функции clobber и escape (https://youtu.be/nXaxk27zwlk?t=2441). В актуальном google benchmark это функции Clobber и DoNotOptimize. Если Clobber получил адекватную реализацию с с++11 через atomic_signal_fence, то DoNotOptimize все еще остается compiler-specific asm кодом.
<Примеры, где ваша идея будет полезна. Чем больше примеров и чем большую аудиторию они охватывают - тем лучше>
- Стандартизированный способ, который можно использовать в бенчмарках. Сейчас есть несколько способов реализовать эту функцию.
- Хочется форсировать "грязные вычисления" для сайд эффектов, но результат выражения бесполезен
<Код c реализацией вашей идеи, если есть>
- Здесь https://github.com/google/benchmark/commit/7b03df7ff76844a39359e9233f31ca8cdb073313 то как поменялась реализация этой функции несколько лет назад
- https://github.com/catboost/catboost/blob/master/util/system/compiler.h#L660
Полезные ссылки:
- https://quick-bench.com/ - онлайн бенчмарк, поможет вам продемонстрировать эффективность вашего подхода
- https://godbolt.org/ - онлайн дизассемблер
- https://eel.is/c++draft/ - черновик стандарта C++ с возможностью ссылаться на конкретные параграфы
- https://wg21.link/ - универсальная ссылка на международные proposal или баги в С++, например https://wg21.link/P1000 ссылается на документ P1000, а https://wg21.link/cwg100 на 100 баг в ядре языка