И снова самый быстрый парсер 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 #парсинг

И снова самый быстрый парсер JSON. Очередной

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

Хабр
🌗 使用 AVX-512 進行 Zigzag 解碼
➤ 透過 AVX-512 遮罩技術提升解碼效能的實作分析
https://zeux.io/2026/06/17/zigzag-decoding-avx512/
本文由 meshoptimizer 的開發者撰寫,深入探討瞭如何利用 AVX-512 指令集優化 Zigzag 解碼演算法。Zigzag 編碼常被用於處理小數值的整數編碼,透過將符號位元移至最低位,能有效地將數值範圍壓縮。作者首先展示了標準的無分支(Branchless)解碼邏輯,隨後透過 AVX-512 強大的遮罩(Masking)功能,成功將指令數從四條精簡至三條,大幅提升了處理效率。
+ 這篇關於 AVX-512 的細節分析非常精彩!雖然只是簡化了一條指令,但在處理海量頂點數據的場景下,這種累積效能是非常可觀的。
+ 之前一直習慣用無分支邏輯處理 Zigzag,沒想到透過 AVX-512 的 `vptestmd` 指令結合遮罩 XOR 操作,能寫出如此簡潔的 SIMD 實作。
#程式設計 #效能優化 #SIMD #AVX-512
Zigzag decoding with AVX-512

I’ve been working on speeding up AVX-512 vertex decoding in meshoptimizer recently; in the process I stumbled upon two optimizations that I did not end up using but I thought they might be fun to write about! The optimizations that actually made it in require some higher level background / explanations that will have to wait until another day :)

Safe SIMD in Rust, even on the inside

Rust’s SIMD abstractions were not as safe as I’d like. Until now.

Medium
Hashing at 130 GB/s with XXH3, Rust and AVX-512 acceleration on AMD Zen 5

I just ran a quick benchmark comparing the different xxHash hashing functions on an AMD Zen 5 EPYC processor (in pure Rust, from https://github.com/rust-stdx/stdx), and Ho My G..., XXH3 is

Sylvain Kerkour

The billion row challenge: do we have a bug?

https://video.infosec.exchange/w/51c81eUAvGdjdL338bcpUZ

The billion row challenge: do we have a bug?

PeerTube

[Перевод] Вы можете победить бинарный поиск

В этой статье речь пойдёт не просто об очередном алгоритме, а о том, как можно обойти классический бинарный поиск. Казалось бы, что может быть эффективнее старого доброго деления массива пополам для нахождения значения в отсортированных данных? Однако можно пойти дальше. В этой статье будет рассказываться о самодельном алгоритме «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/

#эльбрус #e2k #vliw #simd #интринсики #ассемблер #си #оптимизация_кода #fft

Пишу алгоритм FFT на Си для процессора Эльбрус

Примерно полгода назад я познакомился с  VLIW ‑процессором Эльбрус-8СВ. На тот момент у меня уже был опыт написания кода на ассемблере для VLIW‑процессора TMS320C66....

Хабр

Пишу алгоритм FFT на Си для процессора Эльбрус

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

https://habr.com/ru/articles/1045901/

#эльбрус8св #эльбрус #e2k #vliw #simd #интринсики #ассемблер #си #оптимизация_кода #fft

Пишу алгоритм FFT на Си для процессора Эльбрус

Примерно полгода назад я познакомился с  VLIW ‑процессором Эльбрус-8СВ. На тот момент у меня уже был опыт написания кода на ассемблере для VLIW‑процессора TMS320C66....

Хабр
GitHub - piotte13/SIMD-Visualiser: A tool to graphically visualize SIMD code

A tool to graphically visualize SIMD code. Contribute to piotte13/SIMD-Visualiser development by creating an account on GitHub.

GitHub

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.json

While 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.

#Java #JVM #VectorAPI #simd

JEP 165: Compiler Control