Question

(Désolé si cela sonne comme une diatribe, mais il est une vraie question et je vous en serais reconnaissant de vraies réponses)

Je comprends que, puisque C est si vieux, il aurait pas fait sens pour l'ajouter à l'époque (MMX n'existait même à l'époque). Mais depuis lors, il y avait C99, et encore il n'y a pas de norme pour les variables SIMD (pour autant que je sache).

Par "les variables SIMD", je veux dire quelque chose comme:

vec2_int a = {2, 2};
vec2_int b = {3, 3};
a += b;

Je comprends aussi que cela peut être fait avec struct et (en théorie) le compilateur devrait optimiser l'utilisation SIMD quand de toute façon appropriée.

Mais j'ai vu récemment un poste de Qt Labs qui comprend un exemple avec des types comme « __m128i » (qui ressemblent clairement non standard), au lieu de compter sur les optimisations. Considérant Qt est la publicité cette amélioration comme considérablement la vitesse de Qt, je suppose que les optimisations du compilateur sont insuffisantes étant, au moins pour certains programmeurs.

Si c'était juste C, je penserais C était stupide. Mais, pour autant que je sache, nouvelles langues telles que C ++, Java et C # ne comprennent pas ces non plus. C # a Mono.SIMD mais ce n'est pas un type primitif (et depuis C # a un mot-clé « décimal », je ne pense pas qu'ils essayaient de sauver types).

Alors, voici ce que je remarque: les langues avec le vecteur des types primitifs semblent être l'exception et non la règle. Parce que vecteur types primitifs semblent si évidentes, je devine il doit y avoir des raisons convenables de ne pas inclure ces types.

Est-ce que quelqu'un ici sait pourquoi ces types sont si souvent exclus? Quelques liens vers des logiques contre les ajouter?

Était-ce utile?

La solution

Parce que tous les processeurs prennent en charge les instructions SIMD. Des 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.

À l'heure actuelle, la vectorisation des algorithmes est pas automatique (bien que cela soit en cours de recherche active). Les algorithmes qui sont « vectorisable » doivent être explicitement écrit pour tirer parti de toutes les capacités SIMD de l'environnement d'exécution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top