Содржина на објавата
Про программирование программирующего агента когда важна оптимизация. Если нужно ускорять код - его профилируют чтобы объективно (без домыслов и ошибок человеческого фактора) за быстро увидеть на что тратится много времени. Хотелось бы профилировать каждый запуск приложения, но это долго, поэтому может быть удобно в конце этапа обработки встроить самопрофилирование навроде: keypoints detection in 5.45 sec = 0% IO image reading + 4% GPU jpeg decoding + 4% GPU detection + 0% GPU description + 78% PCI-E readback + 12%unaccounted Но вот например оказалось что 12% unaccounted времени - это какой то кусок кода про который забылось, и самопрофилирование его потеряло. Расставив NVTX метки на временной шкале (с такими же названиями что в логе) - можно найти пузыри - где же упущенные 12% и что они делают. И добавить в самопрофилирование. Кайф, теперь легко держать руку на пульсе каждый раз и если однажды (например от изменения мира со временем: кода/железа/данных) начнет тормозить какая-то часть, то это бросится в глаза. Но это все становится особенно круто когда сформулировано агенту в правила ведения разработки, мол, сделав задачу логгируй распроцентовку, проверяй что unaccounted меньше 10%, и перед коммитом сверяй что логгированые числа бьются с реальностью (с замерами которые он соберет из профилировщика). А что если unaccounted больше 10%? Благодаря тому что агент видит названия учтенных стадий, и тому что метки на временной шкале профилировщика называются так же, то unaccounted - это все остальные моменты времени. А что там происходит - можно посмотреть по обычной информации профилировщика. Т.е. задача стала рутинной и обреченной на успех, это просто алгоритм, поэтому агент с ней справится. Почему я это пишу - БЕШЕННО кайфанул с того как хорошо получилось автоматизировать эту рутину, причем автоматизировать (хочется надеяться) на любые будущие алгоритмы. Слава Агентам! Слава Агентам! Слава Агентам! 🕺 P.S. мем от дорогого подписчика