assembly arm neon

assembly - ARM NEON: ¿Qué pares de instrucciones deben esperar para volver a escribir?



(3)

Hablando en términos generales, lo que razonablemente esperaría avanzar, adelante. vmul.f32 reenvía a vadd.f32 y similares.

No creo que las rutas de envío exactas estén exactamente documentadas en la forma que estás buscando. No los he encontrado, de todos modos. Si los encuentra, asegúrese de informarnos dónde. Por supuesto, no es demasiado difícil determinar si hay un par de instrucciones dado, si se produce el reenvío o no, pero esa no es una solución general. Lo siento.

En la documentación de ARM NEON, dice:

[...] algunos pares de instrucciones podrían tener que esperar hasta que el valor vuelva a escribirse en el archivo de registro.

No he encontrado una lista que defina los pares de instrucciones que pueden usar los resultados reenviados y los pares de instrucciones que tienen que esperar para la reescritura.

¿Alguien sabe de una tabla o documentación que enumera estos pares?


¿Alguien sabe de una tabla o documentación que enumera estos pares?

Estos pares son más de 9000 y no se pueden enumerar todos.
Por ejemplo:

VADD.F32 q0,q0,q1 VMUL.F32 q3,q0,q2

la primera instrucción escribe el resultado en 4º ciclo, mientras que la segunda instrucción lo requiere (q0) como fuente en 2º ciclo, por lo que la fuente no está lista todavía hay un bloqueo (o "agujero" en la tubería) entre estas dos instrucciones .

Para calcular estos puestos puede usar la siguiente herramienta en línea:
http://pulsar.webshaker.net/ccc/result.php?lng=us


Entero multiplicado se acumula.

La sección al final de http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0344k/ch16s06s03.html es útil:

Si un acumulador múltiple sigue a un multiplicador u otro multiplicar-acumular, y depende del resultado de esa primera instrucción, entonces si la dependencia entre ambas instrucciones es del mismo tipo y tamaño, el procesador usa un reenvío de acumulador multiplicador especial. Este reenvío especial significa que las instrucciones de multiplicación pueden emitirse una detrás de otra porque el resultado de la primera instrucción en N5 se reenvía al acumulador de la segunda instrucción en N4. Si el tamaño y el tipo de las instrucciones no coinciden, entonces se requiere Dd o Qd en N3. Esto se aplica a las combinaciones de las instrucciones de multiplicar y acumular VMLA, VMLS, VQDMLA y VQDMLS, y las instrucciones de multiplicar VMUL y VQDMUL.

No suponga que el punto flotante se acumula multiplicando el trabajo de la misma manera. No he utilizado las instrucciones NEON de coma flotante para nada crítico de rendimiento, así que no puedo ofrecer ninguna experiencia aquí, pero asegúrese de leer y entender la nota al final de http://infocenter.arm.com/help/index. jsp? topic = / com.arm.doc.ddi0344k / BCGDCECC.html