О векторном вычислении экспоненциальной функции

Как вычислить экспоненциальную функцию быстро и с минимальной погрешностью? Пишем векторизованный код.
User

Как вычислить экспоненциальную функцию быстро и с минимальной погрешностью? Пишем векторизованный код.

UTF-8 валидация — одна из базовых операций при работе с текстом, которая выполняется миллионы раз в секунду в современных приложениях. Стандартная реализация в Go, хоть и корректная, далека от оптимальной по производительности. В этой статье расскажу, как мне удалось ускорить валидацию UTF-8 в 10 раз, используя SIMD‑инструкции ARM NEON и алгоритм из статьи «Validating UTF-8 In Less Than One Instruction Per Byte» Джона Кейзера и Дэниела Лемира.


В данной заметке хотелось бы обратить внимание на Эффект Холла в полупроводниках p-типа. Хотя в вузовских учебниках говориться об эффекте Холла в таких полупроводниках, но ни слова не упоминается о том, что невозможно объяснить результат с точки зрения классической физики, если не сделать допущение о положительном носителя тока - «Дырке». Хотя, фактически носителями тока в полупроводниках остаются электроны.
Вообще эффект Холла в p-полупроводниках – это удивительное проявление квантового поведения электронов в макро-масштабе.

Интервалы, интервалы,‑ где тут лево, где тут право...
Многие программисты в том или ином виде сталкиваются с интервалами при написании программ. Даже если об этом и не подозревают. Действительно, любой сможет написать код, который определяет, принадлежит ли некое число заданному интервалу или нет. И даже чуть более сложный - определить область пересечения двух интервалов-отрезков.
На практике однако встречаются и более сложные задачи. Допустим, например, что в некой гостинице есть два свободных номера. Но один свободен со 2-го по 5-е число, а второй - с 6-го по 10-е. Клиент интересуется, есть ли возможность поселения на 8 дней? Правильный ответ - "да, есть, но с переселением (лесенкой)". Для такого ответа программа должна уметь распознать, что интервалы [2, 5] и [6, 10] являются смежными , а значит, их можно сложить, получив общий доступный интервал [2, 10], длина которого (9) превышает запрашиваемый.
Другая более редкая, но и более интересная задача - определить область пересечения двух множеств интервалов. Сложность в том, что количество интервалов в сравниваемых множествах может быть произвольным. Программист, который умеет только в сравнения "на меньше/больше" (или даже в between), столкнется при реализации с трудностями формализации.
В данной статье мы сфокусируемся на выводе формулы пересечений множеств интервалов. Опираться будем на линейную алгебру и ее объекты - векторы и формы. Кому интересен в первую очередь итоговый результат, - могут сразу двигать в конец, не вникая в промежуточные выкладки.


Complex systems often appear chaotic or incomprehensible, yet closer examination reveals that such complexity can frequently be reduced to a simple underlying mechanism. By systematically removing layers of emergent behavior, one can uncover a fundamental rule or equation from which the entire system originates.


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


Большинство учёных согласны с тем, что взрывы сверхновых повлияли на климат Земли, хотя детали этого не совсем ясны. Скорее всего, они охлаждали климат несколько раз за последние несколько тысяч лет, как раз в то время, когда по всему миру зарождалось человечество. Доказательства видно в телескопы и по кольцам деревьев.
Мы живём в четвертичном периоде, который начался 2,58 миллиона лет назад и длится до наших дней. Четвертичный период характеризуется климатическими и экологическими изменениями, в первую очередь ледниковыми периодами. Четвертичный период также охватывает существование и эволюцию человека от ранних гоминид до нашего вида.

Привет, Хабр!
Это вторая статья из цикла по программированию ESP32 на ESP‑IDF. В первой части мы познакомились с базовой терминологией RTOS и реализовали несколько простых задач (tasks). Сегодня же мы перейдём к работе с GPIO и прерываниями (ISR), а заодно обсудим особенности настройки стека задач в ESP‑IDF (спасибо за совет @0x6b73ca).

"Попросите Якоби или Гаусса публично высказать своё мнение — не о истинности, а о важности этих теорем. Позже, я надеюсь, найдутся люди, которым будет выгодно разобраться во всём этом хаосе."
Этими словами заканчивалось письмо Эвариста Галуа, написанное для своего друга Огюста Шевалье за два дня до его смерти от полученных на дуэли ран на 21 году жизни. Ни Якоби, ни Гаусс в его теоремах не разобрались, зато спустя 15 лет разобрался Жозеф Лиувилль и опубликовал работы Галуа, ставшие впоследствии фундаментом современной алгебры, известные сейчас как теория Галуа. В статье расскажу про одну из частей этой теории - поля Галуа, получившая настолько повсеместное применение в криптографии и избыточном кодировании, что Intel и AMD выпустили набор процессорных расширений для эффективной реализации операций над этими полями.
Заметка! Если вам довелось использовать/реализовывать поля Галуа, то большая часть статьи для вас скорее всего будет не интересна, но возможно в последних разделах будет что-то для вас новое.

В контексте компьютеров, обучение — это всего лишь превращение плохих догадок в более качественные. В этом посте мы увидим, что всё начинается с прямой линии: линейная регрессия даёт первую догадку, а градиентный спуск продолжает её улучшать.
Давайте начнём с чего-то близкого нам: цен на недвижимость. Большие дома стоят больше, маленькие — меньше. Подобный паттерн можно заметить даже без анализа: чем больше места, тем дороже.
Если создать график цен, то его форма будет очевидной: идущая вверх нечёткая кривая с долей шума, но вполне определённым трендом.
Взаимное движение цены и размера как будто предсказуемо. Однако оно не ограничено фиксированными шагами или категориями, их масштаб скользит. Дом может стоить 180 тысяч, 305 тысяч или иметь какую-то промежуточную цену.
Теперь представьте, что вы продаёте свой дом. Его площадь 1850 квадратных футов (~172 квадратных метра) — больше среднего, но явно не особняк. Вы видели, почём продаются дома в вашем районе, но цены колеблются. Какой будет справедливая цена?

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

В прошлой публикации История одного провала я рассказал про свои попытки автоматизировать упрощение символьных выражений. Но практически совсем не коснулся вопроса – зачем мне это потребовалось, так что пришлось много объясняться по этому поводу в комментариях. В этой статье я расскажу про почти успешную часть того проекта – программу, которая должна была писать другие программы. За 10 лет до этого вашего ChatGPT.

Помните, как долго выполняется сложение на бумаге?
¹¹ ¹ 6876 + 3406 ------ 10282
Начиная с единиц, мы складываем 6 + 6 = 12, записываем 2 и переносим 1. Затем пошагово двигаемся влево, пока складываемые разряды не закончатся.
При реализации сложения больших чисел (например, от 264 и выше) обычно пишут код, похожий на этот алгоритм. Любопытно здесь то, что существует простой трюк, позволяющий существенно ускорить этот процесс на современных CPU.
Но сначала я задам вопрос: почему сложение столбиком мы начинаем с самого младшего разряда? Почему бы не начать слева?
Дело, разумеется, в переносе. Мы не можем точно знать, каким будет текущий разряд числа, пока не выполним все сложения справа от этого разряда.

Мало что настолько меня угнетает, как невозможность что‑либо понять так, чтобы потом объяснить это самому себе:) И хоть я уже давно не девятиклассник, этот период запомнился мне внезапным переходом от заучивания материала «чтобы не схватить парашу» к некоторой степени осознания «а как оно там устроено и почему именно так». Сложнее всего было с математикой и я постоянно изобретал для себя «объяснялки». Этот навык, к счастью, прижился и стал привычкой.

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