Articles of sse

Referencia de funciones intrínsecas de SSE

¿Alguien sabe de una referencia que enumera el funcionamiento de las funciones intrínsecas de SSE para gcc, es decir, las funciones en los archivos de encabezado ? Gracias.

sum paralela del prefijo (acumulativa) con SSE

Estoy buscando algunos consejos sobre cómo hacer una sum de prefijo paralela con SSE. Estoy interesado en hacer esto en una variedad de ints, floats o dobles. He encontrado dos soluciones. Un caso especial y un caso general. En ambos casos, la solución se ejecuta en la matriz en dos pasos en paralelo con OpenMP. […]

¿Es posible usar SSE (v2) para hacer un entero de 128 bits de ancho?

Estoy buscando comprender un poco más las capacidades de SSE2, y me gustaría saber si se podría hacer un entero de 128 bits que admita la sum, la resta, el XOR y la multiplicación. Gracias, Erkling.

¿Cómo resolver el problema de alineación de 32 bytes para las operaciones de carga / almacenamiento de AVX?

Estoy teniendo un problema de alineación al usar registros ymm , con algunos fragmentos de código que me parecen bien. Aquí hay un ejemplo de trabajo mínimo: #include #include inline void ones(float *a) { __m256 out_aligned = _mm256_set1_ps(1.0f); _mm256_store_ps(a,out_aligned); } int main() { size_t ss = 8; float *a = new float[ss]; ones(a); delete [] […]

¿Cómo realizar conversiones dobles / int64 de manera eficiente con SSE / AVX?

SSE2 tiene instrucciones para convertir vectores entre flotantes de precisión simple e enteros de 32 bits. _mm_cvtps_epi32() _mm_cvtepi32_ps() Pero no hay equivalentes para enteros de doble precisión y de 64 bits. En otras palabras, faltan: _mm_cvtpd_epi64() _mm_cvtepi64_pd() Parece que AVX tampoco los tiene. ¿Cuál es la forma más eficiente de simular estos intrínsecos?

imprimir una variable __m128i

Estoy tratando de aprender a codificar usando intrínsecos y abajo hay un código que hace la adición compiler used: icc #include #include int main() { __m128i a = _mm_set_epi32(1,2,3,4); __m128i b = _mm_set_epi32(1,2,3,4); __m128i c; c = _mm_add_epi32(a,b); printf(“%d\n”,c[2]); return 0; } Me sale el siguiente error: test.c(9): error: expression must have pointer-to-object type printf(“%d\n”,c[2]); […]

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 […]