Шпаргалка по SIMD-инструкциям, теперь и для .NET Core

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Ни для кого не секрет, что в дотнет завезли интринсики. Я писал об этом и до того, как они появились и после. Плюс ещё посты на Хабре, например этот. И всё, казалось бы, замечательно, если бы не одно «но»: называются эти интринсики по-дотнетовски, а совсем не так как в ассемблере или C++.

Из-за этого трудно воспользоваться уже готовым векторизованным кодом, просто портировав его с плюсов. Так же тяжело будет и с адаптацией найденных на stackoverflow ответов и примеров )) Ведь для каждого вызова надо найти новое дотнетное название. А сделать это не так легко — если в MSDN искать называние плюсового интринсика, то найдутся только плюсовые статьи, и, может быть, где-то в самом конце то, что нам нужно.

Когда мне приходилось писать SIMD-код на плюсах, я пользовался очень хорошим ресурсом — officedaytime, где кратко и наглядно представлены все основные инструкции для x86-платформы. Я решил, что неплохо было бы заполучить такую шпаргалку и для дотнета.



Итак, не буду лить много воды, вот эта страница, адаптированная под netcore.

Как это было сгенерировано


Очевидно, я не сидел и упорно правил эту таблицу руками. К счастью в подсказке для многих (но не всех) методов .NET Core написан соответствующий интринсик, как он называется в плюсах. А ещё удобно, что все эти подсказки сгенерированы в XML-Doc в файле, который лежит рядом со сборкой: System.Runtime.Intrinsics.xml.

Для работы с HTML я взял старый добрый HtmlAgilityPack, который не только до сих пор отлично работает, но и активно поддерживается.

Немного неудобств доставили интринсики создания векторов, а так же обнуления. Для них пришлось добавить отдельные константы в коде генератора.

И ещё инструкции сдвига _mm_slli_si128 и _mm_srli_si128 почему-то в дотнете названы по другому, пришлось пропатчить и их.

Код генератора доступен здесь https://gist.github.com/.....82fadb1

Спасибо за внимание!

Если найдёте ошибки или неточности, пожалуйста сообщите.
Источник: https://habr.com/ru/post/507074/


Интересные статьи

Интересные статьи

На случай, когда получаешь что-то давно обещанное и/или ожидаемое, есть поговорка «И полгода не прошло». В случае с OpenZFS 2.0 все чуть дольше: этот релиз мы ждали не полгода, а полтор...
Заглянуть «под капот» кода или посмотреть на внутреннее устройство CLR можно с помощью множества инструментов. Этот пост родился из твита, и я должен поблагодарить всех, кто помог составить списо...
Хотите повстречаться с Джоном Гэллоуэем (исполнительным директором .NET Foundation), Павлом Йосифовичем (автором легендарной «Windows Internals» и новых курсов на Pluralsight)? Или может быть, с ...
Эта статья посвящена одному из способов сделать в 1с-Битрикс форму в всплывающем окне. Достоинства метода: - можно использовать любые формы 1с-Битрикс, которые выводятся компонентом. Например, добавле...
Если Вы используете в своих проектах инфоблоки 2.0 и таблицы InnoDB, то есть шанс в один прекрасный момент столкнуться с ошибкой MySQL «SQL Error (1118): Row size too large. The maximum row si...