Что делать, если ваш код на Python тормозит / Григорий Бакунов (Яндекс)
Вставка
- Опубліковано 4 лют 2020
- Moscow Python Conf++ 2019
Зал 1
5 апреля, 14:00
Тезисы и презентация:
conf.python.ru/2019/abstracts/...
Секретный доклад от директора по распространению технологий в Яндексе.
--------
Нашли ошибку в видео? Пишите нам на support@ontico.ru - Наука та технологія
Конкретно в этом коде подсчет контрольной суммы можно было вынести из цикла. Вне цикла разбить body через метод partition, подсчитать сумму до и после @respondent@, а в цикле только считать сумму для resp. Думаю, получилось бы то же х100 ускорение, хотя это зависит от длины body.
Очень хороший доклад, спасибо!
Очень жаль, что он не делает курс по изучению python. Такое объяснение учитывая все нюансы работы интерпретаторов. Ну хотя бы роудмэп создать, ему бы конкурентов не было. А по поводу презентации Браво! Если когда-нибудь создадут технику по копирования мозгов, твой мозг будет первым). Да, есть люди кто старается изучить эту область до твоего уровня может и больше), но доступа к информации и ресурсам как у тебя нету.
Выносить ифы из цикла это довольно древний олдскул (эры динозавров примерно, т.е. вообще допентиумной эпохи), который сейчас нифига не помогает выиграть в производительности. Почему так - довольно долго объяснять в деталях но основной посыл в том что размер кеша процессоров значительно увеличился, он стал трехуровневым и процы научились предсказывать переходы. В то же время пайтон представляет из себя интерпретатор и время необходимое на интерпретацию и выполнение инструкции даже не напрямую, а в байткоде -- значительно превышает время, нужное процу чтобы сбросить и перезагрузить кеш инструкций в случае ошибочного предсказания ветвления. Дяденька из яндекса должен был бы это знать наверное... но нет, увы.
Так он уже много веков не программирует, поэтому и не знает
Я не понял: он говорит, что если можно вынести любую работу из цикла, то лучше ее вынести. Не понимаю, почему это сейчас неверно. Если цикл делает меньше работы, он всё равно быстрее выполнится, несмотря на магию процессоров.
@@eugenemorozov Программа должна решать поставленную задачу. Если ты сможешь написать программу которая решает ту же задачу за меньшее число инструкций и вообще оптимальнее без потери функционала - то ты молодец, кто ж с этим спорит. Однако к программам на питоне кроме всего этого и прочего предъявляется еще и требование читаемости исходного кода. Зачастую в ущерб паре-тройке процентов скорости выполнения. Повторюсь: скорость выполнения - отнюдь не фишка питона. Это во-первых. Во-вторых, что по-твоему будет быстрее: один большой цикл с ветвлениями в нем, или пара-тройка циклов поменьше но без ветвлений (ветвления вынесли на уровень выше)? Оба варианта решают ту же самую задачу, целиком помещаются в кэше процессора и условие ветвления уже процессору известно перед началом всех циклов (т.е. это не рандом на каждой итерации).
Посмеялся, что nim, pyrhon, cython, ruby, go итп итд типа все знают, а вот строчка на Си и сразу шок, что ее поняли.
Шрифт Pragmata Pro (вдруг кому-то интересно)
Алиса, ваш браузер устарел.