Question

Boucle vectorisation est quand toutes les expressions côté droit sont calculés au début. Je viens de découvrir mes boucles sont vectorisés (en FORTRAN 77 ... ne demandez pas). Je dois ma variable de condition de boucle à être mis à jour à chaque itération, mais comment puis-je réécrire au travail autour de cette vectorisation?

Dans un poste lié , je suis à la recherche d'un moyen de désactiver cette optimisation « fonction » en FORTRAN spécifiquement, mais ici, je suis à la recherche d'une solution plus algorithmiques au cas général.

Était-ce utile?

La solution

Ce n'est pas ce que signifie la vectorisation boucle pour moi. Pour moi, l'expression signifie que le compilateur génère du code qui peut tirer profit de toutes les capacités de calcul vectoriel du matériel. Sur simple Intel Xeon cela pourrait vouloir dire générer des instructions SSE4 pour manipuler simultanément quelques éléments de tableau adjacents, sur un Cray il peut y avoir beaucoup plus disponible en termes d'exécution simultanée de la même opération sur les registres vectoriels.

Comment pensez-vous que toutes les expressions de l'ERS sont «calculées au début? Je ne sais pas ce que vous entendez par là. Pouvez-vous un peu de code pour expliquer? Si vous voulez dire que le nombre de voyages à travers la boucle est calculée à l'entrée de la première itération, alors cela est exact. C'est une fonctionnalité très utile en ce qui concerne l'optimisation du code et non pas un la plupart des programmes Fortran gagnerait à éviter.

Si vous écrivez des boucles DO en Fortran mettre à jour la variable d'itération est interdite par la norme, et a toujours été si je me souviens bien. Votre compilateur peut vous permettre de sortir avec elle, mais je ne ferais pas confiance un programme Fortran où cela est arrivé.

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