🌗 使用 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

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

#isa #simd #riscv