Je ne suis pas du tout familier avec ARM, donc vous devriez prendre cela avec un grain de sel. Cette réponse est juste basée sur environ 20 minutes de recherche autour de la documentation sur mon téléphone. Il pourrait y avoir certaines choses qui me manquent, donc ceci peut ne pas être correct.
Dans tous les cas, je crois que oui, cela devrait causer des arrêts de pipeline. Le coprocesseur VFP a un pipeline à 8 étages, mais en raison du "transfert" (chaque instruction dépend du résultat de l'instruction précédente), le nombre de cycles bloqués doit être réduit à 7 pour chaque instruction. Pourtant, compte tenu des 4 instructions que vous avez, vous seriez bloqué pour environ 28 cycles, ce qui n'est pas très bon. Cela ne tient pas non plus compte du temps requis pour charger les registres, ce qui pourrait exacerber le problème.
Vous pouvez probablement améliorer les performances en intercalant les "instructions fld" avec les instructions fmacs.
consultez les liens suivants pour plus d'informations:
http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0360f/CACBBDCE.html
Les résultats d'une instruction "FLD" devrait être disponible dans les 4 cycles, ce qui signifie que si vous pouvez faire quelque chose comme:
fld s0
fld s4
fld s1
fld s5
fmuls s0, s0, s4
fld s2
fld s6
fld s3
fld s7
fmacs s0, s1, s5
famcs s0, s2, s6
fmacs s0, s3, s7
Ensuite, vous pourriez réduire le nombre total de cycles bloqués à 17.
En supposant que vous faites cela en boucle, vous co Probablement en réduisant davantage le décrochage en essayant de commencer à travailler sur la "prochaine" boucle d'itération pendant que l'itération en cours s'exécute (c.-à-d. boucle déroulant). En outre, en fonction de la manière dont vos données sont stockées, une fois que vous avez déroulé la boucle, vous pouvez probablement améliorer encore plus les choses en utilisant fldm au lieu des instructions fld.
Dans tous les cas, il est difficile d'optimiser manuellement le comportement de la conduite. Y a-t-il une raison pour laquelle vous ne pouvez pas laisser le compilateur faire la programmation d'instruction pour vous?
Est-ce que vous craignez que la multiplication de 's1' et' s5' ne puisse pas commencer tant que l'ajout précédent de 's0' n'est pas terminé? – Gabe
Corriger, ou s2, s6 avec le s0 accumuler ou ... –