2011-11-17 5 views
2

J'ai un programme C++ qui est compilé sous gcc (gcc version 4.5.1) avec le drapeau -O3. Je suis en train de réfléchir à la question de savoir si cela vaut la peine de faire une version SSE2 de ce programme (ou du moins, la plus chargée). Cependant, je suis inquiet que le compilateur l'ait déjà fait grâce à la vectorisation automatique.Comment puis-je déterminer si mon programme utilise SSE2 (via l'optimisation gcc)?

Question: Comment puis-je déterminer (a) si mon programme utilise SSE/SSE2 et (b) combien de temps est consacré à l'utilisation SSE/SSE2 (à savoir le profilage)?

Répondre

1

La meilleure façon de savoir si vous gagnez un avantage de vectorisation du compilateur est d'exécuter le code avec et sans le drapeau -ftree-vectorize et comparer les résultats.

-O3 activera automatiquement cette option. Donc, vous pourriez vouloir l'essayer sous -O2 à la place.

Pour voir quelles boucles ont été vectorisées, lesquelles ne l'ont pas été et pourquoi, vous pouvez ajouter l'option -ftree-vectorizer-verbose.

La dernière option, bien sûr, est de regarder l'assemblage. Il est très facile d'identifier le code vectorisé dans l'assemblage.

+0

Merci, cela a fonctionné. Il s'avère que rien n'est vectorisé. –

+0

Notez que vous pouvez toujours voir un code SSE même si rien n'a été vectorisé, car gcc a tendance à optimiser diverses opérations scalaires à virgule flottante en utilisant des instructions SSE (par exemple, des conversions int float <->). –

Questions connexes