С помощью SSE вы можете загрузить один float из памяти во все 4 слота __m128 с помощью встроенного _mm_load1_ps ()
При использовании SIMD шириной 256 бит с AVX, похоже, нет _mm256_load1_ps () для загрузки одного числа с плавающей запятой из памяти во все 8 слотов вектора.
Почему это упущение и как лучше всего этого избежать?
Или даже лучше: есть ли способ загрузить один плавающий объект в целевой слот 0..7 вектора?
PINSRD
/INSERTPS
: номер элемента = константа времени компиляции). Выполнение этого без обнуления верхнего128 возможно только с кодировкой, отличной от VEX, что вызывает значительное замедление на Intel pre-Skylake из-за смешивания инструкций VEX и не-VEX. Вы можете извлечь f128, insertps, insertf128. - person Peter Cordes   schedule 26.01.2016_mm_load1_ps
- это составная внутренняя функция дляmovss
+ shuffle для широковещательной передачи числа с плавающей запятой. Если вы уже были готовы позволить компилятору делать все, что угодно, чтобы получить константу в регистре,_mm256_set1_ps(*f)
- хороший выбор. Умные компиляторы при необходимости выдадутVBROADCASTSS
. - person Peter Cordes   schedule 26.01.2016