Escribo un código y trato de acelerarlo utilizando SIMD intrinsics SSE2/3. Mi código es de tal naturaleza que necesito cargar algunos datos en un registro XMM y actuar sobre él muchas veces. Cuando miro el código de ensamblador generado, parece que GCC sigue volviendo a tirar los datos a la memoria, para volver a cargar algo más en XMM0 y XMM1. Estoy compilando para x86-64, así que tengo 15 registros. ¿Por qué GCC usa solo dos y qué puedo hacer para pedirle que use más? ¿Hay alguna forma de que pueda "fijar" algún valor en un registro? Agregué la palabra clave "registrar" a mi definición de variable, pero el código ensamblador generado es idéntico.¿Cómo hacer que GCC use más de dos registros SIMD cuando usa intrínsecos?
Respuesta
Sí, puedes. Explicit Reg Vars habla sobre la sintaxis que necesita para fijar una variable en un registro específico.
Intenté >> registrar __m128i v0 asm ("xmm7"); << pero al compilador no le gusta >> error: expected '=', ',', ';', 'asm' o '__attribute__' antes de 'asm' <<. – florin
¿Incluyó #include
Si está llegando al punto en que está especificando registros individuales para cada intrínseco, también puede escribir el directorio de ensamblaje, especialmente dado el desagradable hábito de gcc de pesimizar intrínsecos innecesariamente en muchos casos.
- 1. Use intrínsecos SSE2 y ensamblador en línea gcc
- 2. ¿Cómo hacer que gcc use march = native como predeterminado?
- 3. (extensiones SIMD) SSE apoyo en gcc
- 4. Cómo lanzar vectores SIMD int para flotar en GCC?
- 5. ¿Cómo hacer que boost.build use una instalación de compilación específica?
- 6. SIMD o no SIMD - multiplataforma
- 7. ¿Cómo hacer que HttpClient use Kerberos?
- 8. C++ SSE SIMD framework
- 9. Cambiar la versión de gcc que distutils usa
- 10. cómo recuperar registros que ocurrieron más de dos veces en Oracle?
- 11. ¿Cómo usar los intrínsecos de MSVC para obtener el equivalente de este código GCC?
- 12. Hacer que Qt Creator use MinGW
- 13. Hacer que GNU use un compilador diferente
- 14. ¿Cómo hacer que Jersey use SLF4J en lugar de JUL?
- 15. GWT - ¿Hacer que CellTable Cell use HTML?
- 16. cómo hacer que GCC imprima útil RUNTIME mensaje de error?
- 17. Optimización de registros usados cuando se utiliza el ensamblaje ARM en línea en GCC
- 18. Hacer que JAXB vaya más rápido
- 19. SIMD (AVX) comparar
- 20. ¿Cómo hacer que NSTextField use la subclase personalizada de NSTextFieldCell?
- 21. ¿Cómo hacer que un WPF TextBox use caracteres de contraseña?
- 22. Aplicación de Java que usa mucha memoria. Use -Xmx?
- 23. ¿Cómo hacer que LogonUser no use credenciales en caché?
- 24. Técnicas comunes de SIMD
- 25. ¿Cómo hacer que gcc advierta sobre funciones desconocidas?
- 26. ¿Cómo hacer que la salida de GCC sea stdout?
- 27. ¿Cómo hacer una animación flip entre más de dos UIViews?
- 28. Cómo hacer que la declaración del conmutador C# use IgnoreCase
- 29. ¿Cómo puedo hacer que el cliente web use cookies?
- 30. ¿Cómo hacer que Eclipse use JDK8 para compilar un proyecto?
Estoy teniendo el mismo problema, con ARM. AFAICT, la sintaxis que estoy usando es correcta: coincide con la especificada en los documentos de GCC. Sin embargo, me da el mismo error ... Me pregunto si los últimos GCC están molestos en este sentido. –
Ah, lo siento, mi comentario es, de hecho, con respecto al problema que describe florin en su comentario a la respuesta a continuación (el uso de asm ("regname") genera un error). –
un motivo común para este comportamiento no es habilitar optimizaciones (-O1, -O2 o -O3), cuando se usan intrínsecos sin optimizaciones, se vaciará en la memoria cada vez y esencialmente solo usará 2-3 registros simd – jtaylor