«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как загрузить 8 символов в переменную __m256 как упакованные числа с плавающей запятой одинарной точности?

Как загрузить 8 символов в переменную __m256 как упакованные числа с плавающей запятой одинарной точности?

Опубликовано 6 ноября 2024 г.
Просматривать:869

How to Load 8 Chars into an __m256 Variable as Packed Single Precision Floats?

Загрузка 8 символов из памяти в переменную __m256 в виде упакованных плавающих чисел одинарной точности

В попытке оптимизировать алгоритм размытия по Гауссу вы попытайтесь заменить использование буфера с плавающей запятой внутренней переменной __m256. Целью этого вопроса является определение оптимальных инструкций для этой задачи.

Инструкция для архитектуры AVX2:

  • Используйте PMOVZX для нулевого расширения ваших символов в 32-битные целые числа в регистре 256b.
  • Преобразуйте в число с плавающей запятой на месте с помощью VCVTDQ2PS.
; rsi = new_image
VPMOVZXBD   ymm0,  [rsi]   ; or SX to sign-extend  (Byte to DWord)
VCVTDQ2PS   ymm0, ymm0     ; convert to packed foat

Дополнительные стратегии:

  • Рассмотрите возможность использования 128-битной широковещательной загрузки для подачи vpmovzxbd ymm,xmm и vpshufb ymm (_mm256_shuffle_epi8) для высокие 64 бита. Такой подход уменьшает количество операций и может быть полезен на процессорах Ryzen.
  • Избегайте использования дополнительных инструкций перемешивания, так как они могут стать узким местом, когда перемешивание уже является ограничением.

Инструкции для архитектуры AVX1:

  • Выполните следующие действия:

    VPMOVZXBD   xmm0,  [rsi]
    VPMOVZXBD   xmm1,  [rsi 4]
    VINSERTF128 ymm0, ymm0, xmm1, 1   ; put the 2nd load of data into the high128 of ymm0
    VCVTDQ2PS   ymm0, ymm0     ; convert to packed float

Аспекты встроенных функций:

  • GCC и MSVC могут потребовать специальной обработки для обеспечения оптимальной генерации кода при использовании встроенных функций для VPMOVZXBD ymm,[mem].
  • Вместо этого рассмотрите возможность использования встроенной функции _mm_loadl_epi64, которую можно свернуть в операнд памяти для оптимальной сборки на -O3 с GCC в GCC версии 9 и более поздних версиях.
  • Для Оптимизация только для AVX1, написание встроенной версии — занятие неинтересное.
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3