Articles of sse

Cómo usar las instrucciones Fused Multiply-Add (FMA) con SSE / AVX

Aprendí que algunas CPU Intel / AMD pueden multiplicarse simultáneamente y agregarse con SSE / AVX: FLOPS por ciclo para sandy-bridge y haswell SSE2 / AVX / AVX2 . Me gusta saber cómo hacer esto mejor en el código y también quiero saber cómo se hace internamente en la CPU. Me refiero a la architecture […]

SSE, intrínsecos y alineación

He escrito una clase de vector 3D usando muchos intrínsecos del comstackdor SSE. Todo funcionó bien hasta que comencé a instalar clases con el vector 3D como miembro con nuevas. Experimenté caídas extrañas en el modo de lanzamiento, pero no en el modo de depuración y viceversa. Así que leí algunos artículos y pensé que […]

Uso de las instrucciones de la CPU AVX: bajo rendimiento sin “/ arch: AVX”

Mi código C ++ usa SSE y ahora quiero mejorarlo para que sea compatible con AVX cuando esté disponible. Entonces detecto cuando AVX está disponible y llamo a una función que usa comandos AVX. Uso Win7 SP1 + VS2010 SP1 y una CPU con AVX. Para usar AVX, es necesario incluir esto: #include “immintrin.h” y […]

¿Cómo combinar un escalar en un vector sin que el comstackdor pierda una instrucción poniendo a cero los elementos superiores? ¿Limitación de diseño en los intrínsecos de Intel?

No tengo un caso de uso particular en mente; Pregunto si esto es realmente una falla / limitación de diseño en los intrínsecos de Intel o si me falta algo. Si desea combinar un flotante escalar con un vector existente, no parece haber una manera de hacerlo sin un alto cero de elementos o transmitir […]

Suma de prefijo SIMD en Intel cpu

Necesito implementar un algoritmo de sum de prefijos y necesitaría que sea lo más rápido posible. Ex: [3, 1, 7, 0, 4, 1, 6, 3] should give [3, 4, 11, 11, 15, 16, 22, 25] ¿Hay alguna manera de hacer esto usando SSE / mmx / SIMD cpu? Mi primera idea es sumr cada par […]

La forma más rápida de calcular el valor absoluto usando SSE

Conozco 3 métodos, pero hasta donde yo sé, solo los primeros 2 se usan generalmente: 1) Enmascare el bit de signo usando andps o andnotps . Pros: una instrucción rápida si la máscara ya está en un registro, lo que la hace perfecta para hacer esto muchas veces en un bucle. Contras: es posible que […]

¿Los comstackdores JIT de cualquier JVM generan código que usa instrucciones vectorizadas de punto flotante?

Digamos que el cuello de botella de mi progtwig Java realmente es un poco difícil para calcular un montón de productos vector dot. Sí, tengo un perfil, sí, es el cuello de botella, sí, es significativo, sí, así es como funciona el algoritmo, sí, he ejecutado Proguard para optimizar el código de bytes, etc. El […]

¿Cómo implementar atoi usando SIMD?

Me gustaría intentar escribir una implementación atoi usando instrucciones SIMD, para ser incluido en RapidJSON (una biblioteca de lectura / escritura C ++ JSON). Actualmente tiene algunas optimizaciones SSE2 y SSE4.2 en otros lugares. Si se trata de una ganancia de velocidad, se pueden realizar múltiples resultados atoi en paralelo. Las cadenas provienen originalmente de […]

Vectorizar con almacenamientos intermedios no alineados: usar VMASKMOVPS: ¿generar una máscara a partir de un recuento de desalineación? O no usar ese nombre en absoluto

gcc 5.3 con -O3 -mavx -mtune=haswell para x86-64 hace un código sorprendentemente voluminoso para manejar entradas potencialmente desalineadas para código como: // convenient simple example of compiler input // I’m not actually interested in this for any real program void floatmul(float *a) { for (int i=0; i<1024 ; i++) a[i] *= 2; } clang usa […]

Las cargas no temporales y el precapturador de hardware, ¿funcionan juntos?

Al ejecutar una serie de llamadas _mm_stream_load_si128() ( MOVNTDQA ) desde ubicaciones de memoria consecutivas, el pre-fetcher de hardware aún se activará, o debería usar la captación previa de software explícita (con sugerencia NTA) para obtener los beneficios de la captación previa mientras aún ¿evitando la contaminación del escondite? La razón por la que pregunto […]