Ça doit être atomique au moins au niveau architectural, i.e. non interruptible. Ça demande que si ta n-1ième µop lève une exception, tu dois remettre l'état architectural comme ta première µop l'a trouvé en arrivant. Pour une réduction qui n'a qu'un résultat ça se fait, mais la logique de contrôle se met à ressembler beaucoup à un séquenceur de microcode.
Ou alors tu as seulement des instructions du style c=c+a_i pour i donné et c'est à toi d'écrire la boucle autour. Ce qui te fait toujours gagner par rapport à avoir du code qui extrait un par un les scalaires du vecteur.
Le whitepaper à l'air de suggérer un truc comme ça :
En cherchant bien on doit pouvoir retrouver une référence à l'instruction exacte dans le code de llvm ou gcc, mais j'ai la flemme. (Mais toi tu peux, le code est public :siffle:)Citation:
Regarding the data manipulation instructions, most of the operations cover both floating point (FP) and integer domains, with some notable FP functionality brought by the ordered horizontal reductions, which provide cross-lane operations that preserve the strict C/C++ rules on non-associativity of floating-point operations.