Pregunta

(Lo siento si esto suena como una queja, sino que es una cuestión real y te agradecería respuestas reales)

entiendo que desde C es tan viejo, que podría haber no tenía sentido volver a añadirla a continuación (MMX ni siquiera existía en ese entonces). Pero desde entonces no había C99, y todavía hay ningún estándar para las variables SIMD (por lo que yo sé).

Por "variables de SIMD", me refiero a algo como:

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

También entiendo que esto se puede hacer con estructuras y (en teoría) el compilador debe optimizar el uso de todos modos SIMD cuando sea apropiado.

Pero poco vi un post de Qt laboratorios que incluye un ejemplo con tipos como "__m128i" (que se ven claramente no estándar), en lugar de depender de optimizaciones. Teniendo en cuenta Qt es la publicidad de esta velocidad de Qt como en gran medida la mejora, supongo que las optimizaciones del compilador están siendo insuficiente, al menos para algunos programadores.

Si fuera sólo C, pensaría C estaba siendo estúpida. Pero, por lo que yo sé, los nuevos lenguajes como C ++, Java y C # no incluyen estos tampoco. C # tiene Mono.SIMD pero no es un tipo primitivo (y ya que C # tiene una palabra clave "decimal", no creo que estaban tratando de salvar a los tipos).

Así que aquí es lo que estoy notando: Idiomas con el vector de tipos primitivos parecen ser la excepción y no la regla. Debido vector tipos primitivos se ven tan obvio, supongo que no tiene que haber algunas razones dignas de no incluir este tipo.

¿Alguien aquí sabe por qué se excluye con tanta frecuencia estos tipos? Algunos enlaces a razones en contra de la adición de ellos?

¿Fue útil?

Solución

Debido a que no todos los procesadores son compatibles con las instrucciones SIMD. Lenguajes como C y C ++ (e incluso Java y C #) se han diseñado para ser utilizado en diferentes tipos de hardware, como microcontroladores, además de los ordenadores de sobremesa.

En la actualidad, la vectorización de algoritmos no es automática (aunque eso se está investigando activamente). Algoritmos que son "vectorizable" deben ser escritos de manera explícita a aprovechar las capacidades SIMD del entorno de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top