2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




На страницу Пред.  1 ... 10, 11, 12, 13, 14
 
 Re: Как писать быстрые программы
Сообщение16.11.2025, 18:57 
Dmitriy40 в сообщении #1709540 писал(а):
Если под распилом Вы подразумеваете разбросать код по функциям, то нет, это замедлит.

Смотря как пилить. Ясно, что "основное вычисление" надо оставить в одной функции, которая работает не вызывая другие [пользовательские] функции как минимум несколько секунд.
Ну и логически разделить, просто в коде.

 
 
 
 Re: Как писать быстрые программы
Сообщение16.11.2025, 19:26 
wrest в сообщении #1709550 писал(а):
Ясно, что "основное вычисление" надо оставить в одной функции, которая работает не вызывая другие [пользовательские] функции как минимум несколько секунд.
Достаточно и доли секунды.
Я недавно измерил скорость проверки кортежа (не совсем кода из этой темы, но достаточно близкого), вышло 20мкс расчётных - в том смысле что столько в среднем занимает одна итерация перебора кортежей, но с учётом хорошей фильтрации реально код проверки занимает порядка 100мкс, просто он вызывается лишь для примерно 1/6 всех итераций, а в остальных случаях отрабатывает намного быстрее. Вызов функции вовсе не бесплатен и займёт доли мкс если не считанные нс (если не передавать огромные массивы), т.е. вполне можно всю проверку конкретного кортежа убрать в функцию. Только я не очень понимаю зачем, ведь ей понадобятся кучи структур и переменных снаружи (пусть и read only, т.е. без побочных эффектов). А уровни вложенности циклов вполне видны при использовании правильных отступов (за что я всех упорно агитирую).

Вот убрать проверку одной перестановки в функцию это да, можно. Как и вычисление всех нужных структур для конкретной перестановки (правда непонятно как их возвращать, это же натуральный побочный эффект, а возврат по куче ссылок в аргументах мне лично сильно не нравится). Но тоже смысла не слишком много (не люблю выделять в функцию код, используемый ровно один раз, лишняя писанина, да и не факт что компилятор догадается его подставить без inline).

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

 
 
 [ Сообщений: 197 ]  На страницу Пред.  1 ... 10, 11, 12, 13, 14


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group