Size: a a a

2020 August 07

KO

Konstantin Osipov in pro.cxx
Андрей Руссков
ну я же говорю - вариант который сгенерировался для std::visit оптимальнее
а вы упорный. 10 раз было произнесено слово call, а вы всё про прыжки в метку.
источник

KO

Konstantin Osipov in pro.cxx
спасибо за помощь и дискуссию, но блин, я тоже хочу быть как-то полезен, вы задумайтесь о стоимости call на секунду хотя бы
источник

АР

Андрей Руссков... in pro.cxx
так в моем примере специально абстрактные функции, которые не заинлайнишь
источник

АР

Андрей Руссков... in pro.cxx
call там точно будет
источник

АР

Андрей Руссков... in pro.cxx
и он ровно один
источник

KO

Konstantin Osipov in pro.cxx
а в моём - нет.
источник

АР

Андрей Руссков... in pro.cxx
в сгенерированных функциях jmp
источник

АР

Андрей Руссков... in pro.cxx
задуматься о стоимости call на секунду то? 12 тактов против 100+ для бранч миспредикта?
источник

KO

Konstantin Osipov in pro.cxx
вы по-прежнему про if которого тоже нет?-)
источник

NP

Nikita Provotorov in pro.cxx
Konstantin Osipov
а в моём - нет.
а можете запилить два эквивалентных варианта кода, один с std::variant + std::visit, а другой на голых енамах так, чтобы в первом случае был call, а во втором не было?
источник

АР

Андрей Руссков... in pro.cxx
Konstantin Osipov
вы по-прежнему про if которого тоже нет?-)
ну попробуйте доказать компилятору все ОДЗ во всех местах кода
источник

KO

Konstantin Osipov in pro.cxx
Nikita Provotorov
а можете запилить два эквивалентных варианта кода, один с std::variant + std::visit, а другой на голых енамах так, чтобы в первом случае был call, а во втором не было?
тут я соглашусь. вопрос даже похоже подробно вот здесь разобран: https://stackoverflow.com/questions/57726401/stdvariant-vs-inheritance-vs-other-ways-performance
источник

KO

Konstantin Osipov in pro.cxx
то есть реально vptr vs std::variant - разницы никакой
источник

АР

Андрей Руссков... in pro.cxx
зашибись бенчим ага )
источник

АР

Андрей Руссков... in pro.cxx
бранч предикт 100%
источник

АР

Андрей Руссков... in pro.cxx
а в конце поста как раз более-менее норм замеры, там видно что сравнимо. visit хуже, но уж точно не на уровне виртуального вызова
источник

KO

Konstantin Osipov in pro.cxx
да, там в конце он исправляется. но сам бенч я не гонял. мораль
источник

АР

Андрей Руссков... in pro.cxx
мораль - если тебе критичны пара тактов разницы (а там реально пара тактов) то делай как знаешь лучше )
источник

KO

Konstantin Osipov in pro.cxx
Андрей, а почему вы решили что call не приведёт к pipeline stall?
источник

KO

Konstantin Osipov in pro.cxx
там же call по тому же самому неизвестному адресу идёт. адрес вычисляется из таблицы.
источник