Domanda

(Scusate se questo suona come uno sproloquio, ma è una vera e propria domanda e io apprezzo risposte reali)

capisco che poiché C è così vecchio, avrebbe potuto non senso per aggiungerlo allora (MMX non esisteva nemmeno allora). Ma da allora non c'era C99, e ancora non ci sono standard per le variabili SIMD (per quanto ne so).

Con "variabili SIMD", voglio dire qualcosa come:

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

Ho anche capire che questo può essere fatto con le strutture e (in teoria) il compilatore dovrebbe ottimizzare l'utilizzo SIMD quando opportuno in ogni caso.

Ma di recente ho visto un post da Qt Labs che include un esempio con tipi come "__m128i" (che appaiono chiaramente non standard), invece di basarsi su ottimizzazioni. Considerando Qt è la pubblicità questo come migliorando notevolmente la velocità di Qt, sto cercando di indovinare le ottimizzazioni del compilatore stanno essendo insufficiente, almeno per alcuni programmatori.

Se fosse solo C, pensavo C stava essendo stupido. Ma, per quanto ne so, le lingue più recenti, come C ++, Java e C # non includono questi sia. C # è Mono.SIMD ma non è un tipo primitivo (e dato che C # contiene parole chiave "decimali", non credo che stavano cercando di salvare i tipi).

Quindi, ecco quello che sto notando: Lingue con vettore tipi primitivi sembrano essere l'eccezione e non la regola. Perché vettore tipi primitivi sembra così ovvio, sto cercando di indovinare ci deve essere qualche ragione decente di non includere questo tipo.

Qualcuno qui sapere perché questi tipi sono così spesso esclusi? Alcuni link a logiche contro l'aggiunta di loro?

È stato utile?

Soluzione

Perché non tutti i processori supportano istruzioni SIMD. Linguaggi come C e C ++ (e anche Java e C #) sono stati progettati per essere utilizzato su diversi tipi di hardware, come microcontrollori, oltre ai computer desktop.

Attualmente, vettorizzazione di algoritmi non è automatico (anche se viene attivamente ricercato). Algoritmi che sono "vectorizable" devono essere esplicitamente scritte per approfittare di eventuali capacità SIMD del l'ambiente di esecuzione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top