Latency profiler
Представьте ситуацию, вы пишете код на Python, вызываете посередине библиотеку, например, для inference, понимаете, что программа работает медленно. Собираете профиль с помощью стандартных утилит вроде perf, и в итоге видите следующую картину
90% Matmul
10% some Python
Смотрите на это, расстраивайтесь, ведь умножение матриц скорее всего так сильно соптимизировано, что можно даже не пытаться.
К счастью, не все так просто. Perf собирает события со всех потоков и CPU, которые суммируются. В итоге если вдруг умножение матриц было на многих ядрах, скажем, 8, то вы увидите в профиле, что вес matmul в 8 раз больше.
Недавно в perf добавили --latency, тулза, которая делит все события на количество активных CPU. После этого вы можете увидеть профиль в духе
40% matmul
60% some Python
Теперь оптимизировать питон есть смысл для задержки (latency), ведь профиль показывает, что из реального времени вы провели 40% в умножении матриц (может, на многих ядрах) и 60% в питоне (скорее всего в 1 ядре). Это часто бывает полезно в серверах, системах сборки, в тулзах командной строки.
Не без ограничений, если у вас многопоточный сервер, у которого есть thread pool для какой-то работы, то математика задержки будет сложнее. Тестировать лучше изолированно и без нагрузки на остальную систему. Полезно, но надо знать как пользоваться.
https://www.phoronix.com/news/Linux-6.15-Perf-Tools-Latency
Post #289
14.1K