Merci !
Pour le traitement des exception je vois l'idée, mais j'ai encore un peu de mal avec les détails. En particulier cette règle a l'air bien pénible :
"For predicated SVE vector stores, memory locations that are associated with active elements that do not detect a fault are set to an UNKNOWN value."
Mettons que je veuille vectoriser un code de ce genre :
Code:
for(int i = 0; a[i] != 0; i += 1024)
a[i] = a[i] + 1;
J'ai 3 cas exceptionnels à gérer :
1. Quand le load lève une exception. Ça peut être une page fault normale sur le chemin (à traiter normalement), ou un accès spéculatif à une page après la fin de la boucle (à ignorer).
2. Quand la condition d'arrêt est vraie. Il faut traiter toutes les itérations précédentes et annuler les itérations suivantes.
3. Quand le store lève une exception. Il faut traiter l'exception et recommencer le store avec les mêmes données, vu qu'on a laissé la mémoire dans un état dégueulasse sur toutes les autres voies.
Je ne peux pas simplement répéter la boucle en traitant les exceptions une à une dans l'ordre, sinon je peux me retrouver à re-lire des a[i] dont la valeur est devenue UNKNOWN et genre les incrémenter deux fois de suite, ou bien me prendre des exceptions en boucle et ne jamais faire de forward progress.
Donc : si je récupère une exception en 1 et qu'elle n'est pas sur la première voie, je la mets de côté, j'évalue la condition d'arrêt sur les voies précédent celle de l'exception, je désactive et je supprime les exceptions mises de côté sur toutes les voies d'après celle où la condition d'arrêt est vérifiée, puis je lance le store sur les voies restantes. Si le store lève une exception, je la traite et je recommence le store sur les voies restantes (forcément une par une pour avoir du forward progress !) jusqu'à épuiser toutes les exceptions. Après je traite les exceptions restantes du load d'avant la condition d'arrêt.
Mouais, ça a l'air faisable mais faut voir la gueule du code généré... et celle du générateur de code.
Sinon, l'instruction FTMAD. Comment combiner les problèmes du hardware et du software avec des coeffs et un schéma d'évaluation codés en dur, mais même pas documentés niveau archi. Sérieusement, Fujitsu...