Anonymous
Я подозреваю, что сложновато, да.
🦥Alex Fails
Беркус как-то говорил о том, как это сделать, я забыл, как.
Ned
дада, в меня даже ссылками покидались
Ned
но руки не дошли разобраться до конца
Ned
тащем-та можно, но осторожно
kitsu
Можно как-нибудь элегантно объеденить std::transform+std::back_inserter и placement-new?
🦥Alex Fails
Можно как-нибудь элегантно объеденить std::transform+std::back_inserter и placement-new?
ну, надо знать, где конец у нижележащей области placement new'а; потом сделать итератор поверх того конца области (.end() который).. Код можешь показать?)
kitsu
а не, не выйдет std::move-ом сделаю лучш
🦥Alex Fails
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
🦥Alex Fails
/extra #laststd Последний известный мне стандарт: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4713.pdf
nonentity
уже
nonentity
ахах
Anonymous
В нете списки есть открытых конф)
Matwey
Господа, а как бы вы назвали этот паттерн оптимизации? https://github.com/oetiker/rrdtool-1.x/blob/279af9eed4ea4858607e19b43faed3bb2f6fa8c4/src/rrd_graph.c#L246
🐙 Antony
Замена деления на умножение с обратным числом? Оно называется multiply by reciprocal, но в компиляторах работает только для деления на константы и при соблюдени множества условий
🐙 Antony
Или если вопрос про вынесение общей части нескольких выражений в отдельную переменную, то это common subexpression eliminantion
Matwey
Или если вопрос про вынесение общей части нескольких выражений в отдельную переменную, то это common subexpression eliminantion
Там не просто вынесение. Переменная статическая, сначала нужно её инициализировать вызвав функцию с аргументом = 0, а потом можно вызывать с другими аргументами.
Vsevolod
нет, конечно же
Vsevolod
все статические переменные инициализируются по умолчанию нулем
Vsevolod
а в данном случае это просто убогость "архитектуры" rrd
Vsevolod
а никакие не оптимизации
Matwey
Причем тут "по-умолчанию"?
Vsevolod
static int foo = 42;
Vsevolod
потому что по умолчанию
Matwey
Ну и в данном случае это не причем здесь.
Anonymous
Запусти в цикле static int n;
Anonymous
n++;
Matwey
static int foo; /// foo = 42; // останется до следующего вызова
Vsevolod
это уже не объявление
Matwey
именно
Vsevolod
что именно?
Matwey
это именно не объявление
🐙 Antony
Там не просто вынесение. Переменная статическая, сначала нужно её инициализировать вызвав функцию с аргументом = 0, а потом можно вызывать с другими аргументами.
Я не очень уверен в том, что это хорошая оптимизация: * она сломается при многопоточном использовании * сомневаюсь что код получится ощутимо быстрее, там больше тормозит конвертация из double в int, чем всё остальные операции * сомневаюсь что компилятор сможет разобраться в коде и хорошо соптимизировать его
Vsevolod
и как это противоречит тому, что я сказал?
Matwey
и именно это и используется
Vsevolod
конвертация из double в int тормозит в sse?
Vsevolod
в общем, rrd - это жуткая какаха. я в свое время плюнул копаться в этом, с позволения сказать, коде и написал свой rrd
🐙 Antony
конвертация из double в int тормозит в sse?
Conversion of a floating point number to an integer takes a very long time unless the SSE2 or later instruction set is enabled. Typically, the conversion takes 50 - 100 clock cycles. The reason is that the C/C++ standard specifies truncation so the floating point rounding mode has to be changed to truncation and back again.
🐙 Antony
так что нужен SSE2 как минимум
Vsevolod
да, но даже в арме с неоном это уже совершенно незначительная операция
Vsevolod
sse2 есть на любом актуальном процессоре
🐙 Antony
А вообще, щас посмотрим во что этот код превращается...
Vsevolod
точно на любом x86_64
Matwey
А вообще, щас посмотрим во что этот код превращается...
Брюки превращаются, брюки превращаютя, превращаются брюки...
🐙 Antony
Вот в такое превращается https://godbolt.org/g/iV7Mzi инструкция divsd занимет от 4 до 32 тактов, в зависимости от поколения процессора
Georgiy
поиск у телеграмма честно говоря лютая херня
Georgiy
там не только с плюсами такая проблема
Georgiy
там вообще поиск сам такой
Georgiy
он сбоку выглядит как обычный grep :)
Billy
Господа, я не в курсе есть ли унас отдельно канал по конану. может и стоило чтобы был. но спрошу пока тут. У меня есть либа A которая собирается и паблишится (сам делал). потом есть вторая B, которая используем первую, зависимость в py файле прописана. Теперь у меня будет 3я, которая будет тянуть lib B. Вопрос: Я правильно понимаю, что зависимости будут тянуться транзитивно ? Если нет, то как сделать чтобы да? спасибо
Billy
все правильно понимаешь
Лан. сейчас попробую. А то я решил перебздеть сначала :)
Billy
просто я не делал для либы B никакой файл текстовый с зависимостями. Я не понимаю, как он поймет, что для неё еще другая либа обязательна ? То есть с одной либою B не слинкуется проект. А обязательна
Billy
Так, тут проблемка образовалась, может кто сталкивался. Я удалил локальный кеш. Делаю conan install и он качает но падает, потому что /conanfile.py: No subclass of ConanFile Открываю файл, а он пустой
Billy
Кто-нибудь сталкивался с таким? Для обоих либ что манифест, что питон пустые запаблишились :(
Олександр
@AlexFails на счёт пятничного бага с мониторами. Пришёл сегодня, а у меня винда не грузилась, только из безопасного режима смог откатиться на дамп 23-го января. Ну и бага уже нет, похоже, что я в винде что-то сломал, когда с разрешениями игрался
Олександр
в общем, я там просто рандомно клацал на разрешения экранов, положения, их ориентацию. И масштабирование переставлял, но что именно привело к багу - не знаю
Олександр
лол😂
Georgiy
"плюсами" и греп найдет по слову "плюс", так как одно в другое входит
Berkus
март 2017
стандарт не в марте приняли а в котябре
🦥Alex Fails
Berkus
странно ожидать что за 2 месяца isocpp завалят статьями
Sergey
Так, нубский вопрос. Если мы объявим конст статик переменную в функции и функцию будем дергать из разных потоков, как будет организована атомарность её инициализации под капотом?
Sergey
@antoshkka Антон
Berkus
начиная, кажется, с 11 плюсов
Sergey
это я знаю, интересует как это обеспечивается (в гцц, например)
Sergey
или кланге
Berkus
через guard - обычно это мьютекс
Sergey
То есть, если я так сделаю стоит ли мне думать о том, что внизу мьютекс лежит?
Sergey
Спасибо
Egor
Вроде лежит. Но не только мьютекс — кажется, clang также добавляет некоторую переменную, чтобы уметь быстро проверять на инициализированность: https://godbolt.org/g/2TPNac
Berkus
То есть, если я так сделаю стоит ли мне думать о том, что внизу мьютекс лежит?
http://gcc.1065356.n8.nabble.com/cxa-guard-acquire-memory-barriers-td758529.html вот тут вот видны куски реализации в либстдс++
🐙 Antony
Так, нубский вопрос. Если мы объявим конст статик переменную в функции и функцию будем дергать из разных потоков, как будет организована атомарность её инициализации под капотом?
Зависит от типа переменной. Если переменная инициализируема во время компиляции - то будет константная инициализация, мьютексов и гуардов не будет в принципе
🐙 Antony
Иначе будет как писали выше - рекурсивный мьютекс в худшем случае