TGTGInsightintelligence telegramLIVE / telegram public index
← Experimental chill
Experimental chill avatar

TGINSIGHT POST

Post #214

@experimentalchill

Experimental chill

Visualizzazioni8,220Numero di visualizzazioni
Pubblicato11 gen11/01/2023, 23:24
Contenuto del post

Contenuto

Сегодня поздний пост, но как есть. Одна из оптимизаций, которая мне пришла в голову, и к которой у меня было не так много open source решений это просмотр коротких циклов. Почему это интересно? Проблема в том, что хоть вы и доверяете компилятору, не всегда ему получается векторизовать какие-то циклы, например, for (int i = 0; i < n; ++i) { data[i] ^= other_data[i]; } К сожалению, тут есть проблема, что data и other_data могут пересекаться и такая проблема называется aliasing. Компилятору порой просто нет информации, чтобы это предотвратить. Иногда это вырождается во что-то страшное как просто побайтовый цикл или что-нибудь ещё неприятное. Компиляторы С/C++ стараются создавать SIMD блоки, если указатели не пересекаются (см внизу https://gcc.godbolt.org/z/o7xhadsMq). Проблема в том, что так происходит не всегда, и векторизация просто не самый надёжный способ, оно растит бинарь достаточно мощно. Скажем есть большой бинарь ClickHouse. Проблема, с которой я столкнулся -- я хочу увидеть в большом бинаре и после всех performance тестов (их тысячи) короткие hot циклы, скажем, 5-6 инструкций, они скорее всего не очень векторизованы из-за каких-то таких проблем. Мы видели кейсы, когда мы находили случайно такие пропущенные оптимизации https://github.com/ClickHouse/ClickHouse/pull/9442 https://github.com/ClickHouse/ClickHouse/pull/9304 Единственная проблема в том, что я не понимаю как это сделать без открывания питона и парсинга objdump. Я хочу задать какой-нибудь SQL запрос с функцией LAG, где каждый ряд это инструкция, и есть какое-то количество колонок с адресами и прыжками, каунтерами, сколько раз мы посемплили ту или иную инструкцию. В итоге я использую что-то вроде objdump -Mintel -ldSrwC --no-show-raw-insn --visualize-jumps=extended-color И смотрю _напрямую_ И всё равно надо открывать питон и потратить день, чтобы написать колоночный формат disasm'а. Иногда даже проработав годы в индустрии, попросту не хватает тулинга. Я вообще думаю, что надо этим намного больше заниматься, чем самим перформансом