Что это такое, как оно работает и действительно ли программирование без ветвей ускоряет ваш код?

Недавно я наткнулся на очень интересное видео, посвященное этой идее под названием «Программирование без ветвей». В нем говорилось о том, что управляющие структуры, такие как оператор if, очень медленны и обременительны для ЦП, а затем была представлена ​​идея программирования без ответвлений. Я прикрепляю ссылку ниже, для тех, кто хочет посмотреть.

Это видео побудило меня глубже изучить тему. Так что я немного покопался в программировании без ветвей и узнал из него кое-что очень интересное. Итак, в сегодняшнем выпуске Tech Made Simple мы рассмотрим программирование без ветвей. Это удивительно спорная тема (есть ли что-то, из-за чего программисты не начинают войны на форумах), поэтому мы рассмотрим, что такое программирование без ответвлений, как оно теоретически должно работать и о чем идет обсуждение.

Присоединяйтесь к более чем 90 000 технологических лидеров и получайте информацию о самых важных идеях в области ИИ прямо на свой почтовый ящик через мою бесплатную рассылку — AI Made Simple

Мне это нравится, но мне вспоминается закон Кернигана: «Отладка в два раза сложнее, чем написание кода. Поэтому, если вы пишете код максимально умно, вы по определению недостаточно умны, чтобы его отлаживать».

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

Что вы должны знать о программировании без веток

Что такое программирование без ветвей.Программирование без ветвей — это метод программирования, который устраняет или сводит к минимуму использование ветвей в коде. Ветви — это условные операторы, такие как операторы if-else и циклы, которые могут привести к снижению производительности современных процессоров.

Когда ветвь выполняется, процессор должен остановить то, что он делает, и проверить состояние ветвления. Он не может планировать заранее, что усложняет оптимизацию.

Действительно ли это важно?

Когда дело доходит до компиляции кода, процессоры используют метод, называемый Instruction Pipelining. Это включает в себя получение следующих инструкций во время выполнения текущей. Выполнение инструкции включает в себя 4 шага:

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

Когда ЦП декодирует инструкцию ветвления, он должен очистить этапы и перезапустить конвейер. Это может складываться, особенно когда мы имеем дело с условными выражениями в циклах.

Источник изображения. Эта статья является отличным источником информации о конвейерной обработке инструкций и программировании без ветвей. Я широко использовал его для этого раздела

Branchless также полезен для SIMD, так как в нем изначально отсутствуют ответвления. Крайний случай, но стоит упомянуть. Если вы хотите углубиться в эту тему, это отличный пост в блоге, в котором описаны некоторые случаи, когда программирование без ветвей может быть победителем, а также некоторые опасения по этому поводу.

Почему возникла дискуссия. Должно быть ясно, что программирование без ветвей дает преимущества оптимизации. Так почему же это не более мейнстрим? Почему этому не учат в колледжах, почему это не упоминается в интервью и т. д.? Почему многим разработчикам это не нравится? Проще говоря - сложность. Как упоминалось ранее, программирование без филиалов становится более сложным, чем ваше последнее расставание (по сложности оно не уступает налоговому законодательству). Эта сложность часто сводит на нет любой выигрыш в производительности: в большинстве случаев простой код лучше умного. Как мы говорили в нашей статье о чистом коде, чистый код — это код, который может быть существенно изменен другими разработчиками с минимальным контролем. Программирование без ответвлений противоположно — часто требуется много размышлений, чтобы полностью понять решение. Не очень подходит для обслуживания.

Мой взгляд на это. Короче говоря, я не большой поклонник этой техники. Учитывая всю мою тягу к упрощению вещей, это не должно вызывать удивления. Даже для умеренно сложного кода я не вижу в этом особенно жизнеспособного решения. По моему опыту, гораздо лучше построить более простую систему, чем пытаться оптимизировать сложную. Конечно, мой опыт сильно зависит от моего опыта в машинном обучении, где самые большие ROI часто связаны с выбором более простых моделей, ограничением взаимодействия с пользователем в нескольких областях и проектированием/выбором данных. Но чего бы это ни стоило — программный сабреддит, кажется, согласен со мной по поводу программирования без филиалов.

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

Если кто-то из вас хотел бы поработать над этой темой, не стесняйтесь обращаться ко мне. Если вы ищете консультанта по искусственному интеллекту, внедрение программного обеспечения или что-то еще, моя компания SVAM поможет клиентам во многих отношениях: разработка приложений, консультирование по стратегии и подбор персонала. Не стесняйтесь обращаться и делиться своими потребностями, и мы можем что-то придумать.

Это все для этого произведения. Я ценю ваше время. Как всегда, если вы хотите поработать со мной или ознакомиться с другими моими работами, мои ссылки будут в конце этого письма/сообщения. «Если вам нравится то, что я пишу, я был бы очень признателен за анонимный отзыв. Вы можете бросить его здесь. И если вы нашли ценность в этой статье, я был бы признателен, если бы вы поделились ею с большим количеством людей. Рекомендации из уст в уста, такие как ваши, помогают мне расти.

Сэкономьте время, энергию и деньги, просмотрев все эти видео, курсы, продукты и "тренеров" и легко найдя все, что вам нужно, в одном месте Технологии стали проще! Оставайтесь на шаг впереди в области искусственного интеллекта, разработки программного обеспечения и технической отрасли с помощью экспертных идей, советов и ресурсов. Скидка 20 % для новых подписчиков, перешедших по этой ссылке. Подпишитесь сейчас и упростите свое путешествие в мир технологий!

Использование этой скидки снизит цены-

800 индийских рупий (10 долларов США) → 640 индийских рупий (8 долларов США) в месяц

8000 индийских рупий (100 долларов США) → 6400 индийских рупий (80 долларов США) в год (533 индийских рупии в месяц)

Получи скидку 20% на 1 год

Свяжитесь со мной

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

Небольшие фрагменты о технологиях, искусственном интеллекте и машинном обучении здесь

Информационный бюллетень ИИ- https://artificialintelligencemadesimple.substack.com/

Любимый технический бюллетень моей бабушки — https://codinginterviewsmadesimple.substack.com/

Ознакомьтесь с другими моими статьями на Medium. : https://rb.gy/zn1aiu

Мой Ютуб: https://rb.gy/88iwdd

Свяжитесь со мной в LinkedIn. Подключаемся: https://rb.gy/m5ok2y

Мой Инстаграм: https://rb.gy/gmvuy9

Мой Твиттер: https://twitter.com/Machine01776819