From d5604f5c2284d6a0d44912b7ad03fbae3b8a7334 Mon Sep 17 00:00:00 2001 From: sunlock0653 Date: Tue, 3 Dec 2024 14:23:10 +0800 Subject: [PATCH 1/2] update --- CONTRIBUTING.md | 2 +- .../openeuler-gcc-9.3.0-hmpi1-mumps-5.1.2.def | 35 + ...25\346\212\245\345\221\212\343\200\213.md" | 845 ++++++++++++++++++ ...15\346\214\207\345\215\227\343\200\213.md" | 375 ++++++++ .../hpc-sdk/examples/kml/math/README_en.md | 2 +- .../testdemo/code_migration/code/file_lock.c | 2 +- .../hpc-sdk/examples/kml/blas/README_en.md | 2 +- init.sh | 1 + package/libvdwxc/0.4.1/install.sh | 9 + package/netcdf/4.7.0/clang/install.sh | 2 +- .../optimized-routines/20.02/clang/install.sh | 2 +- proxy.sh | 52 +- src/dataService.py.fast | 218 +++++ src/dataService.py.ori | 218 +++++ .../CP2K/7.1/bisheng/data.CP2K.arm.cpu.config | 19 +- .../8.10.3/bisheng/data.abinit.arm.gpu.config | 11 +- templates/blat/35.1/data.blat.arm.cpu.config | 53 ++ .../10.3/data.octopus.arm.kpgcc.cpu.config | 2 +- .../11.4/data.octopus.arm.kgcc.cpu.config | 99 ++ .../palabos/2.1/data.palabos.arm.cpu.config | 53 ++ .../2016/data.randfold.arm.cpu.config | 52 ++ .../star/2.7.1a/data.blat.arm.cpu.config | 54 ++ .../wrf/4.3.3/bisheng/data.wrf.arm.cpu.config | 72 ++ templates/wrf/4.3.3/wrf.4.3.config | 126 ++- 24 files changed, 2228 insertions(+), 78 deletions(-) create mode 100644 container/mumps/openeuler-gcc-9.3.0-hmpi1-mumps-5.1.2.def create mode 100644 "doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\346\265\213\350\257\225\346\212\245\345\221\212\343\200\213.md" create mode 100644 "doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\347\247\273\346\244\215\346\214\207\345\215\227\343\200\213.md" create mode 100644 package/libvdwxc/0.4.1/install.sh create mode 100644 src/dataService.py.fast create mode 100644 src/dataService.py.ori create mode 100644 templates/blat/35.1/data.blat.arm.cpu.config create mode 100644 templates/octopus/11.4/data.octopus.arm.kgcc.cpu.config create mode 100644 templates/palabos/2.1/data.palabos.arm.cpu.config create mode 100644 templates/randfold/2016/data.randfold.arm.cpu.config create mode 100644 templates/star/2.7.1a/data.blat.arm.cpu.config create mode 100644 templates/wrf/4.3.3/bisheng/data.wrf.arm.cpu.config diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 203558a..0ae5e1a 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -48,7 +48,7 @@ git checkout -b new_branch git add . -git commit --no-verify -m "Add XXX function" +git commit --no-verif -m "Add XXX function" git push origin new_branch diff --git a/container/mumps/openeuler-gcc-9.3.0-hmpi1-mumps-5.1.2.def b/container/mumps/openeuler-gcc-9.3.0-hmpi1-mumps-5.1.2.def new file mode 100644 index 0000000..2567b31 --- /dev/null +++ b/container/mumps/openeuler-gcc-9.3.0-hmpi1-mumps-5.1.2.def @@ -0,0 +1,35 @@ +BootStrap: docker +From: openeuler/openeuler + +%environment + source /etc/profile || true + source /etc/profile.d/modules.sh + cd /hpcrunner + source env.sh + +%post + # Install the necessary development environment + yum install -y environment-modules git flex wget vim tar unzip coreutils + # Install base gcc + yum install -y gcc gcc-c++ gcc-gfortran glibc-devel make libgfortran + source /etc/profile || true + git config --global http.sslVerify false + git clone https://gitee.com/zubinshuo2/hpcrunner.git -b math + cd hpcrunner + source ./init.sh + ./jarvis -i + # Switch config + ./jarvis -use templates/mumps/5.1.2/data.mumps.amd.cpu.config + # downloads mumps + ./jarvis -d + # install dependency + ./jarvis -dp + # build mumps + ./jarvis -b + # run mumps + ./jarvis -r + # clean downloads directory + rm -rf downloads + +%labels + Author Zu \ No newline at end of file diff --git "a/doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\346\265\213\350\257\225\346\212\245\345\221\212\343\200\213.md" "b/doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\346\265\213\350\257\225\346\212\245\345\221\212\343\200\213.md" new file mode 100644 index 0000000..d030c09 --- /dev/null +++ "b/doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\346\265\213\350\257\225\346\212\245\345\221\212\343\200\213.md" @@ -0,0 +1,845 @@ +# 《基于openEuler的mumps软件测试报告》 + +## 1. 规范性自检 + +对项目使用fprettify对文件进行格式化 + +fprettify是一个现代Fortran代码的自动格式化程序,它采用严格的空白格式,用Python编写。 + +对于当前项目,检查代码规范性,可以通过使用fprettify对所有源码进行重新格式化,然后使用git工具查看文件修改。 + +### 1.1 选择统计文件类型 + +统计项目文件类型及其文件数量,通过Python脚本自动进行统计并进行排序: + +```python +# -*- coding: utf-8 -*- + +import os + +me = __file__ +print("分析文件夹:" + os.getcwd()) + +def getAllFiles(targetDir): + files = [] + listFiles = os.listdir(targetDir) + for file in listFiles: + path = os.path.join(targetDir, file) + if os.path.isdir(path): + files.extend(getAllFiles(path)) + elif os.path.isfile(path) and path != me: + files.append(path) + return files + +all_files=getAllFiles(os.curdir) +type_dict=dict() + +for file in all_files: + if os.path.isdir(file): + type_dict.setdefault("文件夹", 0) + type_dict["文件夹"]+=1 + else: + ext=os.path.splitext(file)[1] + type_dict.setdefault(ext, 0) + type_dict[ext]+=1 + +type_dict["空"] = type_dict.pop("") +sort_dict = sorted(type_dict.items(), key = lambda a: a[1], reverse = True) + +for each_type in sort_dict: + print("当前文件夹下共有后缀名为[%s]的文件%d个" %(each_type[0], each_type[1])) +``` + +在mumps项目根目录下运行,得到统计结果如下(排除自身): + +```shell +/root/MUMPS_5.1.2 +当前文件夹下共有[]的文件579个 +当前文件夹下共有[.F]的文件385个 +当前文件夹下共有[.h]的文件40个 +当前文件夹下共有[.c]的文件36个 +当前文件夹下共有[.sample]的文件13个 +当前文件夹下共有[.SEQ]的文件12个 +当前文件夹下共有[.m]的文件11个 +当前文件夹下共有[.PAR]的文件9个 +当前文件夹下共有[.sce]的文件6个 +当前文件夹下共有[.sci]的文件5个 +当前文件夹下共有[.xml]的文件3个 +当前文件夹下共有[.html]的文件3个 +当前文件夹下共有[.pdf]的文件1个 +当前文件夹下共有[.f]的文件1个 +当前文件夹下共有[.dtd]的文件1个 +当前文件夹下共有[.htm]的文件1个 +当前文件夹下共有[.generic]的文件1个 +当前文件夹下共有[.inc]的文件1个 +当前文件夹下共有[.mat]的文件1个 +``` + +主要源码文件后缀名为`F`,`h`,`c`以及部分C语言文件。由此判断该项目主要语言为C++/C。 + +### 1.2 统计源码代码量 + +统计行数: + +```shell +find ./ -regex ".*\.F\|.*\.cpp|.*\.c" | xargs wc -l +``` + +行数统计后结果输出如下: + +```shell +350231 total +``` + +### 1.3 统计不符合要求的总行数 + +对源代码文件(后缀名为`F`,`h`,`c`)进行fprettify代码样式格式化,格式化结果如下: + +```shell +[root@host- src]# fprettify -r src/ +[root@host- src]# git commit -m "fomat update" +[master b0a0ea8] fomat update + 44 files changed, 1044 insertions(+), 1044 deletions(-) + rewrite src/ana_omp_m.F (97%) + rewrite src/cfac_omp_m.F (97%) + rewrite src/cfac_process_bf.F (97%) + rewrite src/clr_type.F (94%) + rewrite src/cmumps_iXamax.F (99%) + rewrite src/cmumps_save_restore.F (97%) + rewrite src/cmumps_save_restore_files.F (97%) + rewrite src/cmumps_struc_def.F (97%) + rewrite src/comp_tps_m.F (97%) + rewrite src/cstatic_ptr_m.F (71%) + rewrite src/dfac_omp_m.F (97%) + rewrite src/dfac_process_bf.F (97%) + rewrite src/dlr_type.F (94%) + rewrite src/dmumps_iXamax.F (98%) + rewrite src/dmumps_save_restore.F (97%) + rewrite src/dmumps_save_restore_files.F (97%) + rewrite src/dmumps_struc_def.F (97%) + rewrite src/domp_tps_m.F (97%) + rewrite src/dstatic_ptr_m.F (70%) + rewrite src/fac_future_niv2_mod.F (97%) + rewrite src/fac_ibct_data_m.F (97%) + rewrite src/mumps_comm_ibcast.F (97%) + rewrite src/mumps_l0_omp_m.F (90%) + rewrite src/mumps_type_size.F (92%) + rewrite src/mumps_version.F (98%) + rewrite src/omp_tps_common_m.F (97%) + rewrite src/sfac_omp_m.F (97%) + rewrite src/sfac_process_bf.F (97%) + rewrite src/slr_type.F (94%) + rewrite src/smumps_iXamax.F (98%) + rewrite src/smumps_save_restore.F (97%) + rewrite src/smumps_save_restore_files.F (97%) + rewrite src/smumps_struc_def.F (97%) + rewrite src/somp_tps_m.F (97%) + rewrite src/sstatic_ptr_m.F (72%) + rewrite src/zfac_omp_m.F (97%) + rewrite src/zfac_process_bf.F (97%) + rewrite src/zlr_type.F (94%) + rewrite src/zmumps_iXamax.F (99%) + rewrite src/zmumps_save_restore.F (97%) + rewrite src/zmumps_save_restore_files.F (97%) + rewrite src/zmumps_struc_def.F (97%) + rewrite src/zomp_tps_m.F (97%) + rewrite src/zstatic_ptr_m.F (70%) +``` + +### 1.4.统计结果 + +综上信息,项目中代码规范性自检检查结果为 + +通过率 : 99.702% 1-1044/350231*100% + +不通过率 : 0.628% 1044/166350*100% + +## 2. 功能性测试 + +### 2.1 测试案例 + +mumps提供了运行的不同example,需要用户在编译后自行进入各个测试案例目录运行。部分测试程序需要外部输入文件,mumps已在对应目录提供。 + +example文件如下: + +```shell +~/MUMPS_5.1.2 |master ✓| → tree examples/ +examples/ +├── c_example.c +├── csimpletest.F +├── dsimpletest.F +├── input_simpletest_cmplx +├── input_simpletest_real +├── Makefile +├── multiple_arithmetics_example.F +├── README +├── ssimpletest.F +└── zsimpletest.F +``` + +案例测试程序对应程序如下: + +```fortran +C +C This file is part of MUMPS 5.1.2, released +C on Mon Oct 2 07:37:01 UTC 2017 +C + PROGRAM MUMPS_TEST + IMPLICIT NONE + INCLUDE 'mpif.h' + INCLUDE 'smumps_struc.h' + TYPE (SMUMPS_STRUC) mumps_par + INTEGER IERR, I + INTEGER(8) I8 + CALL MPI_INIT(IERR) +C Define a communicator for the package. + mumps_par%COMM = MPI_COMM_WORLD +C Initialize an instance of the package +C for L U factorization (sym = 0, with working host) + mumps_par%JOB = -1 + mumps_par%SYM = 0 + mumps_par%PAR = 1 + CALL SMUMPS(mumps_par) + IF (mumps_par%INFOG(1).LT.0) THEN + WRITE(6,'(A,A,I6,A,I9)') " ERROR RETURN: ", + & " mumps_par%INFOG(1)= ", mumps_par%INFOG(1), + & " mumps_par%INFOG(2)= ", mumps_par%INFOG(2) + GOTO 500 + END IF +C Define problem on the host (processor 0) + IF ( mumps_par%MYID .eq. 0 ) THEN + READ(5,*) mumps_par%N + READ(5,*) mumps_par%NNZ + ALLOCATE( mumps_par%IRN ( mumps_par%NNZ ) ) + ALLOCATE( mumps_par%JCN ( mumps_par%NNZ ) ) + ALLOCATE( mumps_par%A( mumps_par%NNZ ) ) + ALLOCATE( mumps_par%RHS ( mumps_par%N ) ) + DO I8 = 1, mumps_par%NNZ + READ(5,*) mumps_par%IRN(I8),mumps_par%JCN(I8),mumps_par%A(I8) + END DO + DO I = 1, mumps_par%N + READ(5,*) mumps_par%RHS(I) + END DO + END IF +C Call package for solution + mumps_par%JOB = 6 + CALL SMUMPS(mumps_par) + IF (mumps_par%INFOG(1).LT.0) THEN + WRITE(6,'(A,A,I6,A,I9)') " ERROR RETURN: ", + & " mumps_par%INFOG(1)= ", mumps_par%INFOG(1), + & " mumps_par%INFOG(2)= ", mumps_par%INFOG(2) + GOTO 500 + END IF +C Solution has been assembled on the host + IF ( mumps_par%MYID .eq. 0 ) THEN + WRITE( 6, * ) ' Solution is ',(mumps_par%RHS(I),I=1,mumps_par%N) + END IF +C Deallocate user data + IF ( mumps_par%MYID .eq. 0 )THEN + DEALLOCATE( mumps_par%IRN ) + DEALLOCATE( mumps_par%JCN ) + DEALLOCATE( mumps_par%A ) + DEALLOCATE( mumps_par%RHS ) + END IF +C Destroy the instance (deallocate internal data structures) + mumps_par%JOB = -2 + CALL SMUMPS(mumps_par) + IF (mumps_par%INFOG(1).LT.0) THEN + WRITE(6,'(A,A,I6,A,I9)') " ERROR RETURN: ", + & " mumps_par%INFOG(1)= ", mumps_par%INFOG(1), + & " mumps_par%INFOG(2)= ", mumps_par%INFOG(2) + GOTO 500 + END IF + 500 CALL MPI_FINALIZE(IERR) + STOP + END +``` + +输入文件: + +```shell +5 :N +12 :NZ +1 2 3.0 +2 3 -3.0 +4 3 2.0 +5 5 1.0 +2 1 3.0 +1 1 2.0 +5 2 4.0 +3 4 2.0 +2 5 6.0 +3 2 -1.0 +1 3 4.0 +3 3 1.0 :values +20.0 +24.0 +9.0 +6.0 +13.0 :RHS +``` + +### 2.2 功能测试 + +mumps仅作为一个框架,只生成对应的库文件和头文件,而在examples目录中提供了各种方向的测试程序,需要用户在编译后自行进入各个测试案例目录运行。部分测试程序需要外部输入文件,mumps已在对应目录提供。 + +```shell +make all +``` + +- 进行测试 + +```shell +# 测试命令 +#!/bin/bash + +export OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 +MPIRUN="mpirun -np 3 --mca plm_rsh_agent sh --mca opal_warn_on_missing_libcuda 0 --oversubscribe" +${MPIRUN} ./ssimpletest < input_simpletest_real +``` + +- 测试结果 + +```shell +Entering SMUMPS 5.1.2 with JOB, N, NNZ = 6 5 12 + executing #MPI = 3, without OMP + + ================================================= + ================================================= +L U Solver for unsymmetric matrices +Type of parallelism: Working host + + ****** ANALYSIS STEP ******** + + ... Structural symmetry (in percent)= 92 + Average density of rows/columns = 2 + ... No column permutation + Ordering based on AMF + +Leaving analysis phase with ... +INFOG(1) = 0 +INFOG(2) = 0 + -- (20) Number of entries in factors (estim.) = 15 + -- (3) Storage of factors (REAL, estimated) = 15 + -- (4) Storage of factors (INT , estimated) = 65 + -- (5) Maximum frontal size (estimated) = 3 + -- (6) Number of nodes in the tree = 3 + -- (32) Type of analysis effectively used = 1 + -- (7) Ordering option effectively used = 2 +ICNTL(6) Maximum transversal option = 0 +ICNTL(7) Pivot order option = 7 +Percentage of memory relaxation (effective) = 20 +Number of level 2 nodes = 0 +Number of split nodes = 0 +RINFOG(1) Operations during elimination (estim)= 1.900D+01 + ** Rank of proc needing largest memory in IC facto : 0 + ** Estimated corresponding MBYTES for IC facto : 1 + ** Estimated avg. MBYTES per work. proc at facto (IC) : 1 + ** TOTAL space in MBYTES for IC factorization : 3 + ** Rank of proc needing largest memory for OOC facto : 0 + ** Estimated corresponding MBYTES for OOC facto : 1 + ** Estimated avg. MBYTES per work. proc at facto (OOC) : 1 + ** TOTAL space in MBYTES for OOC factorization : 3 + ELAPSED TIME IN ANALYSIS DRIVER= 0.0022 + + ****** FACTORIZATION STEP ******** + + + GLOBAL STATISTICS PRIOR NUMERICAL FACTORIZATION ... + NUMBER OF WORKING PROCESSES = 3 + OUT-OF-CORE OPTION (ICNTL(22)) = 0 + REAL SPACE FOR FACTORS = 15 + INTEGER SPACE FOR FACTORS = 65 + MAXIMUM FRONTAL SIZE (ESTIMATED) = 3 + NUMBER OF NODES IN THE TREE = 3 + MEMORY ALLOWED (MB -- 0: N/A ) = 0 + RELATIVE THRESHOLD FOR PIVOTING, CNTL(1) = 0.1000D-01 + Convergence error after scaling for ONE-NORM (option 7/8) = 0.38D+00 + Maximum effective relaxed size of S = 475 + Average effective relaxed size of S = 469 + ELAPSED TIME FOR MATRIX DISTRIBUTION = 0.0000 + ** Memory relaxation parameter ( ICNTL(14) ) : 20 + ** Rank of processor needing largest memory in facto : 0 + ** Space in MBYTES used by this processor for facto : 1 + ** Avg. Space in MBYTES per working proc during facto : 1 + + ELAPSED TIME FOR FACTORIZATION = 0.0023 + Maximum effective space used in S (KEEP8(67)) 12 + Average effective space used in S (KEEP8(67)) 5 + ** EFF Min: Rank of processor needing largest memory : 0 + ** EFF Min: Space in MBYTES used by this processor : 1 + ** EFF Min: Avg. Space in MBYTES per working proc : 1 + + GLOBAL STATISTICS + RINFOG(2) OPERATIONS IN NODE ASSEMBLY = 2.000D+00 + ------(3) OPERATIONS IN NODE ELIMINATION= 1.900D+01 + INFOG (9) REAL SPACE FOR FACTORS = 15 + INFOG(10) INTEGER SPACE FOR FACTORS = 65 + INFOG(11) MAXIMUM FRONT SIZE = 3 + INFOG(29) NUMBER OF ENTRIES IN FACTORS = 15 + INFOG(12) NUMBER OF OFF DIAGONAL PIVOTS = 0 + INFOG(13) NUMBER OF DELAYED PIVOTS = 0 + INFOG(14) NUMBER OF MEMORY COMPRESS = 0 + ELAPSED TIME IN FACTORIZATION DRIVER= 0.0031 + + + ****** SOLVE & CHECK STEP ******** + + + STATISTICS PRIOR SOLVE PHASE ........... + NUMBER OF RIGHT-HAND-SIDES = 1 + BLOCKING FACTOR FOR MULTIPLE RHS = 1 + ICNTL (9) = 1 + --- (10) = 0 + --- (11) = 0 + --- (20) = 0 + --- (21) = 0 + --- (30) = 0 + ** Rank of processor needing largest memory in solve : 0 + ** Space in MBYTES used by this processor for solve : 0 + ** Avg. Space in MBYTES per working proc during solve : 0 + + Global statistics + TIME to build/scatter RHS = 0.000093 + TIME in solution step (fwd/bwd) = 0.000231 + .. TIME in forward (fwd) step = 0.000133 + .. TIME in backward (bwd) step = 0.000090 + TIME to gather solution(cent.sol)= 0.000005 + TIME to copy/scale RHS (dist.sol)= 0.000000 + ELAPSED TIME IN SOLVE DRIVER= 0.0010 + Solution is 1.00000048 2.00000024 3.00000000 4.00000000 4.99999952 + +Entering SMUMPS 5.1.2 with JOB = -2 + executing #MPI = 3, without OMP + +Entering DMUMPS 5.1.2 with JOB, N, NNZ = 6 5 12 + executing #MPI = 3, without OMP + + ================================================= + ================================================= +L U Solver for unsymmetric matrices +Type of parallelism: Working host + + ****** ANALYSIS STEP ******** + + ... Structural symmetry (in percent)= 92 + Average density of rows/columns = 2 + ... No column permutation + Ordering based on AMF + +Leaving analysis phase with ... +INFOG(1) = 0 +INFOG(2) = 0 + -- (20) Number of entries in factors (estim.) = 15 + -- (3) Storage of factors (REAL, estimated) = 15 + -- (4) Storage of factors (INT , estimated) = 65 + -- (5) Maximum frontal size (estimated) = 3 + -- (6) Number of nodes in the tree = 3 + -- (32) Type of analysis effectively used = 1 + -- (7) Ordering option effectively used = 2 +ICNTL(6) Maximum transversal option = 0 +ICNTL(7) Pivot order option = 7 +Percentage of memory relaxation (effective) = 20 +Number of level 2 nodes = 0 +Number of split nodes = 0 +RINFOG(1) Operations during elimination (estim)= 1.900D+01 + ** Rank of proc needing largest memory in IC facto : 0 + ** Estimated corresponding MBYTES for IC facto : 1 + ** Estimated avg. MBYTES per work. proc at facto (IC) : 1 + ** TOTAL space in MBYTES for IC factorization : 3 + ** Rank of proc needing largest memory for OOC facto : 0 + ** Estimated corresponding MBYTES for OOC facto : 1 + ** Estimated avg. MBYTES per work. proc at facto (OOC) : 1 + ** TOTAL space in MBYTES for OOC factorization : 3 + ELAPSED TIME IN ANALYSIS DRIVER= 0.0006 + + ****** FACTORIZATION STEP ******** + + + GLOBAL STATISTICS PRIOR NUMERICAL FACTORIZATION ... + NUMBER OF WORKING PROCESSES = 3 + OUT-OF-CORE OPTION (ICNTL(22)) = 0 + REAL SPACE FOR FACTORS = 15 + INTEGER SPACE FOR FACTORS = 65 + MAXIMUM FRONTAL SIZE (ESTIMATED) = 3 + NUMBER OF NODES IN THE TREE = 3 + MEMORY ALLOWED (MB -- 0: N/A ) = 0 + RELATIVE THRESHOLD FOR PIVOTING, CNTL(1) = 0.1000D-01 + Convergence error after scaling for ONE-NORM (option 7/8) = 0.38D+00 + Maximum effective relaxed size of S = 475 + Average effective relaxed size of S = 469 + ELAPSED TIME FOR MATRIX DISTRIBUTION = 0.0000 + ** Memory relaxation parameter ( ICNTL(14) ) : 20 + ** Rank of processor needing largest memory in facto : 0 + ** Space in MBYTES used by this processor for facto : 1 + ** Avg. Space in MBYTES per working proc during facto : 1 + + ELAPSED TIME FOR FACTORIZATION = 0.0012 + Maximum effective space used in S (KEEP8(67)) 12 + Average effective space used in S (KEEP8(67)) 5 + ** EFF Min: Rank of processor needing largest memory : 0 + ** EFF Min: Space in MBYTES used by this processor : 1 + ** EFF Min: Avg. Space in MBYTES per working proc : 1 + + GLOBAL STATISTICS + RINFOG(2) OPERATIONS IN NODE ASSEMBLY = 2.000D+00 + ------(3) OPERATIONS IN NODE ELIMINATION= 1.900D+01 + INFOG (9) REAL SPACE FOR FACTORS = 15 + INFOG(10) INTEGER SPACE FOR FACTORS = 65 + INFOG(11) MAXIMUM FRONT SIZE = 3 + INFOG(29) NUMBER OF ENTRIES IN FACTORS = 15 + INFOG(12) NUMBER OF OFF DIAGONAL PIVOTS = 0 + INFOG(13) NUMBER OF DELAYED PIVOTS = 0 + INFOG(14) NUMBER OF MEMORY COMPRESS = 0 + ELAPSED TIME IN FACTORIZATION DRIVER= 0.0019 + + + ****** SOLVE & CHECK STEP ******** + + + STATISTICS PRIOR SOLVE PHASE ........... + NUMBER OF RIGHT-HAND-SIDES = 1 + BLOCKING FACTOR FOR MULTIPLE RHS = 1 + ICNTL (9) = 1 + --- (10) = 0 + --- (11) = 0 + --- (20) = 0 + --- (21) = 0 + --- (30) = 0 + ** Rank of processor needing largest memory in solve : 0 + ** Space in MBYTES used by this processor for solve : 0 + ** Avg. Space in MBYTES per working proc during solve : 0 + + Global statistics + TIME to build/scatter RHS = 0.000062 + TIME in solution step (fwd/bwd) = 0.000247 + .. TIME in forward (fwd) step = 0.000170 + .. TIME in backward (bwd) step = 0.000055 + TIME to gather solution(cent.sol)= 0.000004 + TIME to copy/scale RHS (dist.sol)= 0.000000 + ELAPSED TIME IN SOLVE DRIVER= 0.0006 + Solution is 0.99999999999999989 2.0000000000000000 3.0000000000000004 3.9999999999999996 4.9999999999999991 + +Entering DMUMPS 5.1.2 with JOB = -2 + executing #MPI = 3, without OMP +``` + +模型验证且运行成功,测试通过。 + +## 3.性能测试 + +### 3.1.测试平台信息对比 + +| | arm信息 | x86信息 | +| -------- | -------------------------------- | --------------------- | +| 操作系统 | openEuler 22.03 (LTS) | openEuler 22.03 (LTS) | +| 内核版本 | 5.10.0-60.18.0.50.oe2203.aarch64 | 5.15.79.1.oe1.x86_64 | + +### 3.2.测试软件环境信息对比 + +| | arm信息 | x86信息 | +| --------- | ------------- | --------- | +| gcc | bisheng 2.1.0 | gcc 9.3.0 | +| mpi | hmpi1.1.1 | hmpi1.1.1 | +| CMake | 3.23.1 | 3.23.1 | +| OpenBLAS | 0.3.18 | 0.3.18 | +| lapack | 3.8.0 | 3.8.0 | +| scalapack | 2.1.0 | 2.1.0 | + +### 3.3.测试硬件性能信息对比 + +| | arm信息 | x86信息 | +| ------ | ----------- | -------- | +| cpu | Kunpeng 920 | | +| 核心数 | 16 | 4 | +| 内存 | 32 GB | 8 GB | +| 磁盘io | 1.3 GB/s | 400 MB/s | +| 虚拟化 | KVM | KVM | + +### 3.4.测试选择的案例 + +example/ 目录下的文件 csimpletest + +测试文件如下 + +```fortran +C +C This file is part of MUMPS 5.1.2, released +C on Mon Oct 2 07:37:01 UTC 2017 +C + PROGRAM MUMPS_TEST + IMPLICIT NONE + INCLUDE 'mpif.h' + INCLUDE 'cmumps_struc.h' + TYPE (CMUMPS_STRUC) mumps_par + INTEGER IERR, I + INTEGER(8) I8 + CALL MPI_INIT(IERR) +C Define a communicator for the package. + mumps_par%COMM = MPI_COMM_WORLD +C Initialize an instance of the package +C for L U factorization (sym = 0, with working host) + mumps_par%JOB = -1 + mumps_par%SYM = 0 + mumps_par%PAR = 1 + CALL CMUMPS(mumps_par) + IF (mumps_par%INFOG(1).LT.0) THEN + WRITE(6,'(A,A,I6,A,I9)') " ERROR RETURN: ", + & " mumps_par%INFOG(1)= ", mumps_par%INFOG(1), + & " mumps_par%INFOG(2)= ", mumps_par%INFOG(2) + GOTO 500 + END IF +C Define problem on the host (processor 0) + IF ( mumps_par%MYID .eq. 0 ) THEN + READ(5,*) mumps_par%N + READ(5,*) mumps_par%NNZ + ALLOCATE( mumps_par%IRN ( mumps_par%NNZ ) ) + ALLOCATE( mumps_par%JCN ( mumps_par%NNZ ) ) + ALLOCATE( mumps_par%A( mumps_par%NNZ ) ) + ALLOCATE( mumps_par%RHS ( mumps_par%N ) ) + DO I8 = 1, mumps_par%NNZ + READ(5,*) mumps_par%IRN(I8),mumps_par%JCN(I8),mumps_par%A(I8) + END DO + DO I = 1, mumps_par%N + READ(5,*) mumps_par%RHS(I) + END DO + END IF +C Call package for solution + mumps_par%JOB = 6 + CALL CMUMPS(mumps_par) + IF (mumps_par%INFOG(1).LT.0) THEN + WRITE(6,'(A,A,I6,A,I9)') " ERROR RETURN: ", + & " mumps_par%INFOG(1)= ", mumps_par%INFOG(1), + & " mumps_par%INFOG(2)= ", mumps_par%INFOG(2) + GOTO 500 + END IF +C Solution has been assembled on the host + IF ( mumps_par%MYID .eq. 0 ) THEN + WRITE( 6, * ) ' Solution is ',(mumps_par%RHS(I),I=1,mumps_par%N) + END IF +C Deallocate user data + IF ( mumps_par%MYID .eq. 0 )THEN + DEALLOCATE( mumps_par%IRN ) + DEALLOCATE( mumps_par%JCN ) + DEALLOCATE( mumps_par%A ) + DEALLOCATE( mumps_par%RHS ) + END IF +C Destroy the instance (deallocate internal data structures) + mumps_par%JOB = -2 + CALL CMUMPS(mumps_par) + IF (mumps_par%INFOG(1).LT.0) THEN + WRITE(6,'(A,A,I6,A,I9)') " ERROR RETURN: ", + & " mumps_par%INFOG(1)= ", mumps_par%INFOG(1), + & " mumps_par%INFOG(2)= ", mumps_par%INFOG(2) + GOTO 500 + END IF + 500 CALL MPI_FINALIZE(IERR) + STOP + END +``` + +输入文件 + +```shell +5 : N +12 : NZ +1 2 (3.0,0.0) +2 3 (-3.0,0.0) +4 3 (2.0,0.0) +5 5 (1.0,0.0) +2 1 (3.0,0.0) +1 1 (2.0,0.0) +5 2 (4.0,0.0) +3 4 (2.0,0.0) +2 5 (6.0,0.0) +3 2 (-1.0,0.0) +1 3 (4.0,0.0) +3 3 (1.0,0.0) +(20.0,0.0) +(24.0,0.0) +(9.0,0.0) +(6.0,0.0) +(13.0,0.0) : RHS + +``` + +### 3.5.单线程 + +单线程运行测试时间对比(五次运行取平均值) + +| | arm | x86 | +| ----------- | ------ | ------ | +| 实际CPU时间 | 0.160s | 0.188s | +| 用户时间 | 0.064s | 0.063s | + +### 3.6.多线程 + +多线程运行测试时间对比(五次运行取平均值) + +| | arm | x86 | +| ----------- | ------ | ----- | +| 线程数 | 4 | 4 | +| 实际CPU时间 | 0.159s | 0.204 | +| 用户时间 | 0.197s | 0.168 | + +arm多线程时间耗费数据表: + +| 线程 | 1 | 2 | 4 | 8 | +| :------------ | ----- | ----- | ----- | ----- | +| 用户时间(s) | 0.160 | 0.155 | 0.159 | 0.174 | +| 用户态时间(s) | 0.064 | 0.099 | 0.197 | 0.407 | +| 内核态时间(s) | 0.053 | 0.082 | 0.127 | 0.257 | + +x86多线程时间耗费数据表: + +| 线程 | 1 | 2 | 3 | 4 | +| --------------- | ----- | ----- | ----- | ----- | +| 用户时间 (s) | 0.188 | 0.195 | 0.216 | 0.204 | +| 用户态时间(s) | 0.063 | 0.079 | 0.150 | 0.168 | +| 内核态时间(s) | 0.163 | 0.281 | 0.424 | 0.520 | + +由上表可知,在线程逐渐增加的情况下,所减少的用户时间并非线性关系,线程数增加后,运算用时并未显著下降,且系统调用的时间有较为明显的上升趋势。 + +### 3.7.测试总结 + +性能测试arm平台均在x86平台50%以上,且随着线程数的增加,两个平台的对于同一个应用的所耗费的时间差距逐渐减少。 + +且线程增加并不会无限制减少应用的实际耗费时间,在合理的范围内分配线程数才能更好的利用算力资源。 + +## 4.精度测试 + +### 4.1.所选测试案例 + +example/ 目录下的文件 c_example.c + +使用 C 接口的示例程序 + +- MUMPS 的双实数算术版本,dmumps_c。 +- 我们解决系统 A x = RHS 与 +- A = diag(1 2) 和 RHS = [1 4]^T +- 解是 [1 2]^T */ + +测试文件如下 + +```c +/* + * + * This file is part of MUMPS 5.1.2, released + * on Mon Oct 2 07:37:01 UTC 2017 + * + */ +/* Example program using the C interface to the + * double real arithmetic version of MUMPS, dmumps_c. + * We solve the system A x = RHS with + * A = diag(1 2) and RHS = [1 4]^T + * Solution is [1 2]^T */ +#include +#include +#include "mpi.h" +#include "dmumps_c.h" +#define JOB_INIT -1 +#define JOB_END -2 +#define USE_COMM_WORLD -987654 + +#if defined(MAIN_COMP) +/* + * Some Fortran compilers (COMPAQ fort) define main inside + * their runtime library while a Fortran program translates + * to MAIN_ or MAIN__ which is then called from "main". This + * is annoying because MAIN__ has no arguments and we must + * define argc/argv arbitrarily !! + */ +int MAIN__(); +int MAIN_() + { + return MAIN__(); + } + +int MAIN__() +{ + int argc=1; + char * name = "c_example"; + char ** argv ; +#else +int main(int argc, char ** argv) +{ +#endif + DMUMPS_STRUC_C id; + MUMPS_INT n = 2; + MUMPS_INT8 nnz = 2; + MUMPS_INT irn[] = {1,2}; + MUMPS_INT jcn[] = {1,2}; + double a[2]; + double rhs[2]; + + MUMPS_INT myid, ierr; + + int error = 0; +#if defined(MAIN_COMP) + argv = &name; +#endif + ierr = MPI_Init(&argc, &argv); + ierr = MPI_Comm_rank(MPI_COMM_WORLD, &myid); + /* Define A and rhs */ + rhs[0]=1.0;rhs[1]=4.0; + a[0]=1.0;a[1]=2.0; + + /* Initialize a MUMPS instance. Use MPI_COMM_WORLD */ + id.comm_fortran=USE_COMM_WORLD; + id.par=1; id.sym=0; + id.job=JOB_INIT; + dmumps_c(&id); + + /* Define the problem on the host */ + if (myid == 0) { + id.n = n; id.nnz =nnz; id.irn=irn; id.jcn=jcn; + id.a = a; id.rhs = rhs; + } +#define ICNTL(I) icntl[(I)-1] /* macro s.t. indices match documentation */ + /* No outputs */ + id.ICNTL(1)=-1; id.ICNTL(2)=-1; id.ICNTL(3)=-1; id.ICNTL(4)=0; + + /* Call the MUMPS package (analyse, factorization and solve). */ + id.job=6; + dmumps_c(&id); + if (id.infog[0]<0) { + printf(" (PROC %d) ERROR RETURN: \tINFOG(1)= %d\n\t\t\t\tINFOG(2)= %d\n", + myid, id.infog[0], id.infog[1]); + error = 1; + } + + /* Terminate instance. */ + id.job=JOB_END; + dmumps_c(&id); + if (myid == 0) { + if (!error) { + printf("Solution is : (%8.2f %8.2f)\n", rhs[0],rhs[1]); + } else { + printf("An error has occured, please check error code returned by MUMPS.\n"); + } + } + ierr = MPI_Finalize(); + return 0; +} +``` + +通过Makefile进行编译 +运行选项如下: + +```bash +make clean all +MPIRUN="mpirun -np 3 --mca plm_rsh_agent sh --mca opal_warn_on_missing_libcuda 0 --oversubscribe" +${MPIRUN} ./c_example +``` + +### 4.2.获取对比数据 + +arm 运行结果 + +```bash +Solution is : ( 1.00 2.00) +``` + +### 4.3.测试总结 + +从arm输出结果可以看出测试通过,满足example/README中的结果。 diff --git "a/doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\347\247\273\346\244\215\346\214\207\345\215\227\343\200\213.md" "b/doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\347\247\273\346\244\215\346\214\207\345\215\227\343\200\213.md" new file mode 100644 index 0000000..1d24400 --- /dev/null +++ "b/doc/mumps/5.1.2/\343\200\212\345\237\272\344\272\216openEuler\347\232\204mumps\350\275\257\344\273\266\347\247\273\346\244\215\346\214\207\345\215\227\343\200\213.md" @@ -0,0 +1,375 @@ +# 《基于openEuler的MUMPS软件移植指南》 + +## 1.介绍 + +- MUMPS("MUltifrontal Massively Parallel Solver")是一个用于求解线性方程组的软件包。 + +- 官网地址: + +- 特性: + + - 实数或复数算术(单精度或双精度) + - 平行因式分解和求解阶段 + - (也可使用单处理器版本) + - 脱离核心的数值阶段 + - 迭代细化和逆向误差分析 + - 各种矩阵输入格式集合式、分布式、元素式格式 + - 部分因式分解和Schur互补矩阵(集中式或二维块状循环式),具有减少/压缩的右手边 + +## 2.环境要求 + +- 操作系统:OpenEuler arm/x86 (本文档以 x86 架构为例) + +## 3.配置编译环境 + +配置环境指导,手动进行配置依赖环境。 + +### 3.1.环境总览 + +- 编译器: gcc + +- MPI:hmpi + +- 其他类库:`CMake`, `OpenBLAS`, `zlib`, `lapack`, `scalapack` + + 具体版本和下载地址如下 + +| 名称 | 版本 | 软件下载地址 | +| --------- | ------ | ---------------------------------------------------------------------------------------------- | +| hmpi | 1.1.1 | <$JARVIS_PROXY/kunpengcompute/hmpi/archive/refs/tags/v1.1.1-huawei.zip> | +| gcc | 9.3.0 | | +| CMake | 3.23.1 | <$JARVIS_PROXY/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-linux-aarch64.tar.gz> | +| OpenBLAS | 0.3.18 | <$JARVIS_PROXY/xianyi/OpenBLAS/archive/refs/tags/v0.3.18.tar.gz> | +| zlib | 1.2.12 | | +| lapack | 3.8.0 | | +| scalapack | 2.1.0 | | + +### 3.2.创建文件夹 + +```bash +mkdir -p $HOME/build +mkdir -p $HOME/install +mkdir -p $HOME/tmp +``` + +### 3.3.安装预设 + +设置环境变量,方便修改自定义安装目录 + +- 编译目录为 $HOME/build , 根据实际情况进行修改 +- 软件安装目录为 $HOME/install , 根据实际情况进行修改 +- 下载目录为 $HOME/tmp , 根据实际情况进行修改 + +```bash +#为了方便自定义软件安装目录 +#环境变量DEP_INSTALL_DIR将在后文中作为软件安装目录的根目录 +export DEP_INSTALL_DIR=$HOME/install +#环境变量DEP_BUILD_DIR将在后文中作为编译的根目录 +export DEP_BUILD_DIR=$HOME/build +#环境变量DEP_DOWNLOAD_DIR将在后文中作为下载文件的保存目录 +export DEP_DOWNLOAD_DIR=$HOME/tmp + +#注: 以上变量只在一次会话中有效。如果中途断开ssh会话,则在后续的安装过程中不会生效,需要重新运行 +``` + +### 3.4.安装环境依赖和gcc编译器 + +```bash +#环境依赖 +yum -y install wget tar libatomic + +#安装bisheng编译器 +wget -P $DEP_DOWNLOAD_DIR https://ftp.gnu.org/gnu/gcc/gcc-9.3.0/gcc-9.3.0.tar.gz +tar -xf $DEP_DOWNLOAD_DIR/gcc-9.3.0.tar.gz -C $DEP_INSTALL_DIR +sed -i "35s/ftp/http/g" ./contrib/download_prerequisites +./contrib/download_prerequisites +./configure --disable-multilib --enable-languages="c,c++,fortran" --prefix=$1 --disable-static --enable-shared +make -j && make install +#设置环境变量 +echo "export PATH=$DEP_INSTALL_DIR/gcc-9.3.0/bin:$PATH" >> ~/.bashrc && source ~/.bashrc +export CC=`which clang` +export CXX=`which clang++` +``` + +## 3.5.下载并编译hmpi + +```bash +yum -y install libstdc++ libstdc++-devel +yum -y install unzip make autoconf automake git libtool +#下载解压源码文件 +wget $JARVIS_PROXY/kunpengcompute/hucx/archive/refs/tags/v1.1.1-huawei.zip -O $DEP_DOWNLOAD_DIR/hucx-1.1.1-huawei.zip +wget $JARVIS_PROXY/kunpengcompute/xucg/archive/refs/tags/v1.1.1-huawei.zip -O $DEP_DOWNLOAD_DIR/xucg-1.1.1-huawei.zip +wget $JARVIS_PROXY/kunpengcompute/hmpi/archive/refs/tags/v1.1.1-huawei.zip -O $DEP_DOWNLOAD_DIR/hmpi-1.1.1-huawei.zip + +cd $DEP_BUILD_DIR +unzip -q $DEP_DOWNLOAD_DIR/hucx-1.1.1-huawei.zip +unzip -q $DEP_DOWNLOAD_DIR/xucg-1.1.1-huawei.zip +unzip -q $DEP_DOWNLOAD_DIR/hmpi-1.1.1-huawei.zip +cp -rf xucg-1.1.1-huawei/* hucx-1.1.1-huawei/src/ucg/ + +#编译hucx +cd $DEP_BUILD_DIR/hucx-1.1.1-huawei +./autogen.sh +./contrib/configure-opt --prefix=$DEP_INSTALL_DIR/hmpi/hucx CFLAGS="-DHAVE___CLEAR_CACHE=1" --disable-numa --without-java +for file in `find . -name Makefile`;do sed -i "s/-Werror//g" $file;done +for file in `find . -name Makefile`;do sed -i "s/-implicit-function-declaration//g" $file;done +make -j +make install + +yum -y install flex +#编译hmpi +cd $DEP_BUILD_DIR/hmpi-1.1.1-huawei +./autogen.pl +./configure --prefix=$DEP_INSTALL_DIR/hmpi --with-platform=contrib/platform/mellanox/optimized --enable-mpi1-compatibility --with-ucx=$DEP_INSTALL_DIR/hmpi/hucx +make -j +make install + +echo "export PATH=$DEP_INSTALL_DIR/hmpi/bin:$PATH" >> ~/.bashrc && source ~/.bashrc +export CC=mpicc CXX=mpicxx FC=mpifort F77=mpifort +``` + +## 3.6.下载并编译`CMake`, `OpenBLAS`, `zlib`, `lapack`, `scalapack` + +```bash +# 下载CMake +wget $JARVIS_PROXY/Kitware/CMake/releases/download/v3.23.1/cmake-3.23.1-linux-x86_64.tar.gz -O $DEP_DOWNLOAD_DIR/cmake-3.23.1.tar.gz +tar -xvf $DEP_DOWNLOAD_DIR/cmake-3.23.1-linux-x86_64.tar.gz -C $DEP_INSTALL_DIR/cmake --strip-components=1 +echo "export PATH=$DEP_INSTALL_DIR/cmake/bin:$PATH" >> ~/.bashrc && source ~/.bashrc + +# 下载并编译OpenBLAS +wget $JARVIS_PROXY/xianyi/OpenBLAS/archive/refs/tags/v0.3.18.tar.gz -O $DEP_DOWNLOAD_DIR/OpenBLAS-0.3.18.tar.gz +tar -xzvf $DEP_DOWNLOAD_DIR/OpenBLAS-0.3.18.tar.gz -C $DEP_BUILD_DIR +cd $DEP_BUILD_DIR/OpenBLAS-0.3.18 +make -j +make PREFIX=$DEP_INSTALL_DIR/OpenBLAS install +echo "export LD_LIBRARY_PATH=$DEP_INSTALL_DIR/OpenBLAS/lib:$LD_LIBRARY_PATH" >> ~/.bashrc && source ~/.bashrc + +# 下载并编译zlib +wget https://zlib.net/fossils/zlib-1.2.12.tar.gz -O $DEP_DOWNLOAD_DIR/zlib-1.2.12.tar.gz +tar -xvf $DEP_DOWNLOAD_DIR/zlib-1.2.12.tar.gz -C $DEP_BUILD_DIR +cd $DEP_BUILD_DIR/zlib-1.2.12 +CC= CXX= ./configure --prefix=$DEP_INSTALL_DIR/zlib +make -j +make install +echo "export LD_LIBRARY_PATH=$DEP_INSTALL_DIR/zlib/lib:$LD_LIBRARY_PATH" >> ~/.bashrc && source ~/.bashrc + +# 下载并编译lapack +wget https://www.cp2k.org/static/downloads/lapack-3.8.0.tgz -O $DEP_DOWNLOAD_DIR/lapack-3.8.0.tgz +tar -xvf $DEP_DOWNLOAD_DIR/lapack-3.8.0.tgz -C $DEP_BUILD_DIR +cd $DEP_BUILD_DIR/lapack-3.8.0 +./bootstrap.sh +mkdir build && cd build +cmake .. -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_SHARED_LIBS=ON -DCMAKE_INSTALL_LIBDIR=$DEP_INSTALL_DIR/lapack +make -j +make install -j +echo "export LD_LIBRARY_PATH=$DEP_INSTALL_DIR/lapack/lib:$LD_LIBRARY_PATH" >> ~/.bashrc && source ~/.bashrc + +# 下载并编译scalapack +wget http://www.netlib.org/scalapack/scalapack-2.1.0.tgz -O $DEP_DOWNLOAD_DIR/scalapack-2.1.0.tgz +tar -xvf $DEP_DOWNLOAD_DIR/scalapack-2.1.0.tgz -C $DEP_BUILD_DIR +cd $DEP_BUILD_DIR/scalapack-2.1.0 +mkdir build && cd build +cmake \ +-DCMAKE_INSTALL_PREFIX=$DEP_INSTALL_DIR/scalapack \ +-DBUILD_SHARED_LIBS=ON \ +-DBLAS_LIBRARIES=$DEP_INSTALL_DIR/OpenBLAS/lib/libopenblas.so \ +-DLAPACK_LIBRARIES=$DEP_INSTALL_DIR/lapack/lib/liblapack.so \ +-DCMAKE_C_COMPILER=mpicc -DCMAKE_Fortran_COMPILER=mpif90 \ +.. / +make -j +make install +echo "export LD_LIBRARY_PATH=$DEP_INSTALL_DIR/scalapack/lib:$LD_LIBRARY_PATH" >> ~/.bashrc && source ~/.bashrc + +``` + +## 4.编译MUMPS + +### 4.1.下载并编译 MUMPS + +获取 MUMPS软件源码并解压文件 + +```bash + +# 下载源码文件 +wget http://graal.ens-lyon.fr/MUMPS/MUMPS_5.1.2.tar.gz -O $DEP_DOWNLOAD_DIR/MUMPS_5.1.2.tar.gz +# 解压源码文件 +tar -xvf $DEP_DOWNLOAD_DIR/MUMPS_5.1.2.tar.gz -C $DEP_BUILD_DIR +cd $DEP_BUILD_DIR/MUMPS_5.1.2 +#编译源码 +mkdir -p lib +cp Make.inc/Makefile.inc.generic ./Makefile.inc +sed -i 's/f90/mpifort/g' ./Makefile.inc +sed -i 's/CC = cc/CC = mpicc/g' ./Makefile.inc +sed -i '94c LIBEXT = .so' ./Makefile.inc +sed -i '107c AR = $(CC) -shared $(OPTC) -o' ./Makefile.inc +sed -i '115c LAPACK = -Wl,-rpath,$DEP_INSTALL_DIR/lapack/ -L$DEP_INSTALL_DIR/lapack/ -llapack' ./Makefile.inc +sed -i '118c SCALAP = -Wl,-rpath,$DEP_INSTALL_DIR/scalapack/lib/ -L$DEP_INSTALL_DIR/scalapack/lib/ -lscalapack' ./Makefile.inc +sed -i '121c INCPAR = -I$DEP_INSTALL_DIR/hmpi/include' ./Makefile.inc +sed -i '124c LIBPAR = $(SCALAP) $(LAPACK) -L$DEP_INSTALL_DIR/hmpi/lib -lmpi_usempif08 -lmpi_usempi_ignore_tkr -lmpi_mpifh -lmpi' ./Makefile.inc +sed -i '134c LIBBLAS = -Wl,-rpath,$DEP_INSTALL_DIR/openblas/lib -L$DEP_INSTALL_DIR/openblas/lib -lopenblas' ./Makefile.inc +sed -i '153c OPTF = -DALLOW_NON_INIT ${CFLAGS} -fPIC -Wno-argument-mismatch' ./Makefile.inc +sed -i '154c OPTC = ${CFLAGS} -fPIC' ./Makefile.inc +sed -i '155c OPTL = ${CFLAGS} -fPIC' ./Makefile.inc +sed -i '71c cp $(LPORDDIR)/libpord$(LIBEXT) `pwd`/lib; \\' ./Makefile +make alllib all +``` + +### 4.2. 运行测试文件 + +运行MUMPS项目测试文件 + +```bash +cd $DEP_BUILD_DIR/MUMPS_5.1.2/example +export OMPI_ALLOW_RUN_AS_ROOT=1 OMPI_ALLOW_RUN_AS_ROOT_CONFIRM=1 +make clean all +export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$DEP_BUILD_DIR/MUMPS_5.1.2/lib +${MPIRUN} ./ssimpletest < input_simpletest_real +${MPIRUN} ./dsimpletest < input_simpletest_real +${MPIRUN} ./csimpletest < input_simpletest_cmplx +${MPIRUN} ./zsimpletest < input_simpletest_cmplx +${MPIRUN} ./c_example +${MPIRUN} ./multiple_arithmetics_example +``` + +## 附A:使用hpcrunner进行一键安装MUMPS + +推荐使用hpcrunner进行安装MUMPS + +### 1.克隆仓库 + +```bash +git clone https://gitee.com/openeuler/hpcrunner.git +``` + +## 2.初始化hpcrunner 和 安装必要软件包 + +初始化项目助手 + +```bash +cd hpcrunner +source init.sh +``` + +安装必要软件包 + +**arm / x86 需要的软件包不同,根据实际环境进行选择** + +```bash +# arm +yum install -y environment-modules git wget unzip make flex tar +# x86 +yum install -y environment-modules git wget unzip make flex tar +yum install -y gcc gcc-c++ gcc-gfortran glibc-devel libgfortran +yum install -y tcsh tcl lsof tk bc +``` + +### 3.选择平台对应配置文件 + +- arm平台的配置文件为 `templates/mumps/5.1.2/data.mumps.arm.cpu.config` + + ```bash + ./jarvis -use templates/mumps/5.1.2/data.mumps.arm.cpu.config + ``` + +- x86 平台的配置文件为 `templates/mumps/5.1.2/data.mumps.amd.cpu.config` + + ```bash + ./jarvis -use templates/mumps/5.1.2/data.mumps.amd.cpu.config + ``` + +### 4.下载mumps源码 + +```bash +./jarvis -d +``` + +### 5.一键配置依赖环境 + +```bash +./jarvis -dp +``` + +### 6.一键进行编译 + +```bash +./jarvis -b +``` + +### 7.一键进行运行测试 + +```bash +./jarvis -r +``` + +## 附B:使用singularity运行容器 + +### 使用教程 + +### 下载容器镜像 + +通过链接下载: + +[百度云盘](https://pan.baidu.com/s/1UjHiv6DN_oOVXcuohP5Uqg?pwd=vxit) + +或者扫码下载: + +![百度云](data:image/png;base64,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) + +#### 1.安装singularity + +安装singularity, + +具体步骤如下 + +```bash +mkdir -p ~/install +mkdir -p ~/build + +#安装编译所需依赖 +yum -y install libatomic libstdc++ libstdc++-devel libseccomp-devel glib2-devel gcc squashfs-tools tar + +#安装bisheng编译器 +cd ~/build +wget https://mirrors.huaweicloud.com/kunpeng/archive/compiler/bisheng_compiler/bisheng-compiler-2.1.0-aarch64-linux.tar.gz +tar -C ~/install -xf bisheng-compiler-2.1.0-aarch64-linux.tar.gz +echo "export PATH=$HOME/install/bisheng-compiler-2.1.0-aarch64-linux/bin:$PATH" >> ~/.bashrc && source ~/.bashrc +export CC=`which clang` +export CXX=`which clang++` + +#安装go编译器 +cd ~/build +wget https://go.dev/dl/go1.19.linux-arm64.tar.gz +tar -C ~/install -xf go1.19.linux-arm64.tar.gz +echo "export PATH=$HOME/install/go/bin:$PATH" >> ~/.bashrc && source ~/.bashrc + +#安装singularity +cd ~/build +wget $JARVIS_PROXY/sylabs/singularity/releases/download/v3.10.2/singularity-ce-3.10.2.tar.gz +tar -xf singularity-ce-3.10.2.tar.gz +cd singularity-ce-3.10.2 +./mconfig --prefix=$HOME/install/singularity +make -C ./builddir +make -C ./builddir install +echo "export PATH=$HOME/install/singularity/bin:$PATH" >> ~/.bashrc && source ~/.bashrc +``` + +#### 2.构建镜像 + +```shell +# x86 +singularity build ./name-of-image.sif openeuler-gcc-9.3.0-hmpi1-mumps-5.1.2.def +# arm +singularity build ./name-of-image.sif openeuler-bisheng2-hmpi1-mumps-5.1.2.def +# 转换为沙盒 +singularity build --sandbox image-sandbox name-of-image.sif +``` + +#### 3.在沙盒中运行 + +```shell +#进入沙盒 +singularity shell -w image-sandbox +#在沙盒中运行内置的测试案例 +cd /hpcrunner +./jarvis -r +``` diff --git a/examples/mpi/devkitdemo-main/Development_framework/hpc-sdk/examples/kml/math/README_en.md b/examples/mpi/devkitdemo-main/Development_framework/hpc-sdk/examples/kml/math/README_en.md index 5e165cb..5b52eb9 100644 --- a/examples/mpi/devkitdemo-main/Development_framework/hpc-sdk/examples/kml/math/README_en.md +++ b/examples/mpi/devkitdemo-main/Development_framework/hpc-sdk/examples/kml/math/README_en.md @@ -39,7 +39,7 @@ There are multiple versions of KML_MATH: # The MATH library of the high-performance version is used by default. cmake .. make - # Use the MATH library of the high-precision version. + # Use the MATH library of the high-precition version. cmake -DMATH=precision .. make ``` diff --git a/examples/mpi/devkitdemo-main/Porting_advisor/testdemo/code_migration/code/file_lock.c b/examples/mpi/devkitdemo-main/Porting_advisor/testdemo/code_migration/code/file_lock.c index fdc3cab..094c51c 100644 --- a/examples/mpi/devkitdemo-main/Porting_advisor/testdemo/code_migration/code/file_lock.c +++ b/examples/mpi/devkitdemo-main/Porting_advisor/testdemo/code_migration/code/file_lock.c @@ -140,7 +140,7 @@ int main() pthread_join(thread1, NULL); pthread_join(thread2, NULL); - printf("destroy thread to get g_count=%d\n", g_count); + printf("destory thread to get g_count=%d\n", g_count); return 0; } diff --git a/examples/mpi/devkitdemo-main/hpc-sdk/examples/kml/blas/README_en.md b/examples/mpi/devkitdemo-main/hpc-sdk/examples/kml/blas/README_en.md index a7df076..9ab53de 100644 --- a/examples/mpi/devkitdemo-main/hpc-sdk/examples/kml/blas/README_en.md +++ b/examples/mpi/devkitdemo-main/hpc-sdk/examples/kml/blas/README_en.md @@ -9,7 +9,7 @@ English | [简体中文](README.md) has been widely used in industry and scientific computing, and has become an industry standard. The [KML_BLAS](https://www.hikunpeng.com/document/detail/en/kunpengaccel/math-lib/devg-kml/kunpengaccel_kml_16_0012.html) library provides the C language interface for BLAS functions. -2. The **KML_BLAS library functions demo** shows a code example for KML_BLAS library functions, demonstrates the use process of matrix multiplication, symmetric matrix multiplication, update the rank of symmetric matrix, etc functions. +2. The **KML_BLAS library functions demo** shows a code example for KML_BLAS library functions, demonstrates the use process of matrix multiplication, symmetric matrix multiplication, update the rank of sysmmetric matrix, etc functions. ## Dependencies diff --git a/init.sh b/init.sh index 99e53c7..0f421a8 100644 --- a/init.sh +++ b/init.sh @@ -20,6 +20,7 @@ export JARVIS_EXE=${CUR_PATH}/exe export JARVIS_PROXY=https://gh.ddlc.top/https://github.com + export DOWNLOAD_TOOL=${CUR_PATH}/package/common/download.sh export CHECK_DEPS=${CUR_PATH}/package/common/check_deps.sh export CHECK_ROOT=${CUR_PATH}/package/common/check_root.sh diff --git a/package/libvdwxc/0.4.1/install.sh b/package/libvdwxc/0.4.1/install.sh new file mode 100644 index 0000000..9a798fb --- /dev/null +++ b/package/libvdwxc/0.4.1/install.sh @@ -0,0 +1,9 @@ +set -x +set -e +. ${DOWNLOAD_TOOL} -u https://launchpad.net/libvdwxc/stable/0.4.0/+download/libvdwxc-0.4.0.tar.gz +cd ${JARVIS_TMP} +tar xvf ${JARVIS_DOWNLOAD}/libvdwxc-0.4.0.tar.gz +cd libvdwxc-0.4.0 +./configure --prefix=$1 --enable-shared=yes --enable-static=yes +make -j +make install \ No newline at end of file diff --git a/package/netcdf/4.7.0/clang/install.sh b/package/netcdf/4.7.0/clang/install.sh index 5696ac4..73a8055 100755 --- a/package/netcdf/4.7.0/clang/install.sh +++ b/package/netcdf/4.7.0/clang/install.sh @@ -22,7 +22,7 @@ PNETCDF_DIR=${PNETCDF_PATH} cd include/ rm -rf ncconfigure.h -wget $JARVIS_PROXY/Unidata/netcdf-c/files/3234181/ncconfigure.zip --no-ch +wget https://github.com/Unidata/netcdf-c/files/3234181/ncconfigure.zip --no-ch unzip ncconfigure.zip cd .. diff --git a/package/optimized-routines/20.02/clang/install.sh b/package/optimized-routines/20.02/clang/install.sh index f4e93d4..9e41792 100755 --- a/package/optimized-routines/20.02/clang/install.sh +++ b/package/optimized-routines/20.02/clang/install.sh @@ -3,7 +3,7 @@ set -x set -e . ${DOWNLOAD_TOOL} -u https://codeload.github.com/ARM-software/optimized-routines/tar.gz/v20.02 -f optimized-routines-20.02.tar.gz cd ${JARVIS_TMP} -tar -zxvf ${JARVIS_DOWNLOAD}/optimized-routines-20.02.tar.gz +tar zxvf ${JARVIS_DOWNLOAD}/optimized-routines-20.02.tar.gz cd optimized-routines-20.02 sed -i "13c\CC = clang" config.mk.dist sed -i "19c\HOST_CC = clang" config.mk.dist diff --git a/proxy.sh b/proxy.sh index ed7ead9..b44a75e 100644 --- a/proxy.sh +++ b/proxy.sh @@ -1,31 +1,39 @@ +#!/bin/bash -echo '输入 1 到 4 之间的数字,选择合适的github源' +# 定义代理URL +declare -A proxies=( + [1]="https://github.com" + [2]="https://gh.ddlc.top/https://github.com" + [3]="https://gh.con.sh/https://github.com" + [4]="https://hub.gitmirror.com/https://github.com" + [5]="https://ghproxy.com/https://github.com" + [6]="https://ghproxy.cc/https://github.com" +) + +echo '输入 1 到 7 之间的数字,选择合适的git源' echo '1) 官方源' echo '2) 美国高速源1' echo '3) 美国高速源2' echo '4) 美国高速源3' echo '5) 韩国高速源1' echo '6) 韩国高速源2' +echo '7) Gitee高速源' +echo '8) 恢复官方源' -echo '你输入的数字为:' -read aNum -case $aNum in - 1) sed -i -e 's/JARVIS_PROXY=.*/JARVIS_PROXY=https:\/\/github.com/g' init.sh - ;; - 2) sed -i -e 's/JARVIS_PROXY=.*/JARVIS_PROXY=https:\/\/gh.ddlc.top\/https:\/\/github.com/g' init.sh - ;; - 3) sed -i -e 's/JARVIS_PROXY=.*/JARVIS_PROXY=https:\/\/gh.con.sh\/https:\/\/github.com/g' init.sh - ;; - 4) sed -i -e 's/JARVIS_PROXY=.*/JARVIS_PROXY=https:\/\/hub.gitmirror.com\/https:\/\/github.com/g' init.sh - ;; - 5) sed -i -e 's/JARVIS_PROXY=.*/JARVIS_PROXY=https:\/\/ghproxy.com\/https:\/\/github.com/g' init.sh - ;; - 6) sed -i -e 's/JARVIS_PROXY=.*/JARVIS_PROXY=https:\/\/ghproxy.cc\/https:\/\/github.com/g' init.sh - ;; - *) echo '你没有输入 1 到 6 之间的数字' - ;; -esac - - - +read -p '你输入的数字为: ' aNum +if [[ $aNum =~ ^[1-6]$ ]]; then + # 更新init.sh中的代理URL + sed -i -e "s|JARVIS_PROXY=.*|JARVIS_PROXY=${proxies[$aNum]}|g" init.sh + source ./init.sh +elif [[ $aNum -eq 'a' ]]; then + # 备份并替换dataService.py文件 + rm -rf src/dataService.py + cp src/dataService.py.fast src/dataService.py +elif [[ $aNum -eq 'b' ]]; then + # 恢复dataService.py文件 + rm -rf src/dataService.py + cp src/dataService.py.ori src/dataService.py +else + echo '无效输入,请输入 1 到 7 之间的数字' +fi \ No newline at end of file diff --git a/src/dataService.py.fast b/src/dataService.py.fast new file mode 100644 index 0000000..09e888d --- /dev/null +++ b/src/dataService.py.fast @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import os +import platform + +from toolService import ToolService + +class Singleton(type): + + def __init__(self, name, bases, dictItem): + super(Singleton,self).__init__(name,bases, dictItem) + self._instance = None + + def __call__(self, *args, **kwargs): + if self._instance is None: + self._instance = super(Singleton,self).__call__(*args, **kwargs) + return self._instance + +class DataService(object,metaclass=Singleton): + # Hardware Info + avail_ips='' + # Dependent Software environment Info + dependency = '' + module_content='' + env_file = 'env.sh' + + # Application Info + app_name = '' + build_dir = '' + binary_dir = '' + binary_file = '' + case_dir = '' + + # cmd info + build_cmd = '' + clean_cmd = '' + run_cmd = {} + batch_cmd = '' + loop_cmd = '' + job_cmd = '' + job2_cmd = '' + #Other Info + env_config_file = 'JARVIS_CONFIG' + config_file = 'data.config' + meta_file = '.meta' + root_path = os.getcwd() + download_info = '' + #perf info + kperf_para = '' + perf_para = '' + nsys_para = '' + ncu_para = '' + hpccollect_para = '' + hpcreport_para = '' + def get_abspath(self, relpath): + return os.path.join(DataService.root_path, relpath) + + def __init__(self): + self.isARM = platform.machine() == 'aarch64' + self.tool = ToolService() + self.data_process() + # 优先读取环境变量的JARVIS_CONFIG配置,方便多人同时操控 + # 然后读取.meta文件中的值 + # 最后读取data.config中的值 + def get_config_file_name(self): + CONFIG_ENV = os.getenv(DataService.env_config_file) + if CONFIG_ENV is not None: + print("LOAD Config file from ENV:", CONFIG_ENV) + return CONFIG_ENV + if not os.path.exists(DataService.meta_file): + return DataService.config_file + return self.tool.read_file(DataService.meta_file) + + def get_data_config(self): + file_name = self.get_config_file_name() + file_path = self.get_abspath(file_name) + if not os.path.exists(file_path): + print("config file not found, switch to default data.config.") + file_path = self.get_abspath(DataService.config_file) + with open(file_path, encoding='utf-8') as file_obj: + contents = file_obj.read() + return contents.strip() + + def is_empty(self, content): + return len(content) == 0 or content.isspace() or content == '\n' + + def read_rows(self, rows, start_row, needs_strip=True): + data = '' + row = rows[start_row] + if needs_strip: + row = row.strip() + while not row.startswith('['): + if not self.is_empty(row): + data += row + '\n' + start_row += 1 + if start_row == len(rows): + break + row = rows[start_row] + if needs_strip: + row = row.strip() + return start_row, data + + def read_rows_kv(self, rows, start_row): + data = {} + row = rows[start_row].strip() + while not row.startswith('['): + if '=' in row: + key, value = row.split('=', 1) + data[key.strip()] = value.strip() + start_row += 1 + if start_row == len(rows): + break + row = rows[start_row].strip() + return start_row, data + + def set_app_info(self, data): + DataService.app_name = data['app_name'] + DataService.build_dir = data['build_dir'] + DataService.binary_dir = data['binary_dir'] + DataService.case_dir = data['case_dir'] + + def set_perf_info(self, data): + DataService.kperf_para = data['kperf'] if 'kperf' in data else '' + DataService.perf_para = data['perf'] if 'perf' in data else '' + DataService.nsys_para = data['nsys'] if 'nsys' in data else '' + DataService.ncu_para = data['ncu'] if 'ncu' in data else '' + DataService.hpccollect_para = data['hpccollect'] if 'hpccollect' in data else '' + DataService.hpcreport_para = data['hpcreport'] if 'hpcreport' in data else '' + + def split_two_part(self, data): + split_list = data.split(' ', 1) + first = split_list[0] + second = '' + if len(split_list) > 1: + second = split_list[1] + return (first, second) + + def data_integration(self, config_data): + DataService.avail_ips = config_data.get('[SERVER]','') + DataService.download_info = config_data.get('[DOWNLOAD]','') + DataService.dependency = config_data.get('[DEPENDENCY]','') + DataService.module_content = config_data.get('[ENV]','') + DataService.build_cmd = config_data.get('[BUILD]','') + DataService.clean_cmd = config_data.get('[CLEAN]','') + DataService.run_cmd = config_data.get('[RUN]','') + DataService.batch_cmd = config_data.get('[BATCH]','') + DataService.loop_cmd = config_data.get('[LOOP]','') + DataService.job_cmd = config_data.get('[JOB]','') + DataService.job2_cmd = config_data.get('[JOB2]','') + data = config_data.get('[APP]','') + perf_data = config_data.get('[PERF]','') + self.set_app_info(data) + self.set_perf_info(perf_data) + DataService.binary_file, DataService.binary_para = self.split_two_part(DataService.run_cmd['binary']) + + def data_process(self): + contents = self.get_data_config() + rows = contents.split('\n') + rowIndex = 0 + handlers = { + '[SERVER]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[DOWNLOAD]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[DEPENDENCY]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[ENV]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[APP]': lambda rows, rowIndex: self.read_rows_kv(rows, rowIndex+1), + '[BUILD]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[CLEAN]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[RUN]': lambda rows, rowIndex: self.read_rows_kv(rows, rowIndex+1), + '[BATCH]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[LOOP]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[JOB]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[JOB2]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[PERF]': lambda rows, rowIndex: self.read_rows_kv(rows, rowIndex+1) + } + config_data = {} + while rowIndex < len(rows): + row = rows[rowIndex].strip() + if row in handlers.keys(): + rowIndex, config_data[row] = handlers[row](rows, rowIndex) + else: + rowIndex += 1 + self.data_integration(config_data) + + def get_clean_cmd(self): + return f''' +{self.get_env()} +cd {DataService.build_dir} +{DataService.clean_cmd} +''' + def get_env(self): + return f'''source ./init.sh +./jarvis -e +source ./{DataService.env_file}''' + + def get_build_cmd(self): + return f''' +{self.get_env()} +cd {DataService.build_dir} +{DataService.build_cmd} +''' + + def get_run(self): + nodes = int(DataService.run_cmd['nodes']) + run_cmd = DataService.run_cmd['run'] + hostfile = '' + if nodes > 1: + hostfile = f'--hostfile {DataService.root_path}/hostfile' + if 'mpi' in run_cmd: + run_cmd = run_cmd.replace('mpirun', f'mpirun {hostfile}') + binary = os.path.join(DataService.binary_dir, DataService.binary_file) + return f'''{run_cmd} {binary} {DataService.binary_para}''' + + def get_run_cmd(self): + return f''' +{self.get_env()} +cd {DataService.case_dir} +{self.get_run()} +''' diff --git a/src/dataService.py.ori b/src/dataService.py.ori new file mode 100644 index 0000000..1d70cb2 --- /dev/null +++ b/src/dataService.py.ori @@ -0,0 +1,218 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +import os +import platform + +from toolService import ToolService + +class Singleton(type): + + def __init__(self, name, bases, dictItem): + super(Singleton,self).__init__(name,bases, dictItem) + self._instance = None + + def __call__(self, *args, **kwargs): + if self._instance is None: + self._instance = super(Singleton,self).__call__(*args, **kwargs) + return self._instance + +class DataService(object,metaclass=Singleton): + # Hardware Info + avail_ips='' + # Dependent Software environment Info + dependency = '' + module_content='' + env_file = 'env.sh' + + # Application Info + app_name = '' + build_dir = '' + binary_dir = '' + binary_file = '' + case_dir = '' + + # cmd info + build_cmd = '' + clean_cmd = '' + run_cmd = {} + batch_cmd = '' + loop_cmd = '' + job_cmd = '' + job2_cmd = '' + #Other Info + env_config_file = 'JARVIS_CONFIG' + config_file = 'data.config' + meta_file = '.meta' + root_path = os.getcwd() + download_info = '' + #perf info + kperf_para = '' + perf_para = '' + nsys_para = '' + ncu_para = '' + hpccollect_para = '' + hpcreport_para = '' + def get_abspath(self, relpath): + return os.path.join(DataService.root_path, relpath) + + def __init__(self): + self.isARM = platform.machine() == 'aarch64' + self.tool = ToolService() + self.data_process() + # 优先读取环境变量的JARVIS_CONFIG配置,方便多人同时操控 + # 然后读取.meta文件中的值 + # 最后读取data.config中的值 + def get_config_file_name(self): + CONFIG_ENV = os.getenv(DataService.env_config_file) + if CONFIG_ENV is not None: + print("LOAD Config file from ENV:", CONFIG_ENV) + return CONFIG_ENV + if not os.path.exists(DataService.meta_file): + return DataService.config_file + return self.tool.read_file(DataService.meta_file) + + def get_data_config(self): + file_name = self.get_config_file_name() + file_path = self.get_abspath(file_name) + if not os.path.exists(file_path): + print("config file not found, switch to default data.config.") + file_path = self.get_abspath(DataService.config_file) + with open(file_path, encoding='utf-8') as file_obj: + contents = file_obj.read() + return contents.strip() + + def is_empty(self, content): + return len(content) == 0 or content.isspace() or content == '\n' + + def read_rows(self, rows, start_row, needs_strip=True): + data = '' + row = rows[start_row] + if needs_strip: + row = row.strip() + while not row.startswith('['): + if not self.is_empty(row): + data += row + '\n' + start_row += 1 + if start_row == len(rows): + break + row = rows[start_row] + if needs_strip: + row = row.strip() + return start_row, data + + def read_rows_kv(self, rows, start_row): + data = {} + row = rows[start_row].strip() + while not row.startswith('['): + if '=' in row: + key, value = row.split('=', 1) + data[key.strip()] = value.strip() + start_row += 1 + if start_row == len(rows): + break + row = rows[start_row].strip() + return start_row, data + + def set_app_info(self, data): + DataService.app_name = data['app_name'] + DataService.build_dir = data['build_dir'] + DataService.binary_dir = data['binary_dir'] + DataService.case_dir = data['case_dir'] + + def set_perf_info(self, data): + DataService.kperf_para = data['kperf'] if 'kperf' in data else '' + DataService.perf_para = data['perf'] if 'perf' in data else '' + DataService.nsys_para = data['nsys'] if 'nsys' in data else '' + DataService.ncu_para = data['ncu'] if 'ncu' in data else '' + DataService.hpccollect_para = data['hpccollect'] if 'hpccollect' in data else '' + DataService.hpcreport_para = data['hpcreport'] if 'hpcreport' in data else '' + + def split_two_part(self, data): + split_list = data.split(' ', 1) + first = split_list[0] + second = '' + if len(split_list) > 1: + second = split_list[1] + return (first, second) + + def data_integration(self, config_data): + DataService.avail_ips = config_data.get('[SERVER]','') + DataService.download_info = config_data.get('[DOWNLOADORI]','') + DataService.dependency = config_data.get('[DEPENDENCY]','') + DataService.module_content = config_data.get('[ENV]','') + DataService.build_cmd = config_data.get('[BUILD]','') + DataService.clean_cmd = config_data.get('[CLEAN]','') + DataService.run_cmd = config_data.get('[RUN]','') + DataService.batch_cmd = config_data.get('[BATCH]','') + DataService.loop_cmd = config_data.get('[LOOP]','') + DataService.job_cmd = config_data.get('[JOB]','') + DataService.job2_cmd = config_data.get('[JOB2]','') + data = config_data.get('[APP]','') + perf_data = config_data.get('[PERF]','') + self.set_app_info(data) + self.set_perf_info(perf_data) + DataService.binary_file, DataService.binary_para = self.split_two_part(DataService.run_cmd['binary']) + + def data_process(self): + contents = self.get_data_config() + rows = contents.split('\n') + rowIndex = 0 + handlers = { + '[SERVER]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[DOWNLOADORI]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[DEPENDENCY]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[ENV]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[APP]': lambda rows, rowIndex: self.read_rows_kv(rows, rowIndex+1), + '[BUILD]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[CLEAN]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[RUN]': lambda rows, rowIndex: self.read_rows_kv(rows, rowIndex+1), + '[BATCH]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1), + '[LOOP]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[JOB]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[JOB2]': lambda rows, rowIndex: self.read_rows(rows, rowIndex+1, False), + '[PERF]': lambda rows, rowIndex: self.read_rows_kv(rows, rowIndex+1) + } + config_data = {} + while rowIndex < len(rows): + row = rows[rowIndex].strip() + if row in handlers.keys(): + rowIndex, config_data[row] = handlers[row](rows, rowIndex) + else: + rowIndex += 1 + self.data_integration(config_data) + + def get_clean_cmd(self): + return f''' +{self.get_env()} +cd {DataService.build_dir} +{DataService.clean_cmd} +''' + def get_env(self): + return f'''source ./init.sh +./jarvis -e +source ./{DataService.env_file}''' + + def get_build_cmd(self): + return f''' +{self.get_env()} +cd {DataService.build_dir} +{DataService.build_cmd} +''' + + def get_run(self): + nodes = int(DataService.run_cmd['nodes']) + run_cmd = DataService.run_cmd['run'] + hostfile = '' + if nodes > 1: + hostfile = f'--hostfile {DataService.root_path}/hostfile' + if 'mpi' in run_cmd: + run_cmd = run_cmd.replace('mpirun', f'mpirun {hostfile}') + binary = os.path.join(DataService.binary_dir, DataService.binary_file) + return f'''{run_cmd} {binary} {DataService.binary_para}''' + + def get_run_cmd(self): + return f''' +{self.get_env()} +cd {DataService.case_dir} +{self.get_run()} +''' diff --git a/templates/CP2K/7.1/bisheng/data.CP2K.arm.cpu.config b/templates/CP2K/7.1/bisheng/data.CP2K.arm.cpu.config index e5bd41a..6bcbc70 100644 --- a/templates/CP2K/7.1/bisheng/data.CP2K.arm.cpu.config +++ b/templates/CP2K/7.1/bisheng/data.CP2K.arm.cpu.config @@ -31,13 +31,15 @@ module load gsl/2.6 module load hmpi/1.1.1 module load gmp/6.2.0 module load boost/1.72.0 +module load lapack-bisheng/3.8.0 export CC=mpicc CXX=mpicxx FC=mpifort ./jarvis -install libint/2.6.0 clang+mpi ./jarvis -install fftw/3.3.8 clang+mpi -./jarvis -install scalapack/2.1.0/lapack-bisheng clang+mpi +#./jarvis -install scalapack/2.1.0/lapack-bisheng clang+mpi +./jarvis -install scalapack/2.1.0/clang bisheng+mpi ./jarvis -install plumed/2.6.2 clang+mpi -module load scalapack-lapack-bisheng/2.1.0 openblas/0.3.18 +module load scalapack-clang/2.1.0 openblas/0.3.18 ./jarvis -install elpa/2019.05.001 clang+mpi tar -zxvf $JARVIS_DOWNLOAD/cp2k-7.1.tar.gz @@ -52,15 +54,19 @@ module load gsl/2.6 [APP] app_name = CP2K -build_dir = ${JARVIS_ROOT}/cp2k-7.1.0 +build_dir = ${JARVIS_ROOT} binary_dir = ${JARVIS_ROOT}/cp2k-7.1.0/exe/Linux-arm-clang/ case_dir = ${JARVIS_ROOT}/cp2k-7.1.0/benchmarks/QS/ [BUILD] +rm -rf cp2k-7.1.0 +tar -zxvf $JARVIS_DOWNLOAD/cp2k-7.1.tar.gz +tar -zxvf $JARVIS_DOWNLOAD/dbcsr-2.0.1.tar.gz -C ${JARVIS_ROOT}/cp2k-7.1.0/exts/dbcsr --strip-components=1 +cd cp2k-7.1.0 cd ./arch cp ${JARVIS_ROOT}/templates/CP2K/7.1/bisheng/Linux-arm-clang.psmp ./ -sed -i "10s%path1%${JARVIS_ROOT}/software/libs/bisheng2.1.0/hmpi1.1.11%g" Linux-arm-clang.psmp -sed -i "11s%path2%${JARVIS_ROOT}/software/libs/bisheng2%g" Linux-arm-clang.psmp +sed -i "10s%path1%${JARVIS_ROOT}/software/libs/bisheng2.1.0/hmpi1.1.1%g" Linux-arm-clang.psmp +sed -i "11s%path2%${JARVIS_ROOT}/software/libs/bisheng2.1.0/%g" Linux-arm-clang.psmp cd .. make -j 128 ARCH=Linux-arm-clang VERSION=psmp @@ -71,5 +77,4 @@ make -j 128 ARCH=Linux-arm-clang VERSION=psmp clean [RUN] run = numactl -C 0-63 mpirun --allow-run-as-root -np 64 -x OMP_NUM_THREADS=1 binary = cp2k.psmp H2O-256.inp -nodes = 1 - +nodes = 1 \ No newline at end of file diff --git a/templates/abinit/8.10.3/bisheng/data.abinit.arm.gpu.config b/templates/abinit/8.10.3/bisheng/data.abinit.arm.gpu.config index 13494ba..2d3eb57 100644 --- a/templates/abinit/8.10.3/bisheng/data.abinit.arm.gpu.config +++ b/templates/abinit/8.10.3/bisheng/data.abinit.arm.gpu.config @@ -1,13 +1,20 @@ [SERVER] 11.11.11.11 - [DOWNLOAD] +abinit/8.10.3 $JARVIS_PROXY/abinit/abinit/archive/refs/tags/8.10.3.tar.gz +atompaw/4.0.1.0 https://gitee.com/kp-hpc-mod/hpc-src/raw/master/atompaw-4.0.1.0.tar.gz +bigdft/1.7.1.25 http://forge.abinit.org/fallbacks/bigdft-1.7.1.25.tar.gz +libxc/3.0.0 https://gitee.com/kp-hpc-mod/hpc-src/raw/master/libxc-3.0.0.tar.gz +wannier90/2.0.1.1 http://forge.abinit.org/fallbacks/wannier90-2.0.1.1.tar.gz +abinit_package https://gitee.com/kp-hpc-mod/hpc-src/raw/master/0001-Patching-m_polynomial_coeff.F90-for-ability-to-compi.patch.txt abinit_patch-8.10.3.patch + +[DOWNLOADORI] abinit/8.10.3 https://www.abinit.org/sites/default/files/packages/abinit-8.10.3.tar.gz atompaw/4.0.1.0 http://forge.abinit.org/fallbacks/atompaw-4.0.1.0.tar.gz bigdft/1.7.1.25 http://forge.abinit.org/fallbacks/bigdft-1.7.1.25.tar.gz libxc/3.0.0 http://forge.abinit.org/fallbacks/libxc-3.0.0.tar.gz wannier90/2.0.1.1 http://forge.abinit.org/fallbacks/wannier90-2.0.1.1.tar.gz -abinit_package $JARVIS_PROXY/abinit/abinit/files/3586400/0001-Patching-m_polynomial_coeff.F90-for-ability-to-compi.patch.txt abinit_patch-8.10.3.patch +abinit_package https://github.comY/abinit/abinit/files/3586400/0001-Patching-m_polynomial_coeff.F90-for-ability-to-compi.patch.txt abinit_patch-8.10.3.patch [DEPENDENCY] module use ./software/modulefiles diff --git a/templates/blat/35.1/data.blat.arm.cpu.config b/templates/blat/35.1/data.blat.arm.cpu.config new file mode 100644 index 0000000..a5fd20b --- /dev/null +++ b/templates/blat/35.1/data.blat.arm.cpu.config @@ -0,0 +1,53 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +blat/35.1 https://codeload.github.com/djhshih/blat/tar.gz/v35.1 blat-35.1.tar.gz + +[DEPENDENCY] +module use ./software/modulefiles +module purge +./jarvis -install kgcc/9.3.1 com +module load kgcc/9.3.1 + + + +[ENV] +module use ./software/modulefiles +module purge +module load kgcc/9.3.1 + +[APP] +app_name = blat +build_dir = $JARVIS_ROOT +binary_dir = ${JARVIS_TMP}/blat-35.1/bin +case_dir = + + + +[BUILD] +set -x +set -e + +module use ./software/modulefiles +module purge +module load kgcc/9.3.1 +yum -y install libpng-devel + +cd ${JARVIS_TMP} +rm -rf blat-35.1 +tar -zxvf $JARVIS_DOWNLOAD/blat-35.1.tar.gz +cd ${JARVIS_TMP}/blat-35.1/ +sed -i 's/jmp_buf htmlRecover/\/\/jmp_buf htmlRecover/g' src/inc/htmshell.h +export MACHTYPE=aarch64 +make + + + +[CLEAN] +./clean_build + +[RUN] +run = +binary = +nodes = 1 diff --git a/templates/octopus/10.3/data.octopus.arm.kpgcc.cpu.config b/templates/octopus/10.3/data.octopus.arm.kpgcc.cpu.config index 30c925e..9e9da4f 100644 --- a/templates/octopus/10.3/data.octopus.arm.kpgcc.cpu.config +++ b/templates/octopus/10.3/data.octopus.arm.kpgcc.cpu.config @@ -2,7 +2,7 @@ 11.11.11.11 [DOWNLOAD] -octopus/10.3 https://octopus-code.org/down.php?file=10.3/octopus-10.3.tar.gz octopus-10.3.tar.gz +octopus/10.3 https://octopus-code.org/download/10.3/octopus-10.3.tar.gz octopus-10.3.tar.gz [DEPENDENCY] module purge diff --git a/templates/octopus/11.4/data.octopus.arm.kgcc.cpu.config b/templates/octopus/11.4/data.octopus.arm.kgcc.cpu.config new file mode 100644 index 0000000..4e89063 --- /dev/null +++ b/templates/octopus/11.4/data.octopus.arm.kgcc.cpu.config @@ -0,0 +1,99 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +octopus/11.4 https://octopus-code.org/download/11.4/octopus-11.4.tar.gz octopus-11.4.tar.gz + +[DEPENDENCY] +module purge + +./jarvis -install bisheng/2.4.0 com +module use ./software/modulefiles +module load bisheng/2.1.0 + +module purge +./jarvis -install kgcc/9.3.1 com +module use ./software/modulefiles + +module load kgcc/9.3.1 +export CC=`which gcc` +export CXX=`which g++` +export FC=`which gfortran` +./jarvis -install hmpi/1.1.1 gcc +./jarvis -install gsl/2.5 gcc +./jarvis -install lapack/3.10.1 gcc +./jarvis -install libxc/4.0.1 gcc + + + + + +module load hmpi/1.1.1 +export CC=`which mpicc` +export CXX=`which mpicxx` +export FC=`which mpifort` +export OPAL_PREFIX=$JARVIS_MPI/hmpi1.1.1-kgcc9.3.1/1.1.1 +./jarvis -install fftw/3.3.8 gcc+mpi +./jarvis -install libvdwxc/0.4.0 gcc+mpi +tar -xvf ${JARVIS_DOWNLOAD}/octopus-11.4.tar.gz + +[ENV] +module purge +module use ${JARVIS_ROOT}/software/modulefiles + +module load kgcc/9.3.1 + + +export OPAL_PREFIX=$JARVIS_MPI/hmpi1.1.1-bisheng2.4.0/1.1.1 +module load lapack/3.10.1 +module load gsl/2.5 +module load libxc/4.0.1 + +module add bisheng/2.4.0 +module load hmpi/1.1.1 + + + + + +[APP] +app_name = octopus +build_dir = ${JARVIS_ROOT}/octopus-11.4 +binary_dir = ./software/apps/bisheng/octopus/11.4 +case_dir = + +[BUILD] + + +./configure CC=mpicc CXX=mpicxx FC=mpifort \ +--prefix=${JARVIS_ROOT}/software/apps/bisheng/octopus/11.4 \ +CFLAGS='-lgfortran' \ +FCFLAGS=' -lgfortran' \ +--with-gsl-prefix==${JARVIS_LIBS}/kgcc9.3.1/gsl/2.5 \ +--with-libxc-prefix=${JARVIS_LIBS}/kgcc9.3.1/libxc/4.0.1 \ +--with-fftw-prefix=${JARVIS_LIBS}/kgcc9.3.1/hmpi1.1.1/fftw/3.3.8 \ +--with-libvdwxc-prefix=${JARVIS_LIBS}/kgcc9.3.1/hmpi1.1.1/libvdwxc/4.0.0 \ +--with-blas=${JARVIS_LIBS}/kgcc9.3.1/lapack/3.10.1/lib/librefblas.a \ +--with-lapack=${JARVIS_LIBS}/kgcc9.3.1/lapack/3.10.1/lib/liblapack.a \ +--enable-mpi \ +--disable-zdotc-test + + + + +sed -i -e '0,/FINISHED/{s/FINISHED/FINISHED1/}' -e 's/(FINISHED/(FINISHED1/g' src/multisystem/propagator.F90 +sed -i 's/type(\*)/type(c_ptr)/g' src/basic/cuda.F90 +sed -i '0,/private/{s/private/\!private/}' src/basic/clock.F90 +sed -i 's/FINISHED/FINISHED1/g' src/multisystem/system.F90 +sed -i -e 's/test_clock_a .lt. test_clock_b/clock_is_earlier(test_clock_a,test_clock_b)/g' -e 's/test_clock_a .le. test_clock_b/clock_is_equal_or_earlier(test_clock_a,test_clock_b)/g' -e 's/test_clock_a .gt. test_clock_b/clock_is_later(test_clock_a,test_clock_b)/g' -e 's/test_clock_a .ge. test_clock_b/clock_is_equal_or_later(test_clock_a,test_clock_b)/g' -e 's/test_clock_a .eq. test_clock_b/clock_is_equal(test_clock_a,test_clock_b)/g' src/main/test.F90 +sed -i '/SAFE_DEALLOCATE_P(systems)/s+^+!+g' src/main/run.F90 +sed -i -e 's/cuda_memcpy_htod(this%mem, data(1)/cuda_memcpy_htod(this%mem, c_loc(data(1))/g' -e 's/cuda_memcpy_htod(this%mem, data(1, 1)/cuda_memcpy_htod(this%mem, c_loc(data(1, 1))/g' -e 's/cuda_memcpy_htod(this%mem, data(1, 1, 1)/cuda_memcpy_htod(this%mem, c_loc(data(1, 1, 1))/g' -e 's/cuda_memcpy_dtoh(this%mem, data(1)/cuda_memcpy_dtoh(this%mem, c_loc(data(1))/g' -e 's/cuda_memcpy_dtoh(this%mem, data(1, 1)/cuda_memcpy_dtoh(this%mem, c_loc(data(1, 1))/g' -e 's/cuda_memcpy_dtoh(this%mem, data(1, 1, 1)/cuda_memcpy_dtoh(this%mem, c_loc(data(1, 1, 1))/g' src/basic/accel_inc.F90 + +make -j +make install + + +[RUN] +run = +binary = +nodes = 1 \ No newline at end of file diff --git a/templates/palabos/2.1/data.palabos.arm.cpu.config b/templates/palabos/2.1/data.palabos.arm.cpu.config new file mode 100644 index 0000000..faae46c --- /dev/null +++ b/templates/palabos/2.1/data.palabos.arm.cpu.config @@ -0,0 +1,53 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +palabos/2.1 https://gitlab.com/unigespc/palabos/-/archive/v2.1r0/palabos-v2.1r0.zip palabos-v2.1r0.zip + + +[DEPENDENCY] +module purge +./jarvis -install bisheng/3.2.0-mini com +module use ./software/modulefiles +module load bisheng/3.2.0-mini +export CC=clang CXX=clang++ FC=flang +./jarvis -install hmpi/2.3.0 clang +module use ./software/moduledeps/bisheng3.2.0 +module load hmpi/2.3.0 +./jarvis -install cmake/3.23.1 clang +module load cmake/3.23.1 + +[ENV] +module use ./software/modulefiles +module purge +module load bisheng/3.2.0-mini +module use ./software/moduledeps/bisheng3.2.0 +module load hmpi/2.3.0 +export CC=clang CXX=clang++ FC=flang +export PMIX_INSTALL_PREFIX=${OPAL_PREFIX} +cd /hpcrunner +CUR_PATH=$(pwd) +export JARVIS_ROOT=${CUR_PATH} +export JARVIS_TMP=${CUR_PATH}/tmp +export PATH=${JARVIS_TMP}/palabos-v2.1r0/examples/showCases/cavity2d:$PATH +export PATH=${JARVIS_TMP}/palabos-v2.1r0/examples/showCases/boussinesqThermal3d:$PATH + +[APP] +app_name = palabos +build_dir = ${JARVIS_ROOT} +binary_dir = ${JARVIS_TMP}/palabos-v2.1r0/ +case_dir = + +[BUILD] +cd ${JARVIS_TMP} +unzip ${JARVIS_DOWNLOAD}/palabos-v2.1r0.zip +cd palabos-v2.1r0 +cd examples/showCases/cavity2d +make -j +cd ${JARVIS_TMP}/palabos-v2.1r0/examples/showCases/boussinesqThermal3d +make -j + +[RUN] +run = +binary = +nodes = 1 diff --git a/templates/randfold/2016/data.randfold.arm.cpu.config b/templates/randfold/2016/data.randfold.arm.cpu.config new file mode 100644 index 0000000..047adc1 --- /dev/null +++ b/templates/randfold/2016/data.randfold.arm.cpu.config @@ -0,0 +1,52 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +randfold/2016 https://gitee.com/kp-hpc-mod/hpc-src/raw/master/randfold-2016.tar.gz + +[DEPENDENCY] +module use ./software/modulefiles +module purge +./jarvis -install kgcc/9.3.1 com +module load kgcc/9.3.1 + + + +[ENV] +module use ./software/modulefiles +module purge +module load kgcc/9.3.1 + +[APP] +app_name = randfold +build_dir = $JARVIS_ROOT +binary_dir = +case_dir = + + + +[BUILD] +set -x +set -e + +module use ./software/modulefiles +module purge +module load kgcc/9.3.1 + +cd ${JARVIS_TMP} +rm -rf randfold +tar -zxvf $JARVIS_DOWNLOAD/randfold-2016.tar.gz +cd ${JARVIS_TMP}/randfold/src/squid-1.9g +./configure && make +cd ${JARVIS_TMP}/randfold/src +make + + + +[CLEAN] +./clean_build + +[RUN] +run = +binary = +nodes = 1 diff --git a/templates/star/2.7.1a/data.blat.arm.cpu.config b/templates/star/2.7.1a/data.blat.arm.cpu.config new file mode 100644 index 0000000..962cbd3 --- /dev/null +++ b/templates/star/2.7.1a/data.blat.arm.cpu.config @@ -0,0 +1,54 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +STAR/2.7.1a https://gitee.com/kp-hpc-mod/hpc-src/raw/master/STAR-2.7.1a.tar.gz STAR-2.7.1a.tar.gz + +[DOWNLOADORI] +STAR/2.7.1a https://github.com/alexdobin/STAR/archive/refs/tags/2.7.1a.tar.gz STAR-2.7.1a.tar.gz + +[DEPENDENCY] +module use ./software/modulefiles +module purge +./jarvis -install kgcc/9.3.1 com +module load kgcc/9.3.1 + + + +[ENV] +module use ./software/modulefiles +module purge +module load kgcc/9.3.1 + +[APP] +app_name = STAR +build_dir = $JARVIS_ROOT +binary_dir = +case_dir = + + + +[BUILD] +set -x +set -e +module use ./software/modulefiles +module purge +module load kgcc/9.3.1 + + +cd ${JARVIS_TMP} +rm -rf STAR-2.7.1a +tar -zxvf $JARVIS_DOWNLOAD/STAR-2.7.1a.tar.gz +cd ${JARVIS_TMP}/STAR-2.7.1a +cd source +sed -i 's/\?\=/\?= \-flto \-march=native \-mcpu=tsv110/g' Makefile +make STAR + + +[CLEAN] +./clean_build + +[RUN] +run = +binary = +nodes = 1 diff --git a/templates/wrf/4.3.3/bisheng/data.wrf.arm.cpu.config b/templates/wrf/4.3.3/bisheng/data.wrf.arm.cpu.config new file mode 100644 index 0000000..2e83460 --- /dev/null +++ b/templates/wrf/4.3.3/bisheng/data.wrf.arm.cpu.config @@ -0,0 +1,72 @@ +[SERVER] +11.11.11.11 + +[DOWNLOAD] +wrf/4.3.3 $JARVIS_PROXY/wrf-model/WRF/archive/refs/tags/v4.3.3.tar.gz wrf-4.3.3.tar.gz + +[DEPENDENCY] +set -e +set -x +module purge +module use ./software/modulefiles +./jarvis -install kml/1.6.0/gcc any +./jarvis -install bisheng/2.5.0 com +module load bisheng/2.5.0 +export CC=clang CXX=clang++ FC=flang +./jarvis -install jasper/1.900.2 clang +module load jasper/1.900.2 +./jarvis -install hmpi/1.2.0 clang +module load hmpi/1.2.0 +export CC=mpicc CXX=mpicxx FC=mpifort +./jarvis -install hdf5/1.12.0/clang clang+mpi +module load hdf5-clang/1.12.0 +./jarvis -install netcdf/4.7.4/clang clang+mpi +module load netcdf-clang/4.7.4 +./jarvis -install pnetcdf/1.12.1 clang+mpi +module load pnetcdf/1.12.1 +#tar -zxvf $JARVIS_DOWNLOAD/wrf-4.3.3.tar.gz + +[ENV] +#!/bin/bash +module purge +module use ./software/modulefiles +module load bisheng/2.5.0 +module load jasper/1.900.2 +module load hmpi/1.2.0 +module load hdf5-clang/1.12.0 netcdf-clang/4.7.4 pnetcdf/1.12.1 +module load kml-gcc/1.6.0 +export WRFIO_NCD_LARGE_FILE_SUPPORT=1 +export NETCDF=$NETCDF_CLANG_PATH +export HDF5=$HDF5_CLANG_PATH +export PHDF5=$HDF5 +export PNETCDF=$PNETCDF_PATH +export JASPER=$JASPER_PATH +export JASPERLIB=$JASPER_PATH/lib +export JASPREINC=$$JASPER_PATH/include +export CPPFLAGS="-I$HDF5/include -I$PNETCDF/include -I$NETCDF/include" +export LDFLAGS="-L$HDF5/lib -L$PNETCDF/lib -L$NETCDF/lib -lnetcdf -lnetcdff -lpnetcdf -lhdf5_hl -lhdf5 -lz" +export CC=mpicc CXX=mpicxx FC=mpif90 F77=mpif90 F90=mpif90 +export WRF_DIR=$JARVIS_ROOT/WRF-4.3.3 +export MPI_LIB="-L$MPI_LIB -lmpi -lomp" +export INCLUDE=$WRF_DIR/include:$INCLUDE +export WRFIO_NCD_LARGE_FILE_SUPPORT=1 +#移动run/目录下的初始场数据 + +[APP] +app_name = WRF +build_dir = ${WRF_DIR} +binary_dir = +case_dir = ${JARVIS_ROOT}/workloads/test_wrf + +[BUILD] +echo 4 | ./configure +./compile -j 16 em_real 2>&1 | tee compile.log + +[CLEAN] +./clean + +[RUN] +run = dsub -s run.sh +binary = +nodes = 1 + diff --git a/templates/wrf/4.3.3/wrf.4.3.config b/templates/wrf/4.3.3/wrf.4.3.config index b7e6481..a439e1b 100644 --- a/templates/wrf/4.3.3/wrf.4.3.config +++ b/templates/wrf/4.3.3/wrf.4.3.config @@ -5,52 +5,34 @@ wrf/4.3.3 $JARVIS_PROXY/wrf-model/WRF/archive/refs/tags/v4.3.3.tar.gz wrf-4.3.3.tar.gz [DEPENDENCY] -set -e -set -x + module purge module use ./software/modulefiles -./jarvis -install kml/1.6.0/gcc any -./jarvis -install bisheng/2.5.0 com -module load bisheng/2.5.0 -export CC=clang CXX=clang++ FC=flang -./jarvis -install jasper/1.900.2 clang -module load jasper/1.900.2 -./jarvis -install hmpi/1.2.0 clang -module load hmpi/1.2.0 +./jarvis -install kgcc/9.3.1 com +module load kgcc/9.3.1 +export CC=gcc CXX=g++ FC=gfortran + +./jarvis -install hmpi/1.1.1 gcc +module load hmpi/1.1.1 export CC=mpicc CXX=mpicxx FC=mpifort -./jarvis -install hdf5/1.12.0/clang clang+mpi -module load hdf5-clang/1.12.0 -./jarvis -install netcdf/4.7.4/clang clang+mpi -module load netcdf-clang/4.7.4 -./jarvis -install pnetcdf/1.12.1 clang+mpi -module load pnetcdf/1.12.1 -#tar -zxvf $JARVIS_DOWNLOAD/wrf-4.3.3.tar.gz +./jarvis -install hdf5/1.10.1 gcc +./jarvis -install package/pnetcdf/1.11.2 gcc +./jarvis -install package/netcdf/4.7.0 gcc +./jarvis -install optimized-routines/20.02 gcc +cd ${JARVIS_TMP} + +tar -zxvf $JARVIS_DOWNLOAD/wrf-4.3.3.tar.gz [ENV] -#!/bin/bash module purge module use ./software/modulefiles -module load bisheng/2.5.0 -module load jasper/1.900.2 -module load hmpi/1.2.0 -module load hdf5-clang/1.12.0 netcdf-clang/4.7.4 pnetcdf/1.12.1 -module load kml-gcc/1.6.0 -export WRFIO_NCD_LARGE_FILE_SUPPORT=1 -export NETCDF=$NETCDF_CLANG_PATH -export HDF5=$HDF5_CLANG_PATH -export PHDF5=$HDF5 -export PNETCDF=$PNETCDF_PATH -export JASPER=$JASPER_PATH -export JASPERLIB=$JASPER_PATH/lib -export JASPREINC=$$JASPER_PATH/include -export CPPFLAGS="-I$HDF5/include -I$PNETCDF/include -I$NETCDF/include" -export LDFLAGS="-L$HDF5/lib -L$PNETCDF/lib -L$NETCDF/lib -lnetcdf -lnetcdff -lpnetcdf -lhdf5_hl -lhdf5 -lz" -export CC=mpicc CXX=mpicxx FC=mpif90 F77=mpif90 F90=mpif90 -export WRF_DIR=$JARVIS_ROOT/WRF-4.3.3 -export MPI_LIB="-L$MPI_LIB -lmpi -lomp" -export INCLUDE=$WRF_DIR/include:$INCLUDE -export WRFIO_NCD_LARGE_FILE_SUPPORT=1 -#移动run/目录下的初始场数据 +module load kgcc/9.3.1 +module load hmpi/1.1.1 +export CC=mpicc CXX=mpicxx FC=mpifort +module load pnetcdf/1.11.2 +module load netcdf/4.7.0 +module load optimized-routines/20.02 + [APP] app_name = WRF @@ -59,8 +41,72 @@ binary_dir = case_dir = ${JARVIS_ROOT}/workloads/test_wrf [BUILD] +cd ${JARVIS_TMP} +cd WRF-4.3.3 + +export HDF5=`which h5diff` +export HDF5=${HDF5%/*/*} +export NETCDF=`nc-config --prefix` +export PNETCDF=`pnetcdf-config --prefix` + +export CPPFLAGS="-I$HDF5/include -I$PNETCDF/include -I$NETCDF/include" +export LDFLAGS="-L$HDF5/lib -L$PNETCDF/lib -L$NETCDF/lib -lnetcdf -lnetcdff -lpnetcdf -lhdf5_hl -lhdf5 -lz" +export WRFIO_NCD_LARGE_FILE_SUPPORT=1 + +sed -i $((`sed -n '$=' arch/configure.defaults`-2)),$((`sed -n '$=' arch/configure.defaults`))d arch/configure.defaults + +mathlib_path=$JARVIS_ROOT/software/compiler/kgcc/9.3.1/lib64/libhpc +cat >> arch/configure.defaults <&1 | tee compile.log + +./compile em_real 2>&1 | tee -a compile.log + [CLEAN] ./clean -- Gitee From 446e843c293c07462403e8a11ea20a84f7ace2f8 Mon Sep 17 00:00:00 2001 From: sunlock0653 Date: Tue, 3 Dec 2024 14:43:04 +0800 Subject: [PATCH 2/2] fix wrf problem --- templates/wrf/4.3.3/wrf.4.3.config | 2 ++ 1 file changed, 2 insertions(+) diff --git a/templates/wrf/4.3.3/wrf.4.3.config b/templates/wrf/4.3.3/wrf.4.3.config index a439e1b..40d7ea7 100644 --- a/templates/wrf/4.3.3/wrf.4.3.config +++ b/templates/wrf/4.3.3/wrf.4.3.config @@ -15,8 +15,10 @@ export CC=gcc CXX=g++ FC=gfortran ./jarvis -install hmpi/1.1.1 gcc module load hmpi/1.1.1 export CC=mpicc CXX=mpicxx FC=mpifort +module load hdf5/1.10.1 ./jarvis -install hdf5/1.10.1 gcc ./jarvis -install package/pnetcdf/1.11.2 gcc +module load pnetcdf/1.11.2 ./jarvis -install package/netcdf/4.7.0 gcc ./jarvis -install optimized-routines/20.02 gcc cd ${JARVIS_TMP} -- Gitee