soporte requisitos procesador pcsx2 con x86 sse simd avx avx2

x86 - requisitos - ¿Cómo almacenar valores más bajos o más altos del registro AVX/AVX2(YMM) en la memoria como lo hace la SSE movlps/movhps?



avx2 tensorflow (1)

Almacene el low128 con vmovdqu [rdi], xmm0 .

Guarde el high128 con VEXTRACTI128 xmm1/m128, ymm2, 1 . Probablemente pueda obtener un compilador para generar una tienda en la memoria asignando el resultado de un extracto intrínseco a una referencia de memoria.

vextracti128 / f128 toma 2 uops, incluso en el dominio fusionado (Haswell), por lo IDK qué sentido tiene codificarlo con un operando inmediato de 0. (hasta AVX512, cuando un índice inmediato en lugar de un movh vuelve relevante, ya que no sabían que iban a reemplazar VEX con EVEX para AVX512). No hay ninguna penalización para mezclar AVX2 con xmm regs y AVX2 con ymm regs, por lo que puede usar una tienda 128b de la versión xmm para obtener 128 bajos, al igual que puede obtener el low32 de un reg 64b de GP haciendo referencia a eax lugar de rax .

Probablemente sea molesto lanzar cosas al usar elementos intrínsecos, por lo que con suerte un compilador compilará _mm256_extracti128_si256 (vec, 0) a un vmovdqu del correspondiente registro xmm. Pero si tu compilador no lo hace, tu código será más rápido si lo haces para generar vmovdqu . ( movdqu es tan rápido como vmovdqa si la dirección está alineada, al igual que el acceso a la memoria AVX que no está mov).

¿Hay alguna instrucción existente que pueda almacenar valores más bajos o más altos de un registro AVX / AVX2 (YMM) de 256 bit en la dirección de memoria, tal como lo hace la instrucción SSE movlps / movhps?

¿O hay alguna otra forma de implementar esto?

¡Cualquier ayuda será apreciada, gracias!