Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Коллеги, не стесняйтесь создавать велосипеды.Если есть кто-то кто готов это оплачивать…
Почему я пишу свои алгоритмы в 95% случаев, и буду и дальше разрабатывать кодовые велосипеды
Так вот, используя чужой код я не уверен на 100% что он во всех случаях отработает как надо. Если я его не разобрал построчно, и особенно все непонятные мне места
потому вы смешиваете разные алгоритмы и их элементы в разных функциях. <...> Получается довольно ядреная спагетти-смесь из кодов, весьма сложная в изменениях, но крайне эффективно решающая задачу.не следует читать как "Вы заботливо раскладываете вокруг себя грабли"?
Fisher's Fundamental Theorem states—in terms appropriate to the present context—that the better adapted a system is to a particular environment, the less adaptable it is to new environments.Gerald M. Weinberg «The Psychology of Computer Programming»
Я разработчик экспериментальной системы управления крылатым беспилотником.
Чаще проще написать с нуля, понимая идею и решение, чем адаптировать и переписывать к своим требованиям чужое. Да, это занимает время, но на выходе получаем очень эффективный и безопасный код. Заточенный именно под нужную задачу.
Код исполняется без ОС или со своей ОС, короче работает гораздо более строго детерминированной среде
Внутри моего кода используется очень много абсолютных переходов типа goto, и все лишние расчеты максимально срезаются.
Если есть кто-то кто готов это оплачивать…
std::nth_element<float*> Перепутал "меньше" и "меньше или равно". На float-ах раз в месяц и подвисало. Теперь каждый раз, когда думаю о самописном алгоритме вместо библиотечного задаюсь вопросом "Хочу ли я, чтобы к заказчику в **** поехал кто-то из моей команды разбираться с проблемой в этом алгоритме?.."Забавно получается что программисты железа получают 'микросервисную архитектуру' из коробки. Этот МК — отвечает за сетевое взаимодействие, этот за управление двигателем и.т.п.нет, ради экономии денег на каждом экземпляре (это железо, а не софт) стараются всё простое типа аналоговых модемов, езернета, http сервера, файловой системы, адаптивной сигнальной обработки звука и тд спихать всё в один чип и подешевле а значит послабже. А у нас на фирме например маржа с каждой железяки делится между разработчиками от 25 до 30% между прочим например. Так что финансовый кнут ещё тот балансировать между грянями минимализма и запасом по флешу и памяти для будущего развития и патчей своих же факапов (которые из премии уже не 30 а 100% вычитаются включая транспортные расходы).
Ок, тогда на этом МК запускается сильно специализированная задача из серии что-то рассчитать по формуле из сигнала,Микроконтроллеры это те же самые компы, они просто отличаются от обще-принятых персоналок / веб серверов. И развивать на них проекты порой нужно подольше чем для ПК. 10-20 лет норма. Тем более те же авр и даже i51 до сих пор актуальны и не устарели а i8051 архетектуре лет… ну в даже СССР клоны были.
написали один раз — и забыли. Тут тогда поддержки как таковой нет вообще и не нужно.
Существует также советский клон данной микросхемы, КР1816ВЕ51.
Простите, не поверю что полноценную систему управления БПЛА можно впихнуть на один «160 мегагерц и 300 кб ОЗУ»это не моя разработка с БПЛА. об этом лучше спросить автора статьи. Могу сказать что автор статьи использует STM32F4xx, а эти чипы очень часто в БПЛА идут. В квадрики особенно. Они реально мощные, на уровне целеронов на которых Win98 и Win2000 шли без лагов и тормозов. Так же свой MMX есть правда урезанный но есть. И плавающая запятая есть.
…
Между этими задачами еще переключаться надо правильно и.т.п.
Если вы полноценный стек своими руками пишите, вплоть до шедуллеров, реализацию многопоточности самостоятельно и.т.п. — Это не правильно, это не место для велосипедов. Задачи стандартные.если переключаться нужно редко (менее 10к в сек), если не требуется строго реалтайма, если экономика не давит и не надо каждый килобайт экономить, если есть опыт и ещё много «если». То есть куча разных RTOS. и они отлично с задачами справляются. Есть rtos не пригодно то есть простые как валенок lockfree алгоритмы и приёмы типа очередей точка-точка. И тд. Это не проблема.
А завтра Васю собьет автобус, и что?плохо. как минимум месяц-два в тему входить и изучать много тыщь строк документации, хех которую часто не ведут в полной мерее. Просто людям надо побольше платить, а потом Москвичи в шоке — за 80...120тр инженеры с опытом не хотят. да даже за 150тр вообще не едут в Москву из глубинки ну никак. В любом случае часто Вася один или два три не более. В любом случае программист Си для NXP для двигателей с опытом работы найти это из области фантастики и пол года отдача будет так себе если он вообще изучит матан двигательный или например модемный. Ну и пожжот до кучи несколько приводов за лям и запросит. В любом случае выход на полную отдачу пол года — это неплохо.
Ок, тогда на этом МК запускается сильно специализированная задача из серии что-то рассчитать по формуле из сигнала,Просто другой из пяти миров имени Спольски.
написали один раз — и забыли. Тут тогда поддержки как таковой нет вообще и не нужно. 'Велосипедить' можно сколько угодно.
…
Это я все к чему, то о чем говорить автор в статье полностью имеет смысл в таких условиях. Но забава в том, что это очень редкий случай.
Очень тяжело проверять чужие коды на безопасность и устойчивость. И всякие cppcheck не помогут. Это хорошие инструменты, но они обнаруживают только технические, но не алгоритмические ошибки, которые в чужих кодах встречаются. Чаще проще написать с нуля, понимая идею и решение, чем адаптировать и переписывать к своим требованиям чужое. Да, это занимает время, но на выходе получаем очень эффективный и безопасный код. Заточенный именно под нужную задачу
Вот, понадобился мне алгоритм обхода графа, но граф не общий, а особого вида. Даже не прямоугольная решётка, а это может быть гибрид прямоугольной и гексагональной решётки. Ясень пень, что для ускорения работы программы нужно писать свой алгоритм обхода, заточенный специально под этот конкретный случай графа, ускорение получаем в сотни и тысячи раз.
Скажем, есть обход графа, а есть некий набор действий, который нужно сделать с результатом обхода (с последовательностью вершин). Это как бы два разных алгоритма. А можно сделать всё сразу: обход плюс нужные действия (скажем, сортировка вершин или ещё что-то). Получаем более эффективную процедуру, чем если делать всё шаг за шагом.
Алгоритм решения задачи о максимальном потоке методом Форда-Фалкерсона был ускорен в 13 раз простым переходом от списка stl::list для хранения графа через смежные вершины к собственному списку на основе голых массивов, упорядоченному особым образом в памяти.
Хотя я требовал выиграть в 50 000 раз, но у него не получилось, поэтому я ему 4 поставил: )
Даже когда победа была всего лишь на 10%. Согласитесь, считать 100 дней или 90 дней — есть разница?По моему опыту, обычно нет разницы, потому что всё равно «ручной» анализ полученных расчётов занимает больше времени, да и эти 10 дней — они не мои, а компьютера/кластера, его время намного дешевле моего (для меня лично и с финансовой точки зрения — тоже). Если я могу подождать расчётов 90 дней — смогу и 100, а если нет — куплю получше компьютер. Разница между годом и месяцем — есть, а между годом и полгода — нет.
в этом и состоит искусство распараллеливания — свести эту связь почти к нулю или к просто к минимуму.Согласен, это я и хотел сказать, говоря о BOINC. Мало смысла в классических суперкомпьютерах: часто там где они используются, можно заменить подход и перейти к GPGPU или BOINC-типа архитектуре выиграв по всем параметрам.
Если я считаю, что что-то можно ускорить в N раз, значить N — это минимум, который я гарантирую по каким-то причинам.Я об этом и спрашивал, по вашим прикидкам на коленке, возможно было ускорить программу в 50000 раз?
Понятие «теоретический предел алгоритма» — это тоже фикция, не имеющая ничего общего с реальностью.
Бывают задачи, в которых нужно иметь около 1ТБ оперативной памяти
Вы не совсем правы, когда говорите, что если от a+b нельзя избавиться, что нет смысла менять одно на другое
…
переход в p-адическую арифметику дал вообще даже иную оценку сложности работы.
Почему я пишу свои алгоритмы в 95% случаев, и буду и дальше разрабатывать кодовые велосипеды