Daniel Lemire’s blog

Связи науки и технологий (7 августа 2022 г.)

Повышение производительности вычислений объясняет до 94% улучшений производительности в таких областях, как предсказание погоды, сворачивание белков и разведка нефти : информационные технологии являются движущей силой долгосрочного повышения производительности во всем обществе. Если мы перестанем улучшать наши вычисления, последствия могут быть ужасными. Коралловый покров Большого Барьерного рифа достиг самого высокого уровня с тех пор, как Австралийский …

Связи науки и технологий (7 августа 2022 г.) Read More »

Сравнение strtod с from_chars (GCC 12)

Читатель (Ричард Эбелинг) предложил мне пересмотреть старую запись в блоге: Разбор чисел с плавающей запятой в C++: бенчмаркинг strtod и from_chars . Тогда я сообщил, что переход с strtod на from_chars в C++ для разбора чисел может привести к увеличению скорости (на 20%). Код почти такой же, мы идем от… символ * строка = » …

Сравнение strtod с from_chars (GCC 12) Read More »

Округление вектора направления до 8-стороннего компаса

Современные игровые контроллеры могут указывать в самых разных направлениях. Разработчики игр иногда хотят преобразовать направление джойстика, чтобы получить движение в 8 направлениях . Типичное предлагаемое решение состоит в том, чтобы вычислить угол, округлить его и затем вычислить вектор направления. двойной угол = atan2 ( y , x ) ; угол = ( int ( округление …

Округление вектора направления до 8-стороннего компаса Read More »

Связи науки и техники (23 июля 2022 г.)

По сравнению с 1800 годом мы едим меньше насыщенных жиров и гораздо больше переработанных продуктов и растительных масел , и это не кажется нам полезным: Насыщенные жиры из животных источников снизились, а полиненасыщенные жиры из растительных масел выросли. Неинфекционные заболевания (НИЗ) росли в двадцатом веке параллельно с увеличением потребления обработанных пищевых продуктов, включая сахар, рафинированную …

Связи науки и техники (23 июля 2022 г.) Read More »

Как быстро вы можете преобразовать float в double (и обратно)?

Многие языки программирования имеют два двоичных типа с плавающей запятой: float (32-разрядный) и double (64-разрядный). Это отражает тот факт, что большинство процессоров общего назначения изначально поддерживают оба типа данных. Часто нам нужно конвертировать между двумя типами. И процессоры ARM, и x64 могут выполняться в одной недорогой инструкции. Например, системы ARM могут использовать команду fcvt . …

Как быстро вы можете преобразовать float в double (и обратно)? Read More »

Более быстрая фильтрация чисел с помощью SVE на процессорах Amazon Graviton 3

Процессоры, грубо говоря, делятся на два больших семейства: процессоры x64 от Intel и AMD и процессоры ARM от Apple, Samsung и многих других поставщиков. В течение долгого времени процессоры ARM занимали в основном рынок встроенных процессоров (компьютер, на котором работает ваш домашний холодильник), а «большие процессоры» почти исключительно принадлежали процессорам x64. Как сообщается, генеральный директор …

Более быстрая фильтрация чисел с помощью SVE на процессорах Amazon Graviton 3 Read More »

Дженерики Go не плохи

При программировании нам часто приходится писать «общие» функции, где точный тип данных не важен. Например, вы можете написать простую функцию, которая суммирует числа. До недавнего времени в Go не было этого понятия, но недавно оно было добавлено (начиная с версии 1.18). Так что я взял его на спину. В Java дженерики работают достаточно хорошо, пока …

Дженерики Go не плохи Read More »

Глядя на ассемблерный код с помощью gdb

Большинство из нас пишет код, используя языки более высокого уровня (Go, C++), но если вы хотите понять код, который имеет значение для вашего процессора, вам нужно взглянуть на «ассемблерную» версию вашего кода. Сборка — это всего лишь набор инструкций. Поначалу ассемблерный код выглядит устрашающе, и я не рекомендую вам писать объемные программы на ассемблере. Однако …

Глядя на ассемблерный код с помощью gdb Read More »

Параллелизм на уровне памяти: Intel Ice Lake против Amazon Graviton 3

Одной из самых затратных операций в системе процессора и памяти является произвольный доступ к памяти. Если вы попытаетесь прочитать значение в памяти, это может занять в среднем десятки наносекунд или больше. Если вы ждете содержимого памяти для дальнейших действий, ваш процессор фактически остановлен. Хотя наши процессоры, как правило, быстрее, задержка памяти быстро не улучшается, а …

Параллелизм на уровне памяти: Intel Ice Lake против Amazon Graviton 3 Read More »

Размер структуры данных и доступ к строке кэша

Во многих системах доступ к памяти осуществляется в фиксированных блоках, называемых «строками кэша». В системах Intel длина строки кэша составляет 64 байта. То есть, если вы обращаетесь к памяти по адресу байта 64, 65… до 127… все это находится в одной строке кэша. Следующая строка кэша начинается с адреса 128 и так далее. В свою …

Размер структуры данных и доступ к строке кэша Read More »