2 votes

Justification de l'absence de types de données SIMD primitifs

(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 ?

5voto

In silico Points 30778

Parce que tous les processeurs ne supportent pas les instructions SIMD. Les langages comme C et C++ (et même Java et C#) sont conçus pour être utilisés sur différents types de matériel, comme les microcontrôleurs, en plus des ordinateurs de bureau.

Actuellement, la vectorisation des algorithmes n'est pas automatique (bien que cela fasse l'objet de recherches actives). Les algorithmes qui sont "vectorisables" doivent être explicitement écrits pour tirer parti de toutes les capacités SIMD de l'environnement d'exécution.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X