Je vais commencer par mon expérience personnelle dans notre laboratoire. Dans les ifort 9 et 10 jours, nous avions l'habitude d'être assez agressifs avec les optimisations, en compilant avec -O3 et des drapeaux spécifiques au processeur (-xW -xSSE4.2 par exemple). Mais à partir d'ifort 11, nous avons commencé à remarquer:
1. des incohérences dans les résultats (car la sémantique n'était pas préservée)
2. des gains plus faibles par rapport à -O2.
Donc actuellement, nous compilons simplement avec -O2 et -xhost. Avez-vous de meilleures suggestions avec ifort 11? Cela changera-t-il encore une fois que nous passerons à l'ifort 12? Merci d'avance.
performance
hpc
compiling
fortran
FrançaisKheldar
la source
la source
Réponses:
Nous recommandons fortement à tous nos utilisateurs de commencer par
-O3 -xHost -ipo
ifort 11 et ifort 12. S'il existe des transformations à virgule flottante particulières activées par O3 qui affectent la précision de certains de vos calculs, vous pouvez les désactiver spécifiquement avec-fp-model precise -fp-model except
(ou, plus radicalement,-fp-model strict
) tout en conservant les autres optimisations permises par O3, telles que le blocage de boucle pour le cache, la fusion et le déroulement de boucle et les optimisations d'accès à la mémoire.Je vous conseille d'essayer le modèle de virgule flottante sur des fichiers individuels et de découvrir où cela fait une différence, plutôt que de le désactiver globalement; cela peut être un ralentisseur de ~ 15%, et vous voulez pouvoir le garder là où cela n'affecte pas vos calculs. Si vous ne savez pas où la précision est affectée, vous pouvez jouer avec l'activation et la désactivation des indicateurs de modèle à virgule flottante pour ces fichiers, ou jouer avec les modes d'arrondi .
Nous avons récemment parlé brièvement à nos utilisateurs des indicateurs d'optimisation, en nous concentrant sur les compilateurs GNU et Intel pour x86; vous pouvez voir les diapositives de cette conférence ici .
Soit dit en passant , alors que nous parlons de choisir des indicateurs d'optimisation pour votre code, il vaut également la peine de regarder de temps en temps la sortie de -vec-report pour voir où le compilateur a tenté de vectoriser une boucle et n'a pas pu; Parfois, vous pouvez apporter de petites modifications à votre boucle, ce qui peut rendre possible la vectorisation (qui peut être une accélération 4x). De même pour le rapport plus général -opt-report .
la source
-O3 -xhost -fp-model precise -fp-model except
entraîné un ralentissement de 30% . Je vais regarder à nouveau le profilage et le-vec-report
pour essayer de voir ce qui se passe ...Je travaille pour une entreprise qui produit de grandes applications hautement techniques à Fortran avec IFort - les applications sont très critiques en termes de performances, car la vitesse (tout en maintenant la précision) est le principal argument de vente.
Nous compilons toujours avec -O3, et à ma connaissance, les principales choses que -O3 fait sont le déroulement de la boucle et la prélecture. Je soupçonne que la plupart des applications de calcul scientifique en bénéficient grandement, en particulier les optimisations de boucle. Nous n'avons pas vu d'erreurs de compilation depuis un certain temps (bien que nous ayons vu quelques erreurs de l'éditeur de liens lors de l'utilisation d'Ifort sur un Mac). Nous utilisons 11.1.095.
J'espère que ça aide.
la source
Je me rends compte que cette réponse est probablement loin, beaucoup trop tard, mais pour une optimisation agressive, l'option "-fast" semble être la solution la plus simple. Extraits de la page de manuel:
la source