Как стать автором
Поиск
Написать публикацию
Обновить

Комментарии 22

В растовом коде я вижу деление одной и той же переменной в цикле. Это убивает производительность (для этой операции) примерно в 5 раз. Деление (или взятие остатка от деления) в конвейре занимает 2 тика, деление для зависимого значения (т.е. деление результата предыдущего деления) занимает 20+ тиков.

Возможно, все конвертации можно заменить на lookup-таблицы (т.е. month_str = month_lookup[month])

А можете поделиться ссылкой или подробностями, почему так?

Я это для себя обнаруживал, отлаживая tight loop в графическом коде (где надо быстро-быстро считать точки, хотя бы 60 кадров в секунду).

С ходу нашёл вот это: https://www.geeksforgeeks.org/computer-organization-and-architecture-pipelining-set-2-dependencies-and-data-hazard/

А сами цифры вот: https://www.agner.org/optimize/instruction_tables.pdf

Для IDIV там IDIV r64/m64 2 9-17 7-12 (2 тика в pipeline, 7-12 если сделать для data dependency)

НЛО прилетело и опубликовало эту надпись здесь

Спасибо за идею и ссылки. Обязательно попробую!

Есть подозрение, что можно обойтись ссылками на слайсы конечного массива, а не аллоцировать отдельные массивы. Плюс +48 сделать в конце всего, дабы не захламлять код.

Результаты профайлинга (cprofile):

прокомментируйте пожалуйста, где на этом выводе cProfile видны тормоза преобразования в Json ? (не сарказм, серьезно)

Очень странная подсветка в блоках кода на Rust. Буквально 2-3 слова подсвечивает, остальное серое. Это у меня баг или автор выставил не Rust в качестве языка для них?

fn не подсвечен, from подсвечен (причём не на keyword позиции). if/else подсвечен. Очевидно же, что питон-разметка.

Я слишком редко вижу питон, чтобы это распознать с первого взгляда)

Ну тогда это просто лень/невнимательность/пофигизм автора

Спасибо за то, что подметили! Исправлено.

НЛО прилетело и опубликовало эту надпись здесь

Хм, впервые услышал. Спасибо за совет! Попробую.

НЛО прилетело и опубликовало эту надпись здесь

По поводу сериализации даты на Rust:

  1. Массив лучше всего сразу заводить динамический: `vec![0; 30]`. Затем поглащать его через String::from_utf8_unchecked. Во-первых, не породим лишнюю копию данных, во-вторых, избежим ненужных проверок.

  2. HashMap лучше сразу создать с HashMap::with_capacity(1);

  3. Лишние переменные: month_array, day_array и другие.

  4. Про деление уже выше сказали

Отличные советы! Спасибо! Есть еще много места для улучшения...

Почти всё ещё забавно наблюдать как разработчики сначала пишут проект на лайтовых скриптиках (Python, Node.js), а потом героически поднимают производительность ныряя в нормальные компилируемые языки (обычно сразу в C/C++/Rust).
Каждый раз интересно, что мешает сразу писать на чём-то более производительном, хотя бы на Java/.Net.

А мне так же забавно наблюдать как разработчики сначала берут Java/.Net, тратят буквально недели на обсуждения очередного интерфейса или абстрактного класса, чтобы достичь необходимой гибкости архитектуры. И в конечном итоге всё равно из-за нехватки производительности изучают твики виртуальной машины, изобретают всякие костыли для ручного управления памятью и прочее.

Пренебрежительное отношение к скриптовым языкам может быть разве что от незнания бытовой мудрости — какой бы язык не выбрал, всё равно найдутся функциональные блоки, которые будет выгоднее переписать на другом языке.

Я ж не спорю, что, например, для прототипирования или для однократных задач скриптовые языки лучше. Но такое ощущение, что все команды думают: «Ну уж этот проект точно никогда не будет обрабатывать много данных, поэтому быстро напишем на том, на чём можем быстро написать». Только вот далеко не всегда такая быстрая разработка выливается в простую поддержку, оказывается, что иногда приходится переписывать на чём-то быстро работающем, то есть выполнять двойную разработку.
Тут виноваты скорее даже не сами разработчики, а аналитики, которые не смогли заранее, до начала разработки, предсказать нагрузку на продукт/модуль.

Если на проекте неделя тратится на обсуждение интерфейса или абстрактного класса — виноват точно не язык. Просто попались такие разработчики, которым больше нравится обсуждать интерфейсы чем работать.


И да, ваш комментарий выглядит так, как будто разработчики на скриптовых языках не обсуждают неделями абстрактные классы — а это не так. Я даже сталкивался с такими коллегами на проекте...

Потому что это быстрее. На питоне скорость разработки в разы быстрее, чем на "нормальных компилируемых языках". А оптимизация потом может и не потребоваться вовсе. А может и потребоваться, но без применений другого языка, например, с помощью специальных библиотек. Ну а если уже совсем ничего не помогает, тогда только вспоминаем про C и Rust. В итоге конечный результат достигается быстрее, и намного.
(Ничего не имею против "нормальных компилируемых языков", я их тоже очень люблю :))

Сарказм? Прежде чем понять, что появились(возникли) проблемы в производительности в том или ином конкретном месте, проект должен уже работать хотя бы как внутренний MVP. Очевидно, что на C и так далее, вы более или менее сложный проект - будете только дописывать, когда "клиенты" уже будут пользоваться проектом, а автор только лишь тюнить узкие места.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий