Berkus
в общем случае валгринд шумнее и больше false positives
Anonymous
@berkus я про гитхаб вчера говорил
Berkus
если асан совсем не ловит, тогда можно провалгриндить
Berkus
медленна, только для релизных билдов
Денис
Всем привет. Надеюсь, что кто-нибудь сталкивался 😔 Пытаюсь сбилдить PySide2 под виндой, падает с ошибкой LLVM version 3.9 is required (llvm-config detected Process failed because: for command: llvm-config --version at Process failed because: for command: llvm-config --prefix). Поставил LLVM с офф сайта, но llvm-config все так же нету на системе. На линуксе тоже была такая проблема, но там все быстрее решилось, просто доставил еще один пакет. Перегуглил все вдоль и поперек, у многих тоже возникают вопросы, где взять этот llvm-config на винду, но вменяемых ответов не нашел. Может кто-нибудь знает?
Berkus
что такое -static-libstdc++
Berkus
вроде нормально, https://gcc.gnu.org/onlinedocs/gccint/LTO-Overview.html
Денис
это бинарник, надо чтобы он был в PATH и тогда все найдется
Проблема в его отсутствии после установки llvm
Berkus
http://llvm.org/builds/ ы?
Денис
Ага
Berkus
тоже надо -flto линкеру д
🐙 Antony
-fwhole-program писать не надо - это устаревшая, выканутая опция компиялтора. Ей на замену пришла -lto
Berkus
-fwhole-program это другое
Berkus
да, вот что Тони говорит
🐙 Antony
:)
🐙 Antony
не надо комбинировать
Berkus
я запостил ссылку там было про этот режим
Berkus
https://gcc.gnu.org/onlinedocs/gccint/WHOPR.html#WHOPR
Berkus
вот тут еще
🐙 Antony
Похоже что -fvisibility=hidden -lto современнее чем -fwhole-program -lto
Berkus
очень просто 1. берем кланг 2. собираем с -emit-llvm 3. линкуем с -flto
Berkus
оно берет IR из объектников и оптимизирует его целиком
Berkus
довольно медленно но очень злобно
🐙 Antony
С -fvisibility-hidden ?
Berkus
по идее -fvisibility=hidden -fvisibility-default=hidden
Berkus
https://github.com/berkus/cmake-setup/blob/master/setup.cmake#L89 для clang-lto у меня такие опции были
🐙 Antony
можно начать отсюда, а там посмотрим :)
🐙 Antony
+1 но тут надо учитывать следующее: Этот поиск O(1) по памяти, а значит его можно 1) сделать constexpr 2) ?? использовать вместо std::search ?? 3) он быстрее других поисков на небольших строках надо поэкспериментировать, прикинуть его другие слабые и сильные стороны
🐙 Antony
:) Если сделаешь до 10 числа - постараемся донести результаты до комитета
Constantine
Я просто обожаю КМП
Constantine
А, там O(1) память, ого
🐙 Antony
да, при том на мальеньких строчках тоже
🐙 Antony
стоит еще посмотреть на потребление памяти и на объем бинарного кода
🐙 Antony
Constantine
Я скорее из общих соображений. КМП имеет дальнейшее продолжение в Ахо-Корасика
🐙 Antony
уж если смотреть, то по полной :)
Berkus
конечно
Constantine
да и не нужно, у меня есть)
Constantine
Хотел быстренько прочитать статью про алгоритм, но там строковые многобукав и я ниасилил
Arseny
А бывает что-то быстрее strstr на коротких строчках?
Aragaer
ну есть там алгоритм кнута по поиску подстрок
Constantine
Я не знаю как она делать. Если поставить паддинг строке до align 8, можно делать поиск на 64ках
Aragaer
вроде strstr это не всегда его прямая реализация
Constantine
По крайней мере оптимальный алгоритм вычисления длины и сравнения требует align 8
Aragaer
вот я и говорю - реализовать алгоритм кнута будет быстрее, чем наивный
Aragaer
а strstr скорее всего наивный
Constantine
КМП еще и O(N) доп памяти
Constantine
Чсх
Constantine
RA ему надо на шаблон
Aragaer
ну вот вам и трейдофф - плюс память, зато скорость
Constantine
точнее O(M) ему длину шаблона надо
Constantine
это не трейдофф, говорят, там линейный алгоритм с О(1) памяти предлагают
Berkus
Constantine
Что-то я подвис. Как правильно использовать 64 арифметику при наличии паддинга?
Berkus
посмотри в реализации libstdc++
Constantine
Для длины и сравнения строк там очевидно, как
Constantine
а что, в libstdc++ строкам паддинги ставят?)
Constantine
подождите-как
Constantine
std::search это универсальный алгоритм?
Constantine
а указанный алгоритм требует порядка в алфавите?
Constantine
я про crochemore_perrin
Constantine
std::less для std::search не слишком сильное требование?
Constantine
там должно быть только std::equal, нет?
Constantine
вообще будет странно, у меня мало идей, зачем может быть нужен порядок на алфавите :)
Constantine
я нашел рандомную реализацию как раз
Constantine
и она хочет LessPredicate
Constantine
https://github.com/EdSchouten/crochemore_perrin_searcher/blob/master/crochemore_perrin_searcher.cc
Constantine
требование std::less ужасно же
Constantine
надо тогда знать, какие свойства наложены на std::less в данном случае
Constantine
я, конечно, рассказываю каждому потоку, какие требования на компараторах быстрых сортировок, но я боюсь, что далеко не все их знают
Constantine
выглядит как наркота
Constantine
возможно, он в том числе реализует equal через less
Constantine
да, в алгоритме явно используется сравнение
Constantine
угу
Constantine
вообще-то это беда