🐙 Antony
Vsevolod
хотя смотрю, вот, есть ext/pb_ds/cc_hash_table
Vsevolod
closed hashing == open addressing
🐙 Antony
open addressing быстрее, но стандарту не удовлетвояет. В open addressing другая инвалидация итераторов + не получится извлекать ноды из контейнера не меняя адресс хранимого объекта (полезная фишка С++17)
Vsevolod
я об этом и написал выше
Vsevolod
но скорость хеш таблиц зачастую бывает критическим моментом
Vsevolod
https://github.com/vstakhov/jahash - я когда-то давно писал для сишки, а потом бросил, потому что тлен
Vsevolod
в моих задачах встречаю такое постоянно
Vsevolod
а вот iterators validity для unordered container даже не смотрел ни разу, ну и извлекать ноды из контейнера приходилось исчезающе редко (разве что для non-volatile коньтейнеров, но там совсем другая история)
Berkus
но скорость хеш таблиц зачастую бывает критическим моментом
ну в этом случае стоит применять критически быстрые таблицы
Pavel
https://godbolt.org/g/VodqEt
Pavel
или уже было?
Крылатый
Чо за TAILCALL?
Vsevolod
lfence
Крылатый
А
Vsevolod
типа для сброса спекулятивного исполнения always false бранча?
Berkus
TAILCALL это хвостовая рекурсия
Berkus
вместо call func ret оно делает jmp func
Berkus
чтобы стек не засирать, шланг умеет такую оптимизацию
Vsevolod
tailcall - это понятно
Vsevolod
оно тут при чем вообще?
Berkus
Чо за TAILCALL?
Berkus
ты вопрос читал?
Vsevolod
без retpoline он все равно так делает
Berkus
я на него отвечаю
Vsevolod
я про retpoline
Berkus
я про вопрос на который я отвечаю
Vsevolod
pause lfence jmp .LBB1_1
Vsevolod
https://stackoverflow.com/questions/48089426/what-is-a-retpoline-and-how-does-it-work - ага, как обычно это уже было в Симпс^W^Wна stackoverflow
Vsevolod
lfence, кстати, не останавливает speculative prefetch
Vsevolod
но, видимо, speculative pipelining останавливает
Vsevolod
ага, об этом написано в update в этом ответе
Berkus
> infinite loop that is never executed хех
Крылатый
> Naturally, protecting an indirect branch means that no prediction can occur. КЛасс...
Vsevolod
хм
Vsevolod
а вот я взял туда и добавил try ... catch
Vsevolod
и возврат из catch retpoline не стал обрабатываться
Vsevolod
https://godbolt.org/g/C9rNBG
Vsevolod
это вообще законно?
Oleg
Привет. Я хочу написать что-то вроде std::for_each (container.begin (), container.end (), []( auto &n ){ …; }); И мне очень лень явно указывать тип элеметов в container. Правда, что это позволят шаблонные лямбды, которые планируются в c++20?
Vsevolod
тут же недавно постили про => для такого
Oleg
Собственно, ровно так ты можешь писать с C++14: https://ideone.com/JAy8x1
И действительно, прогресс есть. Пойду дальше ждать концептов.
Vsevolod
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/p0573r2.html
Oleg
Народ
Oleg
безопасно ли подключаться к приложению strace'ом?
Oleg
Отчасти. Все системные вызовы будут работать в несколько раз дольше (не знаю, во сколько именно), больше эффектов не должно быть.
Oleg
ок. Спасиюл
Andrii
Есть вот такая шаблонная функция template<unsigned a, unsigned b> bool foo() { ... } Как сделать её частичную специализацию, где второй параметр равен еденице? На такой вариант компилятор ругается template<unsigned a> bool foo<a,1) { ... } Пишет non-class, non-variable partial specialization ‘foo<a, 1>’ is not allowed
Anonymous
Всё, как ты и понял, частичная специализация функций запрещена.
Anonymous
Заверни реализацию в структуру со статическим call, при особом желании — определи функцию, которая вызывает этот call.
Anonymous
Всё, как ты и понял, частичная специализация функций запрещена.
Кстати, раз уж зашел об этом разговор, какая мотивация запрета?
Andrii
Всмысле сделать эти функции методами какой-то структуры?
Anton
Кстати, раз уж зашел об этом разговор, какая мотивация запрета?
Я подозреваю что ввело бы дополнительные сложности к уже достаточно сложному частичному упорядочивания шабл. функций
Oleg
Чтобы не перемешивалось, скажем, с перегрузкой функций по параметрам?
Oleg
Народ, нужно помощь по профилированию. Приложение под линукс. Консоль-онли. Чем профильнуть, чтобы понять в каком методе больше всего зависает и почему?
Vsevolod
perf
Anonymous
valgrind —tool=callgrind
++, тоже хотел его предложить.
Anonymous
Но потом задумался, ибо не использовал другие инструменты (калгринд оказался самым простым).
Anonymous
Вдруг что-то лучше есть.
Vsevolod
callgrind сам зависает, бгг
Oleg
вот пробую перфом но он как-то хреново показывает. Саму функцию вообще не показывает, которая, как я знаю, самая тяжелая.
Vsevolod
-g
Vsevolod
если у тебя omit-frame-pointer или инлайнинг, то может и не очень релевантное показывать
Vsevolod
я обычно ассемблер смотрю
Andrii
Всё, как ты и понял, частичная специализация функций запрещена.
такой вариант однако работает template<unsigned n> bool foo() { ... } template<> bool foo<0>() { ... }
Alexander "SonnySlave"
Anonymous
Какие вообще есть хорошие профайлеры для линя? Мне бы вот, чтобы понимал потоки.
Vsevolod
vtune :)
Anonymous
> commercial application Ех, я школьник с крайне мелким заработком(
Anonymous
From $899. Тяжко.
Alexander "SonnySlave"