Обновить
11

System Programming / Performance Engineering

2
Подписчики
Отправить сообщение

Лучше поздно, чем никогда.

Я думаю, компилятор просто не вдаётся в анализ кода настолько, чтобы гарантировать отсуствие сайд-эффектов при вызове функции.

Ну то есть технически можно написать же и вот так:

static size_t inline __attribute__((always_inline)) strlen2(const char* __restrict const s) {
    static size_t len = 0;
    return ++len;
}

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

static size_t inline __attribute__((no_side_effects_infa100)) strlen2(const char* __restrict const s);

Ну и доказать ещё, что аргументы не будут меняться — вдруг у меня другой тред по ходу цикла тайком переписывает указатель.
Всё это абсурдные сценарии, конечно, но с точки зрения компиляции оптимизации не должны влиять на результат выполнения ну вообще никак, даже если в коде написана полнейшая дичь.

В целом, если прям интересно, то, наверное, могу поискать, но сразу скажу, что там всё максимально тривиально.
Тут проблема в конкретно нашем сценарии, когда регулярно выделяется относительно большой кусок памяти. Если за входной параметр взять килобайт, то разница будет мизерной, а tcmalloc даже окажется не самым быстрым.

Рейт лимит не завезли?

Так дело не только и не столько в этом. Рейт лимит не избавляет от вызовов логгера, а приводить к потере производительности они могут и без реальной записи сообщения куда-либо.

Tcmalloc? У вас там треды? Тогда надо про треды пейсать. А иначе, если топик про c++, то давайте вспомним c++17 std::pmr::polymorphic_allocator

Так вспомнили же.

Не слышали, но будем иметь в виду, спасибо.

Мне кажется, @redfox0 прав. Плюс сходил в исходники glibc (https://elixir.bootlin.com/glibc/glibc-2.40.9000/source/sysdeps/x86_64/multiarch), и там уже есть векторизированные вручную варианты этих функций.

Да, так и есть, это эквивалентные конструкции.

Информация

В рейтинге
Не участвует
Откуда
Новосибирск, Новосибирская обл., Россия
Зарегистрирован
Активность

Специализация

Системный инженер
C++
Linux
Git
Bash
C
Системное программирование
Английский язык
Performance
Embedded linux