Из-за этого трудно воспользоваться уже готовым векторизованным кодом, просто портировав его с плюсов. Так же тяжело будет и с адаптацией найденных на 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/
Добавить комментарий