Parce que personne ne code naturellement avec des gros tableau alignés pour faire une addition. ( En plus ce genre de code se fait étrangler par la mémoire.)
À noter, l'unité vectorielle sur les processeurs Intel peut aussi faire 1 seule instruction à la fois (instructions se terminant en ss, pour single signed, par exemple vaddss). Gcc ne se prive d'ailleurs pas de l'utiliser de cette manière quand tu lui passes -ftree-vectorize (inclus dans -O3).
Et sur du code numérique, c'est quand même courant d'avoir des gros tableaux de flottants. Dans le cas général, évidemment, c'est pas forcément intéressant.
Prends une simple image 2D, avec la gestion des canaux de couleur, il y a peu de cas qui peut se faire accélérer sans changer le code (surtout avec la gestion des bords).
Effectivement si les données sont organisées selon un layout arrays-of-structures plutôt que structure-of-arrays, l'auto-vectorisation ne fonctionne pas actuellement (dans gcc au moins). À quand des compilateurs qui modifient automatiquement le layout mémoire ?
[^] # Re: Ces architectures sont de plus en plus rares mais pas encore mortes
Posté par X345 . En réponse au journal Le Power8 d'IBM pourra t-il s'imposer dans le monde des entreprises ?. Évalué à 3.
À noter, l'unité vectorielle sur les processeurs Intel peut aussi faire 1 seule instruction à la fois (instructions se terminant en ss, pour single signed, par exemple vaddss). Gcc ne se prive d'ailleurs pas de l'utiliser de cette manière quand tu lui passes -ftree-vectorize (inclus dans -O3).
Et sur du code numérique, c'est quand même courant d'avoir des gros tableaux de flottants. Dans le cas général, évidemment, c'est pas forcément intéressant.
Effectivement si les données sont organisées selon un layout arrays-of-structures plutôt que structure-of-arrays, l'auto-vectorisation ne fonctionne pas actuellement (dans gcc au moins). À quand des compilateurs qui modifient automatiquement le layout mémoire ?