- Impossible de compiler avec OpenMP sur Brodie (SX8 de l'IDRIS). En compilant le GCM en mode OpenMP (seul ou en mode mixte MPI/OpenMP), la compilation échoue lors de la compilation de la routine
physiq
avec le message d'erreur suivant :
f90 fatal: Limitation : memory could not allocate.
sxf90 fatal : /SX/usr/lib/f90com command error : 1
Au cours de la compilation, le compilateur à besoin d'espace ou générer des éléments intermédiaires. L'espace et la mémoire disponibles sont (dans une certaine mesure) ceux de l'utilisateur et sont limités (faire la commande ulimit -a
pour connaître certaines de ces limites). Par exemple sur Brodie (la SX8 de l'IDRIS) :
$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
file size (blocks, -f) 20971520
max locked memory (kbytes, -l) 8192
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 8192
cpu time (seconds, -t) 3600
max user processes (-u) 200
virtual memory (kbytes, -v) 1048576
Cette mémoire virtuelle est trop faible pour permettre la compilation (en mode OpenMP) de la (grosse) routine physiq
. Heureusement, l'utilisateur peut (dans une certaine mesure) agir sur ces limites, et augmenter la mémoire virtuelle, par exemple comme suit :
ulimit -v 2000000
Ce qui permet de régler le problème.
- Avec l'option
-arch linux-32bit
de makelmdz_fcm
, si vous obtenez de nombreux messages du type :
PGF90-S-0450-Argument number 4 to ymds2ju: kind mismatch
(linux-32bit_96x72x19_t4_phylmd_seq/.config/ppsrc/dyn/bilan_dyn.f:
354)
IOIPSL a certainement été compilé avec l'option -r8
(c'est l'option par défaut sur Linux). Ajoutez cette option à la ligne %BASE_FFLAGS
de arch-linux-32bit.fcm
. Vous devez alors aussi ajouter la macro-constante NC_DOUBLE
à la ligne %FPP_DEF
.
- Avec l'option
-arch linux-32bit
de makelmdz_fcm
, si vous obtenez de nombreux messages du type :
/usr/lib/libc.a(iofclose.o):(.eh_frame+0x11): undefined reference to
`__gcc_personality_v0'
Supprimez l'option -Wl,-Bstatic
à la ligne %LD_FLAGS
de arch-linux-32bit.fcm
.
- Avec l'option
-arch linux-32bit
de makelmdz_fcm
, si vous obtenez de nombreux messages du type :
PGF90-S-0069-Illegal implied DO expression
(linux-32bit_32x24x9_phylmd_seq/.config/ppsrc/phys/regr_lat_time_climoz_m.f90:
119)
Vous avez certainement une vieille version du compilateur pgf90
, la version 6 ou une version encore antérieure. C'est un bogue de cette version du compilateur, corrigé dans les versions plus récentes.
- Si vous obtenez les messages d'erreur suivants au début de l'exécution de
makelmdz_fcm
:
ERROR: bld.cfg: LINE 44:
dir::lib: label not recognised.
ERROR: bld.cfg: LINE 45:
dir::bin: label not recognised.
Vous avez certainement installé la version 1.3 de FCM ou une version plus récente. Installez la version 1.2.
- Si, avec le compilateur PGI Fortran, vous obtenez à la compilation un message du type :
Lowering Error: unexpected data type at load
[ast=0,asttype=0,datatype=0]
Lowering Error: unknown source type for conversion to integer
[ast=4,asttype=1,datatype=0]
PGF90-F-0000-Internal compiler error. Errors in Lowering 6
(libo/AMD64_CICLAD_64x44x40_phylmd_seq/.config/ppsrc/phys/regr_lat_time_climoz_m.f90: 330)
PGF90/x86-64 Linux 7.1-6: compilation aborted
Il s'agit probablement d'un bogue du compilateur, corrigé à partir de la version 9.0.4. (Nous n'avons pas encore cette version du compilateur.)
- Sous Mac OS X, avec les options
-arch gfortran -parallel omp
de makelmdz_fcm
, si vous obtenez de nombreux messages du type :
Undefined symbols:
"___emutls_get_address", referenced from:
...
ld: symbol(s) not found
c'est un problème connu de compilation en OpenMP avec gcc
sous Mac OS X, indépendant de LMDZ. Ce problème apparaît dès qu'on utilise par exemple la directive threadprivate
. Il n'y a pas de solution simple actuellement à ce problème. (Sachez que l'installation et l'exécution fonctionnent normalement en séquentiel.)