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

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

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

    Если найдёте ошибки или неточности, пожалуйста сообщите.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 6

      0
      Думаю, было бы полезно выложить результат генерации куда-то (на GitHub Pages, например).
        +1
        Вот же он: ссылка, в статье вставлен, надо как-то позаметней ссылку сделать, наверное.
        +1
        В Net5 обещают завезти для arm.
        +1
        Спасибо! Эта штука сэкономит кучу времени!
          0
          Пожалуйста! Надеюсь, пригодится не только мне ))

        Only users with full accounts can post comments. Log in, please.