====== Site ======
[[https://computation.llnl.gov/casc/hypre/|Lien externe]]
====== Version 1.6.0 ======
* installée sur nemo
* /usr/local/hypre-1.6.0 compilée avec Mpich 1.2.6
* /local/henry/hypre-1.6.0-amd64/src/hypre compilé avec Sun MPI
* les exemples et la doc sont accessibles: /local/henry/hypre-1.6.0/src et /local/henry/hypre-1.6.0/docs
====== Version 2.0.0 ======
* installé sur nemo
^ chemin ^ précision ^ script pour recompiler ^ features ^ compilateurs ^ MPI ^
| /local/henry/hypre-2.0.0/src/hypre/lib | 32bits | /local/henry/hypre-2.0.0/src/do_work.sh | sans babel | sunstudio | Sun HPC 6.0 |
| /local/apps/lib/hypre/2.0.0/openmpi/sun/1.3.3/ | 32bits | /local/apps/src/hypre-2.0.0/src/do_work32_openmpi.sh | ? | SS12u1 | HPC8.2 (openmpi de sun) |
| /local/apps/debug | 32bits | /local/apps/src/hypre-2.0.0/src/do_work32_debug.sh | avec babel | studio12 | SUNWhpc |
| /local/apps/lib | 32bits | /local/apps/src/hypre-2.0.0/src/do_work32.sh | avec babel | studio12 | SUNWhpc |
| /local/apps/lib/amd64/ss12 | 64bits | /local/apps/src/ss12/hypre-2.0.0/src/do_work.sh | sans babel? | sunstudio 12 | Sun HPC 6.0 |
| /local/apps/lib/amd64/opt0 | 64bits | /local/apps/src/hypre-2.0.0/src/do_work_opt0.sh | sans babel | studio12 | SUNWhpc |
| /local/apps/hypre/2.0.0/hpc6/lib/amd64 | 64bits | /local/apps/src/hypre-2.0.0/src/do_work.sh | avec babel | studio12 | HPC6.0 |
| /local/apps/hypre/2.0.0/hpc6/lib/amd64/opt0 | 64bits | /local/apps/src/hypre-2.0.0/src/do_workopt0.sh | a cause de l'underscore dans l'interface C/fortran, avec babel | studio12 | HPC6.0 |
| /local/apps/lib/hypre/2.0.0/openmpi/sun/1.3.3/amd64 | 64bits | /local/apps/src/hypre-2.0.0/src/do_work64_openmpi.sh | ? | SS12u1 | HPC8.2 (openmpi de sun) |
| | | /local/apps/src/hypre-2.2.0b/src/do_work_opt0.sh | | | |
===== Exemples =====
* les exemples dans /local/apps/src/hypre-2.0.0/src/examples
* le configure se fait à partir du script
[[http://www.latp.univ-mrs.fr/~henry/Solaris/hypre/do_work32.sh|/local/apps/src/hypre-2.0.0/do_work32.sh]] (32 bits par defaut), et [[http://www.latp.univ-mrs.fr/~henry/Solaris/hypre/do_work.sh|/local/apps/src/hypre-2.0.0/do_work.sh]] (en 64 bits)
* penser à utiliser le compilateur Studio 12, avec la commande
module load ss12
Le **path** idéal devrait au moins contenir:
PATH=/opt/studio12/SUNWspro/bin:/usr/bin::/usr/local/wrapper/bin:/opt/SUNWhpc/bin
* [[hypre_patches|patches]]
==== ex1 ====
* testé l'exemple ex1 dans le repertoire exemples (utiliser Makefile pour une version 32 bits et M64 pour 64 bits):
nemo-henry% mprun -np 2 ex1
: 1.800000e+01
Iters ||r||_C conv.rate ||r||_C/||b||_C
----- ------------ --------- ------------
1 2.509980e+00 0.591608 5.916080e-01
2 9.888265e-01 0.393958 2.330686e-01
3 4.572262e-01 0.462393 1.077693e-01
4 1.706474e-01 0.373223 4.022197e-02
5 7.473022e-02 0.437922 1.761408e-02
6 3.402624e-02 0.455321 8.020061e-03
7 1.214929e-02 0.357057 2.863616e-03
8 3.533113e-03 0.290808 8.327628e-04
9 1.343893e-03 0.380371 3.167586e-04
10 2.968745e-04 0.220906 6.997400e-05
11 5.329671e-05 0.179526 1.256215e-05
12 7.308483e-06 0.137128 1.722626e-06
13 7.411552e-07 0.101410 1.746920e-07
==== ex5 ====
avec SS12u1 et HPC6.0
mpcc -g -m64 -I$HYPRE/include -DHAVE_CONFIG_H -DHYPRE_TIMING -c ex5.c
mpcc -m64 -fast -fsimple=0 -fns=no -xnolibmopt -o ex5 ex5.o -g -L$HYPRE/lib -lHYPRE -lm -lmpi_mt -lfsu -lsunmath -lm -lmtsk
mprun -np 4 ex5
==== ex5b77 ====
en 64 bits:
nemo-henry% module purge; module load hypre2.0.0_hpc6
nemo-henry% mpf77 -g -m64 -dalign -I$HYPRE/include -DHAVE_CONFIG_H -DHYPRE_TIMING -c ex5b77.f
nemo-henry% mpf77 -v -m64 -fast -fsimple=0 -fns=no -xnolibmopt -xalias=actual -dalign -o ex5b77 ex5b77.o -L$HYPRE/lib -lbHYPREClient-C -lbHYPREClient-CX -lbHYPREClient-F -lbHYPRE -lsidl -ldl -lxml2 -lmpi -g -R$HYPRE/lib -L$HYPRE/lib -lHYPRE -lmpi -xlic_lib=sunperf
====== Modifications ======
* récupérer le répertoire exemples et modifier le Makefile:
nemo-henry% diff Makefile-ori Makefile
4,7c4,7
< CC = mpicc
< F77 = mpif77
< CXX = mpiCC
< HYPRE_DIR = ../hypre
---
> CC = mpcc
> F77 = mpf77
> CXX = mpCC
> HYPRE_DIR = /local/apps/lib
12c12
< COPTS = -g -pedantic -Wall
---
> COPTS = -g #-pedantic -Wall
27,28c27,28
< LIBS = -L$(HYPRE_DIR)/lib -lHYPRE -lg2c -lm
< LFLAGS = $(LINKOPTS) $(LIBS) -lstdc++
---
> LIBS = -L$(HYPRE_DIR)/lib -lHYPRE -lm -lmpi_mt -lfsu -lsunmath -lm -lmtsk
> LFLAGS = $(LINKOPTS) $(LIBS)
36c36,38
< -lsidl -ldl -lxml2
---
> -lsidl -ldl -lxml2 \
> -L/opt/SUNWhpc/lib \
> -lmpi
et en 64 bits:
> diff Makefile ~/src/hypre-2.0.0/src/examples/Makefile.ori
4,7c4,7
< CC = mpcc
< F77 = mpf77
< CXX = mpCC
< HYPRE_DIR = /local/apps/lib/amd64
---
> CC = mpicc
> F77 = mpif77
> CXX = mpiCC
> HYPRE_DIR = ../hypre
12c12
< COPTS = -g -m64 #-pedantic -Wall
---
> COPTS = -g -pedantic -Wall
27,28c27,28
< LIBS = -R/opt/SUNWhpc/lib/amd64 -L/opt/SUNWhpc/lib/amd64 -L$(HYPRE_DIR)/lib -lHYPRE -lm -lmpi_mt -lfsu -lsunmath -lm -lmtsk
< LFLAGS = $(LINKOPTS) $(LIBS)
---
> LIBS = -L$(HYPRE_DIR)/lib -lHYPRE -lg2c -lm
> LFLAGS = $(LINKOPTS) $(LIBS) -lstdc++
36,38c36
< -lsidl -ldl -lxml2 \
< -L/opt/SUNWhpc/lib/amd64 \
< -lmpi
---
> -lsidl -ldl -lxml2
dans le répertoire lapack:
> diff lapack/Makefile.ori lapack/Makefile 104c104,105
< xerbla.c
---
> xerbla.c\
> dlamch.c
112c113
< all: ${OBJS} dlamch.o
---
> all: ${OBJS}
127,129d127
< dlamch.o : dlamch.c ${LAPACK_HEADERS}
< ${CC} -c dlamch.c
<
====== problèmes ======
===== version 2.2.0b zero-sized struct/union cc: acomp failed =====
cette erreur:
mpcc -DHAVE_CONFIG_H -I. -I. -I. -I/usr/include/libxml2 -I/usr/java/include -I/usr/java/include/solaris -I./../sidlx -xO3 -xdepend -xprefetch=auto -xprefetch_level=3 -xvector -ftrap=common -m64 -D_REENTRANT -c sidl_rmi_InstanceRegistry_Impl.c -KPIC -DPIC -o .libs/sidl_rmi_InstanceRegistry_Impl.o
"sidl_rmi_InstanceRegistry_Impl.h", line 75: zero-sized struct/union
cc: acomp failed for sidl_rmi_InstanceRegistry_Impl.c
make[3]: *** [sidl_rmi_InstanceRegistry_Impl.lo] Error 1
est [[http://forum.java.sun.com/thread.jspa?threadID=5182898|prise en compte]] dans Studio 12, donc il faut ajouter -features=extensions
===== interface babel ne compile pas =====
Pour compiler avec l'interface babel, il suffit d'ajouter "--with-babel" sur la ligne configure, dans do_work.sk.
Mais la compilation échoue à cause du problème suivant:
"/local/apps/src/hypre-2.0.0/src/babel-runtime/sidl/sidl_io_Serializer.h", line 1411: Error: 'sidl_io_Serializer__connectI' referenced in #pragma should be global and previously declared.
This error is due to these lines:
#pragma weak sidl_io_Serializer__connectI
struct sidl_io_Serializer__object*
sidl_io_Serializer__rmicast(...);
if we invert the two preceding lines:
struct sidl_io_Serializer__object*
sidl_io_Serializer__rmicast(...);
#pragma weak sidl_io_Serializer__connectI
C'est ce qui est expliqué [[http://forum.java.sun.com/thread.jspa?threadID=5251468&tstart=0|Error with #pragma weak ]], mais faire cette modification manuellement est trop long (plus de 20 fichiers!)
Pour l'instant, pas d'interface babel...
Les hacks ont été faits par [[http://www.latp.univ-mrs.fr/~jobic/dokuwiki/doku.php?id=hypre#interface_babel|Yann]]
\\
Attention, pour utiliser les libs optimisées du constructeur (sun perflib), ne pas oublier les lignes suivantes en argument du configure:
> --with-blas-libs="sunperf" \
> --with-blas-lib-dirs="/opt/SUNWhpc/lib/amd64" \
> --with-lapack-libs="sunperf" \
> --with-lapack-lib-dirs="/opt/SUNWhpc/lib/amd64" \
===== problème avec underscore =====
quand a on ce type d'erreur:
Undefined first referenced
symbol in file
mpi_finalize_ benchencours.o
bhypre_mpicommunicator_createf_f_ benchencours.o
bhypre_boomeramg_setoperator_f_ benchencours.o
bhypre_ijparcsrmatrix_destroy_f_ benchencours.o
cela signifie qu'une ligne de compilation
====== Utilisation de l'interface babel ======
Comme cela manque d'exemples, il faut fouiller dans les sources de hypre. On peut s'inspirer de:
* src/test/f77_ij_b.f