fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

9.9K
active users

#simd

1 post1 participant0 posts today

New blog series: @folkertdev shows how we use SIMD in the zlib-rs project.

SIMD is crucial to good performance, but learning how to use it can be daunting. In this series we'll show concrete examples of using SIMD in a real world project.

Part 1 explains how the compiler already uses SIMD for us, how to evaluate whether it's doing a good job, and how to use a more optimal version when the current CPU supports it.

tweedegolf.nl/en/blog/153/simd

@trifectatech

tweedegolf.nlSIMD in zlib-rs (part 1): Autovectorization and target features - Blog - Tweede golfI'm fascinated by the creative use of SIMD instructions. When you first learn about SIMD, it is clear that doing more multiplications in a single instruction is useful for speeding up matrix multi ...

While implementing complex numbers for #simd I tripped over failures wrt. negative zero. After multiple re-readings of C23 Annex G and considering the meaning of infinite infinities on a 2D plane (with zeros simply being their inverse) I believe #C and #CPlusPlus should ignore the sign of zeros and infinities in their x+iy representations of complex numbers. compiler-explorer.com/z/YavE4M provides some motivation.
Am I missing something?

compiler-explorer.comCompiler Explorer - C++ int main() { using C = std::complex<double>; std::cout << C() * -C() << '\n'; std::cout << 0. * -C() << '\n'; }

Более быстрые хеш-таблицы: претенденты на место SwissTable

24 ноября 2021 года на сайте ArXiv.org была опубликована научная статья «Крошечные указатели» ( Tiny Pointers ) с описанием новой структуры данных — «крошечных» указателей, которые указывают путь к фрагменту хранимых данных и занимают меньше памяти, чем традиционные указатели. Осенью 2021 года эту статью заметил Андрей Крапивин (Andrew Krapivin), студент Ратгерского университета в Нью-Джерси, и не придал ей особого значения, пишет Quanta Magazine, журнал о последних достижениях в математике ( перевод статьи на Хабре). Только через два года он нашёл время, чтобы внимательно ознакомиться с материалом. И понял, насколько это прорывное изобретение, если применить его для оптимизации хеш-таблиц. Данная тема уже упоминалась на Хабре , но заслуживает более подробного обсуждения.

habr.com/ru/companies/ruvds/ar

ХабрБолее быстрые хеш-таблицы: претенденты на место SwissTable24 ноября 2021 года на сайте ArXiv.org была опубликована научная статья «Крошечные указатели» ( Tiny Pointers ) с описанием новой структуры данных — «крошечных» указателей, которые указывают путь к...

Разгон Мандельброта: SIMD с бубнами, OpenMP и CUDA

Построение множества Мандельброта — классический пример чрезвычайно параллельной задачи ( embarrassingly parallel problem). На первом курсе я впервые столкнулся с такой проблемой: тогда мы изучали SIMD-инструкции в курсе архитектур вычислительных систем. Эта тема сразу меня увлекла, и я захотел углубиться в дальнейшие оптимизации, но в течение семестра мне не хватало ни времени, ни знаний. Спустя год я решил восполнить этот пробел. Вначале мы разберем наивную реализацию, поиграемся с интринсиками (intrinsics) и, не теряя переносимости, заставим компилятор генерировать нам SIMD-инструкции. Далее добавим многопоточность и в заключение обесценим все наши старания несколькими строчками на CUDA. Возможно, эта статья поможет таким же, как я, впервые столкнувшимся с подобными задачами.

habr.com/ru/articles/893336/

#Мандельброт #оптимизация #cuda #openmp #simd #c++

ХабрРазгон Мандельброта: SIMD с бубнами, OpenMP и CUDAПостроение множества Мандельброта — классический пример чрезвычайно параллельной задачи ( embarrassingly parallel problem). Вначале мы разберем наивную реализацию, поиграемся с интринсиками...

Векторизация в RISC-V. Основы

Многие современные вычислительные задачи, в частности повсеместная обработка изображений и звука или работа с матрицами для ИИ, хорошо поддаются параллелизации на уровне данных. Чтобы ускорить такие вычисления, производители процессоров добавили в архитектуры специальные SIMD инструкции, которые позволяют работать за одну инструкцию сразу с несколькими элементами. В процессорах архитектуры x86 SIMD инструкции добавляются по принципу ad hoc. Из-за такого подхода, легаси и требований обратной совместимости в x86 накопилось много проблем. Архитектура RISC-V относительно молодая, и при её разработке учтён прошлый опыт. В основе подхода к SIMD в RISC-V заложили идею чистого векторного процессора. В этой статье рассмотрим основные принципы работы векторного процессора и базовые векторные операции с памятью и арифметикой.

habr.com/ru/articles/891356/

ХабрВекторизация в RISC-V. ОсновыМногие современные вычислительные задачи, в частности повсеместная обработка изображений и звука или работа с матрицами для ИИ, хорошо поддаются параллелизации на уровне данных. Входные данные таких...

Forget the AI hype - FFT is the real unsung hero of computing...

The Fast Fourier Transform (FFT) is everywhere: multiplying large numbers, audio and video compression, high-frequency trading, weather prediction - you name it. It’s also the foundation of other key transforms: DCT for image compression, MDCT for audio compression, MFCC for machine learning, and more.

FFT is the most underrated algorithm of the 20th and 21st century — change my mind.

The first time I saw the Fourier Matrix and finally understood the Cooley-Tukey FFT, I was hooked. There’s something beautiful and elegant about its tree-like structure. Someday, I will probably write about what happens when you unravel FFT's recursion, and how it is related to the `rbit` instruction on ARM CPU. And sometimes, I just sit at my computer, and code away to make FFT run faster. It's relaxing...

Here’s one of my little achievement: A 4-point complex-to-complex FFT in just **11** AVX2 instructions. By itself, a 4-point FFT isn’t much, but as a kernel, it helps build higher-order FFTs with blazing efficiency.

Full demo implementation is on GitHub, which computes 256 point FFT under 1 micro-second on 12th gen Intel Processors.

gist.github.com/ashafq/eef8ef3

Why in the world does VADDPD (floating-point addition) have a worse throughput than VFMADD132PD (floating-point multiplication and addition) on 2014 Intel Haswell chips
I might genuinely start performing a fused multiply by 1.0 in order to speed my code up

Ah, the classic tale of a coder thinking #SIMD would make their code fly 🚀, only to discover it trips over its own feet 👟. Our hero's memory seems as patchy as their #benchmarks, but fear not, the valuable lesson here is clear: #optimization is just a synonym for #headache. 🤦‍♂️
genna.win/blog/convolution-sim #coding #woes #lessons #HackerNews #ngated

genna.winPerformance optimization, and how to do it wrong | Just wing itOptimization is hard. And sometimes, the compiler makes it even harder.

Открытие Эндрю Крапивина о хеш-таблицах и микро-указателях?
Чисто гипотетически, может и актуально, но лишь в чистой и голой computer science теории.
На практике же полно нюансов реализации, сводящихся к оптимизациям конкретных аппаратных платформ.

Например, есть #SwissTable известные с 2018 года, недавно #Golang перешёл на них (с версии 1.24). И до него на SwissTable перейти успел #Rust.

Хеш-таблицы Google SwissTable и Facebook F14 примерно одинаковые, одно лишь вариант другого.

Идея оптимизации работы вокруг использования #SIMD инструкций для поиска занятых ячеек и проверки ключа. И в тотально подавляющем большинстве случаев хватает одной проверки блока из восьми элементов.

Надо ещё много раз поиграться с вариантами реализации какой-либо идеи из чистого computer science. Посмотрев как оно ложится на аппаратную платформу сродни x86-64.

  1. Есть prefetching памяти и работа с ОЗУ идёт через загрузку целиком всей cache line в ЦПУ, даже при обращении на чтение лишь к одному значению в пару байт.

  2. Предыдущий пункт не только про cache misses, но и «локальность данных». Как повышающую производительность, так и приводящих к false sharing при многопоточном использовании структуры данных.  

  3. Необходимо учитывать и размер страницы виртуальной памяти, чтобы снизить «давление» на TLB и уйти от TLB miss.

Для пример, в нагруженных системах используется донастройка системы на huge pages, например, все кто используют модный #DPDK сам по себе или с каким-нибудь #Seastar:

  • Выбравшие не оригинальную #Kafka, а её более производительный аналог #RedPanda.
  • Использующие вместо Apache #Cassandra более производительную #ScyllaDB

Голая теория computer science это хорошо и замечательно, но практика омерзительна свой приземлённостью. Прямой проход перебором по небольшому массиву оказывается быстрее, чем использование binary search tree. И совершенно не важно какого именно красно-чёрного или же АВЛ.

Это не вопрос ретроградства и вызова 40-летней теории :)

#software #SoftwareDevelop #программирование #разработка #programming @russian_mastodon @ru @Russia

idealists.suAkkoma

О новых алгоритмах хеш-таблиц

Хотелось бы прокомментировать публикацию Ильи Кабанова в Медузе по поводу новых разработок в алгоритмах хеширования: " Optimal Bounds for Open Addressing Without Reordering " (Farach-Colton, Krapivin, and Kuszmaul, 2025) и последующую " The Bathroom Model: A Realistic Approach to Hash Table Algorithm Optimization " (Wang, 2025). И особенно кликбейтное: "в перспективе метод Крапивина и его коллег может ускорить многие процессы в интернете." Я около 7 лет очень плотно занимался темой хеш-таблиц и написал много их вариантов: Koloboke , SmoothieMap , memory-mapped вариации . Я потерял к теме интерес с выходом гугловской SwissTable (2018), и ее фейсбучного варианта F14 , которые основаны на SIMD. Они проверяют загруженность ячеек и совпадения "тега" элемента сразу блоками по 8 соседних слотов. Поэтому на любых разумных загрузках таблиц (до 90%) - "цепочка проверки" очень редко превышает 1 (то есть, одну проверку 8-элементного блока). В этих SIMD-based алгоритмах, ухищрения и теоретические по поводу "алгоритма шагания" просто не играют никакой роли -- алгоритм шагания можно сказать отсутствует, потому что если можно вставить элемент внутри 8-элементного блока, то это и стоит сделать. Именно эти разработки, а не Крут и не статья Yao, которую "опровергли" новые работы, стали "практическим концом теории" хеш-таблиц, на мой взгляд. SwissTable стали стандартным алгоритмом хеш-таблиц в Расте, и, буквально в этом месяце, в Golang 1.24 . В заключение, отвечая Илье Кабанову: к "ускорению интернета" эти теоретические алгоритмы не приведут :)

habr.com/ru/articles/887024/

ХабрО новых алгоритмах хеш-таблицХотелось бы прокомментировать публикацию Ильи Кабанова в Медузе по поводу новых разработок в алгоритмах хеширования: " Optimal Bounds for Open Addressing Without Reordering " (Farach-Colton, Krapivin,...

C++26 — встреча ISO в Хагенберге

В середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++. В этот раз прорабатывались следующие большие темы: std::hive Constexpr, ещё больше constexpr Безопасность, контракты, hardening, профили, UB и std::launder Relocate #embed Об этом и других новинках расскажу в посте

habr.com/ru/companies/yandex/a

#c++29 #с++29 #c++26 #с++26 #с++ #c++ #reflection #constexpr #exception #simd #safety #security #undefined_behavior #memory #byte #bit #contracts #relocation #hive #object_pool #embed

ХабрC++26 — встреча ISO в ХагенбергеВ середине февраля в Хагенберге состоялась встреча международного комитета по стандартизации языка программирования C++. В этот раз прорабатывались следующие большие темы: std::hive Constexpr, ещё...

This is one for the #riscv folks - get it while it's hot. (And if you want to write a few optimizers: what about making the plain C versions of these numeric kernels be faster than VOLK's bespoke assembler/SIMD intrinsics version ;) ?)
chaos.social/@bluescreen/11396
#compilers #simd

chaos.socialJohannes (@bluescreen@chaos.social)VOLK Release v3.2 with lots of RiscV support is out :fairydust: https://www.libvolk.org/release-v320.html