URL: https://linuxfr.org/forums/programmationautre/posts/permutation-sure-de-pointeurs-en-fortran Title: Permutation "sure" de pointeurs en Fortran Authors: jyes Date: 2014年01月10日T10:14:27+01:00 License: CC By-SA Tags: fortran Score: 0 Bonjour à tous ! Une question de programmation pas directement propre à Linux ou au logiciel libre mais je ne trouve pas la réponse ailleurs et je sais que des experts en HPC traînent parfois ici, et peut-être ont-ils déjà été confrontés à ce problème. En plus, j’utilise gfortran, bien qu’il ne soit pas le fautif ici. Je cherche à permuter deux pointeurs (appelons les p1 et p2), ce qui s’écrirait naïvement : ptemp => p1 p1 => p2 p2 => ptemp Sauf que ceci ne fonctionne qu’avec un niveau d’optimisation 0 ("-O0" à la compilation). Le soucis provient du fait que la norme Fortran autorise le terme de droite à contenir une copie temporaire des variables utilisées, et que cette solution peut donc potentiellement faire pointer vers un espace temporaire, perdu par la suite. Une solution pour d’autres situations consiste à envelopper les assignations dans une subroutine (voir [la description d’un bug subtil à ce propos](http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html#6)). Avec cette astuce, mon code survit aux niveaux d’optimisation 1 et 2, mais échoue à nouveau pour "-O3". En fait, si le terme de droite peut toujours contenir une copie temporaire, je ne vois pas ce que la solution suggérée apporte, à part qu’en l’enveloppant dans une subroutine, le compilateur est moins tenté de le faire pour optimiser le code. Du coup, ma conclusion à ce jour est qu’il est impossible de permuter deux pointeurs de manière sûre en Fortran. Je reste toutefois très étonné par ce résultat et attends impatiemment d’être contredit par un expert, car je n’aimerait vraiment pas devoir copier leur contenu, vu la taille de ces tableaux. Une idée ? Merci beaucoup de votre aide !