(Désolé si cela ressemble à une diatribe, mais c'est une vraie question et j'aimerais avoir de vraies réponses).
Je comprends que, puisque C est si vieux, il n'était peut-être pas judicieux de l'ajouter à l'époque (MMX n'existait même pas à l'époque). Mais depuis, il y a eu C99, et il n'y a toujours pas de standard pour les variables SIMD (pour autant que je sache).
Par "variables SIMD", j'entends quelque chose comme :
vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;
Je comprends également que cela peut être fait avec des structs et (en théorie) le compilateur devrait de toute façon l'optimiser pour utiliser SIMD lorsque cela est approprié.
Mais j'ai récemment vu un post de Qt Labs qui inclut un exemple avec des types tels que "__m128i" (qui semblent clairement non standard), au lieu de s'appuyer sur des optimisations. Si l'on considère que Qt annonce que cela améliore considérablement la vitesse de Qt, je suppose que les optimisations du compilateur sont insuffisantes, au moins pour certains programmeurs.
Si c'était juste du C, je penserais que le C est stupide. Mais, pour autant que je sache, les langages plus récents tels que C++, Java et C# ne les incluent pas non plus. C# a Mono.SIMD mais ce n'est pas un type primitif (et puisque C# a un mot-clé "decimal", je ne pense pas qu'ils essayaient de sauver les types).
Alors voilà ce que je remarque : Les langages avec des types primitifs vectoriels semblent être l'exception et non la règle. Parce que les types vectoriels primitifs semblent si évidents, je suppose qu'il doit y avoir des raisons valables de ne pas inclure ces types.
Quelqu'un ici sait-il pourquoi ces types sont si fréquemment exclus ? Des liens vers des arguments contre leur ajout ?