Семен (sim0nsays) wrote,
Семен
sim0nsays

Jedi optimization guide

Все мы понемногу что-то там да оптимизяли, то производительность, то расход памяти, то трафик, то еще что-то. Оптимизация прекрасна тем, что всегда свежа и неожиданна - так как пишешь код всегда с примерным учетом того, что уже знаешь, и в необходимых местах автоматически кодаешь вменяемо, то задача каждый раз формулируется по-новому.

Разные джедаи подходят к этой вечно новой задаче по-разному.


В классических книжках пишут общие принципы - сначала запрофайлить приложение и посмотреть, кто хавает больше всего, постулируя принцип 90-10, потом найти эти боттлнеки, разложить их по полочкам и понять, во что и как они упираются. Сначала попытаться пересмотреть алгоритм и побороться за О-большое от чего-нибудь, потом прикинуть, как можно совсем по-другому, и только потом опускаться на low-level. После изменения в коде обязательно-обязательно сравнить его с изначальным вариантом во всех интересующих ситуациях, убедиться что все ведет себя именно так, как задумано, и только потом продолжать. Под конец написать регресионные тесты и держать старую реализацию под боком как эталонную. Все это сопровождается замечательными советами в духе "Design for Performance", "Never trust anyone except profiler" и прочими коммунистическим лозунгами.
Отличная сборка такого классического изложения - например тут.

Все эта теоретика кайфа - путь сферического светлого джедая в вакууме страны эльфов. Да, хорошо бы, если так. На практике же боттлнеков получается штук 10 различных, разложить каждую по полочкам занимает полдня, а упираются они в три-четыре разных фактора. Причем, еще и только на данной конкретной конфигурации железа.
Алгоритмы кроме явных недосмотров (а чем круче светлый джедай, тем меньше он их допускает) толком не пошевелить, архитектура выбрана локально-оптимальная (мы же пишем внятный и правильный код, чтобы работало!), и если и может быть переделана, то только большими усилиями - условно глобальной перетряской.
Изменения, потенциально дающие хороший буст, действительно дают его в первой итерации, но с каждым баг-фиксом есть шанс, что он уменьшится. Ведь багфикс - это вполне возможно ветвление в неожиданном месте, дополнительные данные протащить и нарушение тонкого кислотно-щелочного баланса оптимизированного кода, а то и архитектурный хак чтобы поддержать совместимость с прошлой моделью. Путь светлого джедая - путь потерь.
Ну и конечно, в реальной жизни никогда нет времени для полного и исчерпывающего профайлинга. На какие ухищрения приходится идти, чтобы в любимой графике что-то померять я писал в одном из прошлых постов, и у меня нет серьезной уверенности, что в других областях все намного лучше. В реальной жизни профайлер вносит существенные изменения в работу. В реальной жизни "Design for Performance" очень быстро упирается в то, что дизайн уже вот он, и переделывать его тупо нет ни времени, ни денег.

Причем мы ведь говорим о мега-правильном светлоджедайском варианте - сразу пишем приличный код, и именно поэтому его тяжело ужимать. Почему этот код просто не оставить таким, какой он есть?
Очень просто. Закон жизни - все спеки и лимиты будут проебаны. Всегда выйдут за возможности того кода, всегда откуда-нибудь возьмется поле для оптимизации. Причем, очевидно, выйдут, когда будет уже поздно переделывать. Ну а джедаи тем и отличаются от простых смертных, что способны на подвиги, а за каждым подвигом, как известно, стоит преступление.

Знаете, как живут в такой ситуации темные джедаи?

Темные джедаи пишут код совсем не так. Во-первых, код должен не быть красивым, а компиляться. Не быть правильным, а запускаться. Не быть надежным, а работать. Во-вторых, первый вариант должен быть готов максимально быстро (желательно - утром), соответственно, чем большим можно пренебречь, тем лучше. Разумеется, этот код начинают использовать и привыкать к его возможностям. Вот все слышали, что арт решает? Он и правда решает, будь там шейдер что из 20 инструкций, что из 100, также зажжот и на прототипе.
Далее, приходит волшебный момент, когда джедая таки садят код оптимизять - что-то тормозит. Темный джедай посылает всех понятно куда - нахрен. Еще через некоторое время садят таки насильно - все уже не просто тормозит, а не дышит уже совсем никак, спеки проебаны напрочь. Он засучивает рукава, и через полдня становится радостный - оба-на, нашел пару мест в которых просиралось 80% производительности! Все помнят мего-анекдот?

"Сдавайтесь, у вас закончились ракеты, а у нас еще 3 штуки осталось"
"Вчера в Сибири была однаружена заброшенная ракетная база, так что теперь у нас 20 ракет, а у вас только 3".
"Эх, предупреждал меня предшественник, что если что и погубит Америку, дак это русская безалаберность."


Вот, это именно оно. И чем круче темный джедай - тем у него таких ракетных баз в Сибири больше. Разумеется, не надо разбираться, во что уперт конкретный боттлнек, надо просто оптимизировать заведомо неправильно написанные куски, благо этого более чем достаточно. Надеюсь, не нужно объснять, почему кристально-чистое понимание только мешает? Путь темного джедая - путь приобретений.
В свете основного жизненного закона вполне можно писать плохой код! Да, мы выйдем с более слабыми показателями, но ведь выйдем же! Выйдем в отличие от неудачников, которые запустили энтропию дальше.
В реальной жизни, конечно, все гораздо веселее, атмосфера паники и бардака не в пример выше. Оно и понятно - "О май год, а вдруг базу в Сибири не найдут?". И разумеется, в коде утонет кто угодно, кроме его создателя. Наверное, в эти моменты в офисе звучит раскатистое "Буа-ха-ха", и темный джедай именно ими и живет. Подвиги нужны и необходимы не меньше, просто преступление за ними надо совершать самому. Так гораздо надежнее - у кого риск, у того и ревард.


Я же, как простой смертный, на этом и откланяюсь.
I'm just a simple man, trying to make my way through the universe (с)

P.S. Пожалуйста, не воспринимайте серьезно ;)
UPD: Клево, нашлись люди, которые восприняли!
aruslan написал замечательный пост про потери светлого джедая, который выше простого негра:
http://aruslan.livejournal.com/89951.html
dubor пишет о том, как проводил опрос о джедайской стороне:
http://dubor.livejournal.com/109618.html
Жжоте, мужики :)
Tags: tech
  • Post a new comment

    Error

    default userpic
  • 52 comments