#simd — Public Fediverse posts
Live and recent posts from across the Fediverse tagged #simd, aggregated by home.social.
-
borg 2.0.0b23-pre benchmarks from some essential components of borg:
https://github.com/borgbackup/borg/discussions/10056
#borgbackup #blake3 #hashing #chunking #zstd #compression #algorithms #simd
-
borg 2.0.0b23-pre benchmarks from some essential components of borg:
https://github.com/borgbackup/borg/discussions/10056
#borgbackup #blake3 #hashing #chunking #zstd #compression #algorithms #simd
-
Making Postgres 300x faster for analytics: batching, operator fusion, and SIMD
https://malisper.me/how-we-made-postgres-hundreds-of-times-faster-the-query-engine/
Comments: https://news.ycombinator.com/item?id=49208535
#HackerNews #Postgres #Performance #Analytics #Batching #SIMD #OperatorFusion
-
Making Postgres 300x faster for analytics: batching, operator fusion, and SIMD
https://malisper.me/how-we-made-postgres-hundreds-of-times-faster-the-query-engine/
Comments: https://news.ycombinator.com/item?id=49208535
#HackerNews #Postgres #Performance #Analytics #Batching #SIMD #OperatorFusion
-
SiFive P870 RVV benchmark:
https://camel-cdr.github.io/rvv-bench-results/sifive_p870/index.html
-
SiFive P870 RVV benchmark:
https://camel-cdr.github.io/rvv-bench-results/sifive_p870/index.html
-
Попробуйте найти примеры кода для SME — я подожду
В этой части мы проверим, есть ли у SME учебная дорога, сравнимая с той, которую получили тензорные ядра GPU; затем разберём два реально полезных источника: Arm Learning Path и KleidiAI; после этого отделим то, чему они действительно учат, от того, где они останавливаются. К концу главы станет видно, какая именно «середина лестницы» отсутствует и почему следующая часть неизбежно приводит к BLIS.
https://habr.com/ru/articles/1066766/
#SME2 #ARM #матричное_умножение #микроядро #векторизация #SIMD #SVE #оптимизация #тензорные_ядра #машинное_обучение
-
Четыре f64 за одну инструкцию не делают вас быстрыми: как я векторизовал торговый движок на Rust и словил CI на лжи
Я добавил в Quince AVX2, FMA и немного unsafe. По всем красивым схемам торговая VM после этого должна была полететь. Она не полетела… Сначала SIMD проиграл памяти. Потом кольцевым буферам. Затем выяснилось, что сама VM съедает часть ускорения. А в конце оказалось, что CI уверенно показывал результаты кода, который процессор вообще не исполнял. Туториал на моих ошибках о том, как правильно внедрять SIMD без веры в чудесные х4.
https://habr.com/ru/articles/1064622/
#rust #hft #hftтрейдинг #криптовалюта #трейдинг #оптимизация #simd #виртуальная_машина #языки_программирования #open_source
-
a[mask] = f(a[mask]) на NEON. compress вместо blend
Блендинг считает функцию для всех элементов и сохраняет только нужные. Для дешевых функций это оптимально, но на pow проигрывает в несколько раз. Можно сжать подходящие элементы, посчитать только их и разжать обратно. Разбираемся, где граница, и делаем адаптивный алгоритм.
https://habr.com/ru/articles/1063732/
#arm_neon #simd #apple_silicon #c++ #интринсики #оптимизация #aarch64
-
[Перевод] Доверьтесь компилятору: C++23 против трюков из 90-х
Как часто вы слышали: «Не доверяй компилятору, пиши вручную»? Похоже, эту идеологию пора сдавать в архив. Автор специально собрал примеры, в которых «умный» код современного C++ либо проигрывает наивному, либо не даёт выигрыша, но при этом ухудшает читаемость и мешает оптимизатору. Тут и легендарный Q_rsqrt , и бит-хаки для подсчёта единичек, и вездесущие const& , и даже опасные фокусы с фильтрацией диапазонов. Всё с воспроизводимыми бенчмарками на Clang 21 и Ryzen 9. Если вы готовы пересмотреть багаж старых привычек – просим под кат.
https://habr.com/ru/companies/timeweb/articles/1061248/
#C++ #C++20 #C++23 #LLVM #GCC #SIMD #SSE #ARM #timeweb_статьи_перевод
-
From FUZxxl:
> SIMD programming challenge: take a vector v and a mask m segmenting it into k segments. Given a (variable) permutation π with k entries, shuffle the segments of v into the order given by π (segment-wise shuffle). How would you approach this problem?
My approach is to run-length-encode the offset of the start of each segment, apply the permutation, decode the RLE-offsets and finally fixup the offsets for the second to last element of each segment. This gives you the shuffle you can apply to the input.
Here is the RVV implementation: https://github.com/camel-cdr/rvv-playground/blob/main/segment-vrgather.c (https://godbolt.org/z/dMhxz84hz)
I've attached an image of an execution log to help visualize this.
-
From FUZxxl:
> SIMD programming challenge: take a vector v and a mask m segmenting it into k segments. Given a (variable) permutation π with k entries, shuffle the segments of v into the order given by π (segment-wise shuffle). How would you approach this problem?
My approach is to run-length-encode the offset of the start of each segment, apply the permutation, decode the RLE-offsets and finally fixup the offsets for the second to last element of each segment. This gives you the shuffle you can apply to the input.
Here is the RVV implementation: https://github.com/camel-cdr/rvv-playground/blob/main/segment-vrgather.c (https://godbolt.org/z/dMhxz84hz)
I've attached an image of an execution log to help visualize this.
-
🚀 Oh, look! Another riveting dissertation on #SIMD collision detection—because who wouldn't want to spend their weekend pondering graph coloring in Box3D? 🙄 Wide SIMD vs. narrow SIMD: because apparently, some collisions are just too complex for mere mortals to understand without the aid of a PhD in advanced intrinsics. 🤓
https://box2d.org/posts/2026/07/simd-for-collision/ #CollisionDetection #GraphColoring #AdvancedIntrinsics #PhDResearch #TechHumor #HackerNews #ngated -
🚀 Oh, look! Another riveting dissertation on #SIMD collision detection—because who wouldn't want to spend their weekend pondering graph coloring in Box3D? 🙄 Wide SIMD vs. narrow SIMD: because apparently, some collisions are just too complex for mere mortals to understand without the aid of a PhD in advanced intrinsics. 🤓
https://box2d.org/posts/2026/07/simd-for-collision/ #CollisionDetection #GraphColoring #AdvancedIntrinsics #PhDResearch #TechHumor #HackerNews #ngated -
🚀🎉 Oh, look! It's another episode of "You Absolutely Need To Know This Obscure Tech Acronym Or You're Not A Real Developer." Mitchell Hashimoto insists that #SIMD is as easy as a for loop, because clearly adding a sprinkle of parallel processing magic is just what your Hello World app needed. 🙃💻
https://mitchellh.com/writing/everyone-should-know-simd #YouAbsolutelyNeedToKnow #ParallelProcessing #DeveloperTech #HelloWorld #HackerNews #ngated -
🚀🎉 Oh, look! It's another episode of "You Absolutely Need To Know This Obscure Tech Acronym Or You're Not A Real Developer." Mitchell Hashimoto insists that #SIMD is as easy as a for loop, because clearly adding a sprinkle of parallel processing magic is just what your Hello World app needed. 🙃💻
https://mitchellh.com/writing/everyone-should-know-simd #YouAbsolutelyNeedToKnow #ParallelProcessing #DeveloperTech #HelloWorld #HackerNews #ngated -
Бенчмаркая Sum: ускорил циклом — замедлил в ×4,7
Уважаемые читатели, в этой статье я хочу рассказать о том, что происходит внутри values.Sum() в современном .NET — там нашлись векторные инструкции, контроль переполнения и список процессоров, которым рантайм намеренно ограничивает ширину вектора, — и представить свои выводы. В прошлых статьях серии самописные циклы уже проигрывали BCL в поиске по строке , JIT сам выкидывал проверки границ , а foreach прятал аллокации . Тут случай интереснее: values.Sum() — это LINQ, который при оптимизации первым делом меняют на цикл.
https://habr.com/ru/articles/1060470/
#benchmarkdotnet #linq #sum #simd #avx512 #векторизация #производительность #jit #ryujit #overflowexception
-
Modern #CPUs support #SIMD, but many #Java apps don’t fully use it. @BalaRawool shows how the #Vector #API enables explicit SIMD beyond limited auto-vectorization on the #JVM, with portable fallback.
See how to write loops that actually vectorize:: https://javapro.io/2026/04/09/java-vector-api-faster-vector-computations-for-the-jvm/
-
Modern #CPUs support #SIMD, but many #Java apps don’t fully use it. @BalaRawool shows how the #Vector #API enables explicit SIMD beyond limited auto-vectorization on the #JVM, with portable fallback.
See how to write loops that actually vectorize:: https://javapro.io/2026/04/09/java-vector-api-faster-vector-computations-for-the-jvm/
-
Бенчмаркая поиск по строке: самописные циклы проигрывают от ×14 до ×154
Уважаемые читатели, в этой статье я хочу рассказать про поиск по строке и представить свои выводы. Началось с оптимизации: сравнил поиск символа циклом со string.IndexOf — и получил разницу в разы. Заодно выяснилось, что серверный Xeon с AVX-512 в этой задаче медленнее игрового десктопа с AVX2. Ниже разбор обоих фактов с дизасмом и замерами. Будет четыре истории, и в каждой — вопрос, на который я искал ответ:
https://habr.com/ru/articles/1059624/
#simd #avx2 #avx512 #benchmarkdotnet #indexof #searchvalues #ryujit #дизасм #производительность #бенчмарк
-
Also, I wonder how this stuff smashes into the automagic #SIMD-ification that modern compilers do. I'm not sure that those expose carry flags. I suppose I need to fling a test case at #CompilerExplorer. Also, I wish it was called #CompilerExploder. 5/4
-
Also, I wonder how this stuff smashes into the automagic #SIMD-ification that modern compilers do. I'm not sure that those expose carry flags. I suppose I need to fling a test case at #CompilerExplorer. Also, I wish it was called #CompilerExploder. 5/4
-
Stream compaction на NEON. Векторизуем copy_if
Как разогнать copy_if на NEON в 30+ раз без единой ветки в горячем цикле — эмулируем compress инструкцию, которой в NEON нет, через table lookup и немного битовой магии.
-
Быстрые и компактные структуры данных для RMQ
Range minimum query – это классическая задача, в этой заметке решаем статический вариант. Есть массив ; нужно построить структуру данных, которая умеет быстро находить минимум и его позицию на произвольном интервале . Я собрал несколько практических наработок и сделал из них два очень компактных и быстрых варианта: вариант с дополнительных бит, которому иногда нужно обращаться к исходному массиву; вариант с дополнительных бит, который отвечает на запросы без доступа к исходному массиву. Обе реализации очень быстры на практике: на случайных запросах по массиву размера элементов они работают в среднем за 20–30 нс на запрос. Для ориентира: туториал Codeforces по блочному RMQ описывает структуру, которая отрабатывает запрос за 100 нс для массивов длины с 32-битными целыми числами, при этом используя дополнительных бит.
-
И снова самый быстрый парсер JSON. Очередной
За свои 17+ лет в активной разработке я встречал много проблем, но одна преследовала меня постоянно: JSON. Нет, с самим форматом все ок, но вот с его чтением — не все норм. Когда я только начинал работать с PHP, я списывал это на скриптовость языка. Отчасти из‑за этого я даже поменял стек. Но когда приходили по‑настоящему большие файлы, это всегда было больно. Иногда — очень. Был проект, где мы ждали не обработку информации бизнес‑логикой, а банального парсинга. Файлы доходили до десятков гигабайт и не всегда влезали в оперативку. Тогда я и заработал себе персональный todo — разобраться с этим раз и навсегда. Сейчас, находясь в поиске новых возможностей, я решил вспомнить эту старую боль. Я уже давно не PHP‑разработчик, но проблема в индустрии всё та же. Объемы данных растут, требования тоже, а воз и ныне там. Нет, есть море крутых решений. Даже тут, на Хабре. Но для меня всё не то. Мне нужно решение, а не костыль. То есть: никакой кодогенерации и никаких JIT (я не противник JIT, просто не хочу тянуть эту сложность). Я ступил на тонкий лед: в Go есть классная штука — пакет unsafe . Почему классная? Потому что она позволяет обойти тяжелые ненужные проверки. Плюс побитовые операции для ускорения всего, до чего только смогли дотянуться руки. Пока изучал чужие парсеры, столкнулся с обманом в репозиториях, подкручиванием статистики (куда же без него?) и перекладыванием ответственности (и аллокаций) на сторону разработчиков. Заглянуть под капот
https://habr.com/ru/articles/1053528/
#go #golang #json #zeroallocation #zerocopy #simd #avx2 #highload #unsafe #парсинг
-
Hashing at 130 GB/s? Easy with XXH3, Rust and AVX-512!
Source code: https://github.com/rust-stdx/stdx/tree/main/xxhash
-
Hashing at 130 GB/s? Easy with XXH3, Rust and AVX-512!
Source code: https://github.com/rust-stdx/stdx/tree/main/xxhash
-
The billion row challenge: do we have a bug?
-
The billion row challenge: do we have a bug?
-
[Перевод] Вы можете победить бинарный поиск
В этой статье речь пойдёт не просто об очередном алгоритме, а о том, как можно обойти классический бинарный поиск. Казалось бы, что может быть эффективнее старого доброго деления массива пополам для нахождения значения в отсортированных данных? Однако можно пойти дальше. В этой статье будет рассказываться о самодельном алгоритме «SIMD Quad» - квадратичном поиске. Идея возникла из необходимости быстро искать 16-битные целые числа в массивах размером до 4096 элементов — именно такие структуры лежат в основе популярного формата Roaring Bitmap. Вместо того чтобы на каждом шаге сравнивать искомый элемент только с одной серединой интервала, авторский алгоритм использует две ключевые аппаратные особенности современных процессоров. Во-первых, это SIMD-инструкции, позволяющие за раз сравнить до 16 элементов. Во-вторых, это распараллеливание работы с памятью, которое даёт возможность безболезненно делить массив не на две, а сразу на четыре части. Так родился гибрид, который сначала выполняет учетверённый поиск по блокам, а затем находит нужный элемент с помощью векторных инструкций. Давайте разберёмся, как это работает и почему такой подход действительно позволяет превзойти бинарный поиск.
https://habr.com/ru/companies/timeweb/articles/1036538/
#c #c++ #simd #quad #бинарный_поиск #intel #llvm #gcc #apple #timeweb_статьи_перевод
-
Пишу алгоритм FFT на Си для процессора Эльбрус
Примерно полгода назад я познакомился с VLIW ‑процессором Эльбрус-8СВ. На тот момент у меня уже был опыт написания кода на ассемблере для VLIW‑процессора TMS320C66. Поэтому я захотел написать нечто похожее для Эльбруса. А именно, реализовать алгоритм FFT на ассемблере. Но из‑за нехватки документации на инструкции процессора мне пришлось начать с реализации какого‑нибудь простого алгоритма на Си, чтобы изучать его ассемблерный вывод. По результатам той деятельности была написана предыдущая статья . После написания той статьи я решил попробовать реализовать алгоритм FFT на Си для Эльбруса. Работа ещё не завершена, но определённые успехи уже есть (сравнение с EML присутствует). В этой статье я хочу поделиться полученными на данный момент результатами.
https://habr.com/ru/articles/1045901/
#эльбрус8св #эльбрус #e2k #vliw #simd #интринсики #ассемблер #си #оптимизация_кода #fft
-
One Open-source Project Daily
A tool to graphically visualize SIMD code
https://github.com/piotte13/SIMD-Visualiser
#1ospd #opensource #compilers #intrinsics #simd #vectorizedcomputation #visualisation -
TIL: JEP 165 (Compiler Control) https://openjdk.org/jeps/165 lets you tune the JIT per method — disable vectorization, control inlining, print assembly, disable specific intrinsics, and more.
Example:
```json
[
{
"match": "com/example/MyClass.myMethod(I)V",
"c2": {
"Vectorize": false
}
}
]
```
Start with -XX:CompileCommandFile=directives.jsonWhile writing a new book on SIMD and the Java Vector API I always wondered how to isolate auto-vectorization at the method level. Turns out there's a whole toolbox here.
-
I feel like overlapping FP and integer register file and ports may be better than overlapping FP with SIMD.
Because you kind of want scalar FP to be higher issue and lower latency that you need for SIMD float operations.
If you have 128-bit SIMD the goals are mostly aligned, but for >=256-bit sharing FP with SIMD becomes less attractive in my mind.This also isn't all that relevant if your integer execution isn't something like 6 wide or wider.
It also gives you have more control over FP32 and FP64. Maybe you put FP32 on all ALUs, but FP64 only on the ones that also support IMUL (if you can share that logic).
-
New blog post "Introduction to std::simd in C++26 (Part 1)": https://mattkretz.github.io/2026/05/21/intro-to-std-simd-part-1.html
-
HotSpot auto-vectorization can speed up #Java loops—but often doesn’t apply in real-world code. @BalaRawool explains how the #Vector API enables explicit #SIMD with predictable gains.
Learn how to turn scalar loops into portable SIMD code: https://javapro.io/2026/04/09/java-vector-api-faster-vector-computations-for-the-jvm/
-
Tenstorrent submitted the full rvv-bench results for Ascalon-X and Ascalon-S:
https://camel-cdr.github.io/rvv-bench-results/tt_asc_x/index.html
https://camel-cdr.github.io/rvv-bench-results/tt_asc_s/index.html
-
Two more results. This time without using std::simd. One uses a plain loop over C[i, j] += A[i, k] * B[k, j] (in the inner kernel—it is still blocked over all levels of the cache hierarchy).
This is ~10–30x slower.
1/2
-
I've been looking into matrix multiplication using std::simd and std::mdspan/submdspan (all single-threaded).
I got to 86% of peak FLOP. x86_64 AVX2 has 32/16 FLOP/cycle peak (2 FMAs per cycle).
I suspect better performance needs a more cache-friendly layout mapping. This is using layout_right. -
Inspired by @jonhoo's `brrr` I wrote #SIMD splitting iterator which seem to work. Now, I'm not sure if I should be proud of myself, or sad I reinvented the wheel...
For those interested: it has limitation to byte slices, but it's correct for #unaligned data (subject to future optimisations); uses nightly.
Now it needs #benchmarks
-
The fastest way to match characters on ARM processors?, https://lemire.me/blog/2026/04/19/the-fastest-way-to-match-characters-on-arm-processors/.
In this article, Lemir talks about two SIMD ARM SVE/SVE2 instructions: `match` and `nmatch`, which fit nicely in the _vectorized classification_ step of `simdjson`. These instructions improve the performance of `simdjson` from 11.4Gb/s to 14.4Gb/s.
-
Modern #CPUs support #SIMD, but many #Java apps don’t fully use it. @BalaRawool shows how the #Vector #API enables explicit SIMD beyond limited auto-vectorization on the #JVM, with portable fallback.
See how to write loops that actually vectorize:: https://javapro.io/2026/04/09/java-vector-api-faster-vector-computations-for-the-jvm/
-
HotSpot auto-vectorization can speed up #Java loops—but often doesn’t apply in real-world code. @BalaRawool explains how the #Vector API enables explicit #SIMD with predictable gains.
Learn how to turn scalar loops into portable SIMD code: https://javapro.io/2026/04/09/java-vector-api-faster-vector-computations-for-the-jvm/