* [[http://dune.mathematik.uni-freiburg.de/download.html]] * [[http://www.dune-project.org/doc/installation-notes.html]] ====== recompilation de solver-bench sur judith (CentOS7) ====== dune sur judith, ne pas oublier: [root@judith ~]# yum groupinstall 'Development Tools' * dans /local/apps/src/dune * dernière version du solver-bench: 0.70 * a besoin de : (voir config.log) --with-umfpack=/local/apps/src/dune/UMFPACK --with-petsc=/local/apps/src/dune/petsc-3.1-p5 --with-dune-istl=/local/apps/src/dune/Dune --with-slepc=/local/apps/src/dune/slepc-3.1-p4/linux-gnu-c-opt si on essaie de recompiler UMFPACK en utilisant le script de RK: ./umfpack_installer.sh ./umfpack_simple: error while loading shared libraries: libgfortran.so.1: cannot open shared object file: No such file or directory et: [root@judith ~]# yum provides "*/libgfortran.so.1" compat-libgfortran-41-4.1.2-44.el7.i686 : Compatibility Fortran 95 runtime : library version 4.1.2 Repo : base Matched from: Filename : /usr/lib/libgfortran.so.1 on installe cette lib: [root@judith ~]# yum install compat-libgfortran-41-4.1.2-44.el7 et on lance l'install, voir umfpack_installer.LOG, qui montre plein de différences sur les résultats obtenus, est ce que c'est génant? \\ autre erreur, le do_work.sh ne passe pas à cause du compilo fortran qui n'accepte plus le -R alors qu'avant, il signalait juste l'erreur mais créeait quand même l'exécutable. On enlève le -R de LD_FLAGS et ça passe: Found the following Dune-components: ---------------------------------------- dune-common.............: yes (/local/apps/src/dune/Dune) version 2.0 dune-istl...............: yes (/local/apps/src/dune/Dune) version 2.0 BLAS....................: yes METIS...................: no MPI.....................: no PETSC...................: yes (/local/apps/src/dune/petsc-3.1-p5) ParMETIS................: no SLEPC...................: yes (/local/apps/src/dune/slepc-3.1-p4/linux-gnu-c-opt) SuperLU-DIST............: no SuperLU.................: no UMFPACK.................: yes ensuite, on lance le make \\ autre erreur: /local/apps/src/dune/Dune/include/dune/common/nullptr.hh:25:24: error: conflicting declaration ‘typedef class dune_nullptr_t nullptr_t’ typedef dune_nullptr_t nullptr_t; ^ In file included from /local/apps/src/dune/UMFPACK/AMD/Include/amd.h:45:0, from /local/apps/src/dune/UMFPACK/UMFPACK/Include/umfpack.h:91, from umfpack.hh:34, from mymatrix.hh:78, from benchmarkruntime.cc:35: /usr/lib/gcc/x86_64-redhat-linux/4.8.2/include/stddef.h:432:29: error: ‘nullptr_t’ has a previous declaration as ‘typedefstd::nullptr_t nullptr_t’ typedef decltype(nullptr) nullptr_t; ^ on va essayer de commenter le typedef dans /local/apps/src/dune/Dune/include/dune/common/nullptr.hh on va ajouter -DHAVE_NULLPTR au compilo ça passe, mais il y a un autre problème à l'édition de liens du à petsc qui n'a pas été recompilé on essaie de recompiler petsc, et RK a fourni le script install_petsc_slepc.sh avec all comme argument ça passe toujours pas, on essaie autrement (voir wiki) bash-4.2$ export PETSC_DIR=$PWD bash-4.2$ ./config/configure.py --with-cc=gcc --with-fc=gfortran --with-mpi=0 ... Compilers: C Compiler: gcc -Wall -Wwrite-strings -Wno-strict-aliasing -g3 Fortran Compiler: gfortran -Wall -Wno-unused-variable -g Linkers: Static linker: /bin/ar cr Dynamic linker: /bin/ar X11: Includes: Library: -lX11 BLAS/LAPACK: -llapack -lblas PETSc: PETSC_ARCH: linux-gnu-c-debug PETSC_DIR: /local/apps/src/dune/petsc-3.1-p5 Clanguage: C Scalar type: real Precision: double Memory alignment: 16 shared libraries: disabled dynamic libraries: disabled xxx=========================================================================xxx Configure stage complete. Now build PETSc libraries with: make PETSC_DIR=/local/apps/src/dune/petsc-3.1-p5 PETSC_ARCH=linux-gnu-c-debug all xxx=========================================================================xxx il faut aussi ajouter la lib mpi et Different compiler and linker combinations require different flags. -R works for many GNU compiler and linker combinations, but not all compilers and linkers. In some cases, you may have to instead tell the compiler to pass the -rpath flag to the linker. One typical way to do this is with -Wl,-rpath,/usr/local/lib. dans LD_FLAGS dans do_work.sh pour compiler solver-bench, il a fallu aussi lancer certaines lignes du makefile à la main, ce qui est passé alors que depuis le makefile non libtool: link: gfortran -g -O2 -Wl,-rpath -Wl,/usr/lib64/openmpi/lib --tag=CXX -Wl,-rpath -Wl,/usr/lib64/openmpi/lib -o fortrantest example_F.o writexdr.o -Wl,-rpath -Wl,/usr/lib64/openmpi/lib -L/local/apps/src/dune/petsc-3.1-p5/linux-gnu-c-opt/lib -L/usr/lib64/openmpi/lib -L/local/apps/src/dune/slepc-3.1-p4/linux-gnu-c-opt/lib -L/local/apps/src/dune/petsc-3.1-p5/lib -L/local/apps/src/dune/UMFPACK/UMFPACK/Lib -L/local/apps/src/dune/UMFPACK/AMD/Lib -L/local/apps/src/dune/Dune/lib -lslepc -lpetsc /local/apps/src/dune/Dune/lib/libdunecommon.a -lumfpack -lamd -lm -lmpi -llapack -lblas gfortran: error: unrecognized command line option '--tag=CXX' make[2]: *** [fortrantest] Error 1 make[2]: Leaving directory `/local/apps/src/dune/solver-bench-0.70/examples' il faut aller dans le Makefile du dossier examples/ et virer --tag=CXX des lignes LD...., avec la nouvelle verson du compilo gfortran ça passe sans problème on vérifie sur un des benches: --------------------------------------------------------- RESULTS for `LS-FVM_test1_dkershaw16.xdr' --------------------------------------------------------- Contributor and scheme: LS-FVM Test: 1 Mesh: dkershaw16 --------------------------------------------------------- Problem size: 1) unknowns: 4096 2) non-zero Matrix entries: 97336 3) entries in blocks of size: 1 Solver + Preconditioner: ISTL-CG + ILU (0) (relax. 1) Reduction to achieve: 1e-10 Number of iterations: 409601 Residual : || b - Ax ||_inf = 2.04981 rel. Res.: || b - Ax ||_inf / || b ||_inf = 2.32316 Computed eigenvalues values: lambda_max = -11.2098, lambda_min = -0.00820027 Estimated condition number: lambda_max/lambda_min = 1367 CPU time to solve in seconds: 101.545 Memory used in MB: 4.74609 (program internal) Memory used in MB: 7.9375 (rusage.ru_maxrss) --------------------------------------------------------- à comparer avec [[http://solqual.latp.univ-provence.fr/ref_bench/a5fe7a76a75737a80d2c42e7d64b68e3/]], qui montre qu'on a gagné un facteur 3! | CPU time to solve in seconds| 369.315 | 101.545 | ====== installation sur octopus ====== * [devel1@octopus ~/src]$ tar xzf ../downloads/dune-common-2.0.tar.gz mkdir dune cd dune [devel1@octopus ~/src]$ ./dune-common-2.0/bin/dunecontrol all [devel1@octopus dune]$ ./dune-common-2.0/bin/dunecontrol --opts=config.opts all ====== installer une nouvelle version de solver-bench ====== * dans ''/local/apps/src/dune'' * déplacer l'ancienne version * récuperer le fichier do_work.sh * ne pas oublier de rajouter **-lmpi** dans **LIBS** (voir ci-dessous) ====== benchmark ====== * R.K a installé /local/apps/src/dune/solver-bench-0.1beta * recopié ce dossier dans /home/henry/projects/ * dans solver-bench-0.1beta/src, il y a un programme de bench : [henry@octopus src]$ ./benchruntime Usage: ./benchruntime < UMFPACK = 0 | ISTL-CG = 1 | ISTL-BiCGstab = 2 | OEM-CG = 3 | OEM-GMRES = 4 > Residual: euclidian = 1.21829e-29 infinity = 1.77636e-15 ERROR: UMFPack not available, re-configure with --with-umfpack=PATH_TO_UMFPACK!! UMFPACK: Final errors: euclidian = 0.493997 infinity = 0.561107 Solution needed 0 seconds. avec un autre solveur et une autre matrice: [henry@octopus src]$ ./benchruntime ../../herbin/AKWAK/APPS/TROISD/resultats/matrixfile_1 2 Residual: euclidian = 2.43625e-17 infinity = 3.3555e-09 Reduction to achieve: 3.10816e-19 === BiCGSTABSolver Iter Defect Rate 0 8.85338 0.5 4.34976 0.491311 1 0.477752 0.109834 1.5 0.328951 0.688539 2 0.00710675 0.0216043 2.5 0.00885003 1.2453 3 0.00118422 0.13381 3.5 0.000483821 0.408555 4 2.3323e-05 0.0482058 4.5 4.16061e-06 0.178391 5 1.17866e-06 0.283291 5.5 7.05524e-07 0.59858 6 7.83043e-09 0.0110987 6.5 6.49605e-10 0.082959 7 9.89328e-11 0.152297 7.5 1.2981e-11 0.13121 8 1.51537e-12 0.116738 8.5 1.62378e-13 0.107154 9 3.17988e-14 0.195832 9.5 1.81317e-15 0.0570202 10 2.7893e-16 0.153835 10.5 1.04694e-17 0.0375342 11 2.14529e-18 0.20491 === rate=0.0203082, T=0, TIT=0, IT=11 Difference : 2.91461e-09 ISTL-BiCGstab: Final errors: euclidian = 8.49496e-18 infinity = 1.88764e-09 Solution needed 0 seconds. ===== avec umfpack ===== * ajouter umfpack avec le script fourni par R.K. : [[umfpack_installer.sh]] * umfpack s'installe dans le répertoire courant: /local/apps/src/dune/UMFPACK, en version 5.4.0 * on recompile dune et le module solver-bench avec umfpack * on vérifie que c'est pris en compte: [henry@octopus src]$ ./benchruntime ../../herbin/AKWAK/APPS/TROISD/resultats/matrixfile_1 0 Residual: euclidian = 2.43625e-17 infinity = 3.3555e-09 nR = 93 nC = 93 nZ = 1467 Rows offset is 0 Overall time for UMFPACK solve: 0.001 UMFPACK: Final errors: euclidian = 17.687 infinity = 0.996845 Solution needed 0 seconds. ====== petsc ====== [devel1@octopus petsc-3.1-p4]$ export PETSC_DIR=$PWD [devel1@octopus petsc-3.1-p4]$ ./config/configure.py --with-cc=gcc --with-fc=gfortran ... Compilers: C Compiler: gcc -Wall -Wwrite-strings -Wno-strict-aliasing -g3 Fortran Compiler: gfortran -Wall -Wno-unused-variable -g Linkers: Static linker: /usr/bin/ar cr X11: Includes: Library: -lX11 BLAS/LAPACK: -llapack -lblas PETSc: PETSC_ARCH: linux-gnu-c-debug PETSC_DIR: /local/apps/src/petsc-3.1-p4 Clanguage: C Scalar type: real Precision: double Memory alignment: 16 shared libraries: disabled dynamic libraries: disabled xxx=========================================================================xxx Configure stage complete. Now build PETSc libraries with: make PETSC_DIR=/local/apps/src/petsc-3.1-p4 PETSC_ARCH=linux-gnu-c-debug all xxx=========================================================================xxx [devel1@octopus petsc-3.1-p4]$ [devel1@octopus petsc-3.1-p4]$ make PETSC_DIR=/local/apps/src/petsc-3.1-p4 PETSC_ARCH=linux-gnu-c-debug test Running test examples to verify correct installation C/C++ example src/snes/examples/tutorials/ex19 run successfully with 1 MPI process Fortran example src/snes/examples/tutorials/ex5f run successfully with 1 MPI process Completed test examples ===== nouvelle version de solver-bench (0.45) plus slepc ===== L'exemple ci-dessous est avec le mode debug, voir les fichiers do_work.sh pour le code optimisé bash-3.2$ ./config/configure.py --with-mpi=0 bash-3.2$ make PETSC_DIR=/local/apps/src/dune/petsc-3.1-p5 PETSC_ARCH=linux-gnu-c-debug all bash-3.2$ make PETSC_DIR=/local/apps/src/dune/petsc-3.1-p5 PETSC_ARCH=linux-gnu-c-debug test bash-3.2$ export PETSC_DIR=/local/apps/src/dune/petsc-3.1-p5 bash-3.2$ export PETSC_ARCH=linux-gnu-c-debug bash-3.2$ export SLEPC_DIR=/local/apps/src/dune/slepc-3.1-p4 bash-4.2$ cd ../slepc-3.1-p4 bash-3.2$ ./configure bash-3.2$ make bash-3.2$ make test Running test examples to verify correct installation C/C++ example src/examples/ex1 run successfully with 1 MPI process Fortran example src/examples/ex1f run successfully with 1 MPI process Completed test examples après, on essaie: bash-3.2$ ./installdune.sh solver-comp but i saw in the messages that petsc and slepc weren't found: Found the following Dune-components: ---------------------------------------- dune-common.............: yes (/local/apps/src/dune/Dune) version 2.0 dune-istl...............: yes (/local/apps/src/dune/Dune) version 2.0 BLAS....................: yes METIS...................: no MPI.....................: no PETSC...................: no ParMETIS................: no SLEPC...................: no SuperLU-DIST............: no SuperLU.................: no UMFPACK.................: yes (/local/apps/src/dune/UMFPACK) ---------------------------------------- See ./configure --help and config.log for reasons why a component wasn't found si on édite config.log: ./configure CXX=g++ CXXFLAGS=-O3 -funroll-loops -finline-functions -DNDEBUG \ --prefix=/local/apps/src/dune/Dune \ --enable-parallel \ --disable-documentation --disable-compilercheck --disable-mpiruntest \ --with-umfpack=/local/apps/src/dune/UMFPACK \ --with-dune-common=/local/apps/src/dune/Dune --with-dune-istl=/local/apps/src/dune/Dune alors que pour la derneire version: ./configure CXX=g++ CXXFLAGS="-O3 -funroll-loops -finline-functions -DNDEBUG" \ --prefix=/local/apps/src/dune/Dune \ --disable-documentation --disable-compilercheck --disable-mpiruntest \ --with-umfpack=/local/apps/src/dune/UMFPACK \ --with-petsc=/local/apps/src/petsc-3.1-p5 \ --with-dune-common=/local/apps/src/dune/Dune \ --with-dune-istl=/local/apps/src/dune/Dune \ CPPFLAGS="-I/local/apps/src/petsc-3.1-p5/linux-gnu-c-debug/include -I/usr/lib/openmpi/1.4-gcc/include" \ LDFLAGS="-L/local/apps/src/petsc-3.1-p5/linux-gnu-c-debug/lib" et ca passe donc avec la ligne: ./configure CXX=g++ CXXFLAGS="-O3 -funroll-loops -finline-functions -DNDEBUG" --prefix=/local/apps/src/dune/Dune --disable-documentation --disable-compilercheck --disable-mpiruntest --with-umfpack=/local/apps/src/dune/UMFPACK --with-petsc=/local/apps/src/dune/petsc-3.1-p5 --with-dune-common=/local/apps/src/dune/Dune --with-dune-istl=/local/apps/src/dune/Dune CPPFLAGS="-I/local/apps/src/dune/petsc-3.1-p5/linux-gnu-c-debug/include -I/usr/lib/openmpi/1.4-gcc/include" LDFLAGS="-L/local/apps/src/dune/petsc-3.1-p5/linux-gnu-c-debug/lib" ne pas oublier l'include openmpi, car il a besin de mpi.h alors qu'on a demande de compiler petsc sans mpi pour rajouter slepc: ./configure CXX=g++ CXXFLAGS="-O3 -funroll-loops -finline-functions -DNDEBUG" \ --prefix=/local/apps/src/dune/Dune \ --disable-documentation --disable-compilercheck --disable-mpiruntest \ --with-umfpack=/local/apps/src/dune/UMFPACK \ --with-petsc=/local/apps/src/dune/petsc-3.1-p5 \ --with-dune-common=/local/apps/src/dune/Dune \ --with-dune-istl=/local/apps/src/dune/Dune \ --with-slepc=/local/apps/src/dune/slepc-3.1-p4/linux-gnu-c-debug \ --with-slepc-includedir=/local/apps/src/dune/slepc-3.1-p4/include \ --with-slepc-libdir=/local/apps/src/dune/slepc-3.1-p4/linux-gnu-c-debug/lib \ CPPFLAGS="-I/local/apps/src/dune/petsc-3.1-p5/linux-gnu-c-debug/include -I/usr/lib/openmpi/1.4-gcc/include -I/local/apps/src/dune/slepc-3.1-p4/include" \ LDFLAGS="-L/local/apps/src/dune/petsc-3.1-p5/linux-gnu-c-debug/lib -L/usr/lib64/openmpi/1.4-gcc/lib" \ LIBS="-lmpi -lX11" ... Found the following Dune-components: ---------------------------------------- dune-common.............: yes (/local/apps/src/dune/Dune) version 2.0 dune-istl...............: yes (/local/apps/src/dune/Dune) version 2.0 BLAS....................: yes METIS...................: no MPI.....................: no PETSC...................: yes (/local/apps/src/dune/petsc-3.1-p5) ParMETIS................: no SLEPC...................: yes (/local/apps/src/dune/slepc-3.1-p4/linux-gnu-c-debug) SuperLU-DIST............: no SuperLU.................: no UMFPACK.................: yes (/local/apps/src/dune/UMFPACK) ---------------------------------------- See ./configur Attention, cette compilation échoue, il faut enlever LIBS, lancer le configure, et hacker manuellement les 2 Makefile pour rajouter ces libs! bash-3.2$ diff /tmp/Makefile src/Makefile 225c225 < LIBS = -L/local/apps/src/dune/Dune/lib -ldunecommon -L/local/apps/src/dune/Dune/lib -ldunecommon ${DUNEMPILIBS} -L/local/apps/src/dune/Dune/lib -ldunecommon -L/local/apps/src/dune/Dune/lib -ldunecommon -lm -lumfpack -lamd -lpetsc -lslepc -llapack -lblas --- > LIBS = -L/local/apps/src/dune/Dune/lib -ldunecommon -L/local/apps/src/dune/Dune/lib -ldunecommon ${DUNEMPILIBS} -L/local/apps/src/dune/Dune/lib -ldunecommon -L/local/apps/src/dune/Dune/lib -ldunecommon -lm -lumfpack -lamd -lpetsc -lslepc -llapack -lblas -lmpi