Рубрика «simd»

Доверьтесь компилятору: C++23 против трюков из 90-х - 1

Разработчики на C++ с самого начала изучают догмы о производительности: быстрый обратный квадратный корень, XOR‑обмен, Читать полностью »

Дядя Хашимото сказал разобраться, я попытался. Речь про его эссе «Everyone Should Know SIMD»: SIMD должен знать каждый разработчик; примеры там на Zig, но суть от языка не зависит. Мой язык - Go, и в февральском обзоре Go 1.26 я написал про новый SIMD-пакет грустную строчку: «поддержка ARM64 планируется в будущих версиях».

Будущее пришло быстрее, чем я ждал: в go1.27rc2 пакет simdЧитать полностью »

Задача

Даны массивы a и out. Нужно записать в out подряд, без пробелов, только те элементы a, которые удовлетворяют заданному условию. В статье — условие a[i] > threshold, a[i] ∈ (0, 1), threshold ∈ {0, 0.5, 1}.

Почему компилятор сдается

Один if внутри цикла копирования роняет скорость с 112 до 2.6 GB/s. Компилятор не может векторизовать — в NEON нет подходящей для этого инструкции. Статья о том, как собрать ее.

auto copy_if(const float* a, float* out, size_t n) {
    size_t j = 0;
    for (size_t i = 0; i < n; ++i) {
        if (a[i] > 0) out[j++] = a[i];
    }
    return j;
}

В задаче copy_if выходной курсор (в коде - jЧитать полностью »

За свои 17+ лет в активной разработке я встречал много проблем, но одна преследовала меня постоянно: JSON. Нет, с самим форматом все ок, но вот с его чтением — не все норм.

Когда я только начинал работать с PHP, я списывал это на скриптовость языка. Отчасти из‑за этого я даже поменял стек. Но когда приходили по‑настоящему большие файлы, это всегда было больно. Иногда — очень. Был проект, где мы ждали не обработку информации бизнес‑логикой, а банального парсинга. Файлы доходили до десятков гигабайт и не всегда влезали в оперативку. Тогда я и заработал себе персональный todo — разобраться с этим раз и навсегда.

Читать полностью »

Примерно полгода назад я познакомился с VLIW‑процессором Эльбрус-8СВ. На тот момент у меня уже был опыт написания кода на ассемблере для VLIW‑процессора TMS320C66. Поэтому я захотел написать нечто похожее для Эльбруса. А именно, реализовать алгоритм FFT на ассемблере. Но из‑за нехватки документации на инструкции процессора мне пришлось начать с реализации какого‑нибудь простого алгоритма на Си, чтобы изучать его ассемблерный вывод. По результатам той деятельности была написана предыдущая статья.

Читать полностью »

Месяц назад мне в телеграм написал человек и предложил доступ к системе с процессором Эльбрус-8СВ.
И конечно же я согласился. Так как мне интересно.
Не каждый день неизвестные люди предлагают доступ к удалённым хостам.

Меня зовут Леонид Лагунов и я математик-программист.
Я решил написать про своё знакомство с процессором Эльбрус.

Содержание:

Встреча ISO C++ в Софии: С++26 и рефлексия - 1

Привет! На связи Антон Полухин из Техплатформы Городских сервисов Яндекса, и сейчас я расскажу о софийской встрече Международного комитета по стандартизации языка программирования C++, в которой принимал активное участие. Это была последняя встреча, на которой новые фичи языка, с предодобренным на прошлых встречах дизайном, ещё могли попасть в C++26.

И результат превзошёл все ожидания:

  • compile-time-рефлексия
  • рефлексия параметров функций
  • аннотации
  • std::optional<T&‍>
  • параллельные алгоритмы

Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js