diff --git a/README.md b/README.md
index 6353c2802542c57884454a5c2e5fbc6dcca3ba67..1025b0532ca6b41136ccee64907ae688a725e7a3 100644
--- a/README.md
+++ b/README.md
@@ -1,11 +1,11 @@
# HPCRunner : 贾维斯智能助手
## ***愿景:自动容器化助力极简部署,一站式调优HPC应用***
-
+
### 项目背景
HPC被喻为是IT行业“金字塔上的明珠”,其部署、编译、运行、性能采集分析的门槛非常高,不同的机器上部署HPC应用耗费大量精力,而且很多情况下需要同时部署ARM/X86两套环境进行验证,增加了很多的重复性工作,无法聚焦核心算法优化。
-
+
### 项目特色
@@ -36,60 +36,182 @@
| init.sh | 贾维斯初始化文件 | |
| jarvis | 贾维斯启动入口 | |
-### 已验证HPC应用
-
-气象海洋领域:
-
-- [x] WRF
-
-- [x] CMAQ
-
-- [x] fvcom
-
-- [x] SPECFEM3D_GLOBE
-
-- [x] udunits
-
-流体力学领域:
-
-- [x] OpenFOAM
-
-- [x] SU2
-
-- [x] miniFE
-
-计算化学领域:
-
-- [x] CP2K
-- [x] nwchem
-- [x] Amber
-- [x] QE
-
-- [x] VASP
-
-- [x] ABINIT
-
-- [x] SIESTA
-
-量子力学领域:
-
-- [x] octopus
-
-生命科学领域:
-
-- [x] bedtools
-
-- [x] blast
-
-- [x] bwa
-
-- [x] gatk
-
-- [x] octave
-
-- [x] picard
+### 支持安装的依赖列表
+| 软件名 | 软件信息 | 类别 |
+| ------- | -------------- | --------- |
+| antlr | 代码生成器,用于构建编译器和解释器 | 开发工具 |
+| cairo | 2D图形库,支持多种输出设备和格式 | 图像处理 |
+| fftw | 快速傅里叶变换库,支持多种算法和精度 | 数学库 |
+| go | 编程语言,具有高效的垃圾回收和并发特性 | 开发工具 |
+| htslib | 高通量测序数据处理库,支持多种常见格式的文件操作 | 数据库 |
+| kfft | 快速傅里叶变换库鲲鹏版本 | 数学库 |
+| libxml2 | 轻量级、可移植的XML解析库 | 开发工具 |
+| nvhpc | NVIDIA HPC SDK,包含CUDA和Fortran编译器 | 开发工具 |
+| osu | 基准测试套件,用于衡量系统性能 | 性能评估 |
+| Porting | HPC应用迁移工具,支持将应用迁移到鲲鹏 | 应用迁移 |
+| scotch | 科学计算软件包,包括图划分、矩阵操作等模块 | 科学计算 |
+| vis5dplus | 五维数据可视化软件,支持多种数据格式和渲染方式 | 可视化 |
+| arpack | 稀疏矩阵特征值计算库 | 数学库 |
+| automake | GNU Autotools工具集的一部分,用于生成Makefile | 开发工具 |
+| cmake | 用于管理C/C++软件构建和依赖关系的跨平台工具 | 开发工具 |
+| freetype | TrueType字体渲染引擎 | 图像处理 |
+| g2clib | 处理GRIB和GRIB2格式气象数据的库 | 数据库 |
+| grads | 可视化气象数据的软件 | 可视化 |
+| grib_api | 处理GRIB和BUFR格式气象数据的库 | 数据库 |
+| Hyper-tuner | 高性能计算任务调优工具 | 性能优化 |
+| hypre | 大规模稀疏线性系统求解器 | 数学库 |
+| kgcc | 基于鲲鹏平台极致优化的GCC编译器 | 开发工具 |
+| kml | 基于鲲鹏平台极致优化的数学库 | 数学库 |
+| mesa | 开源3D图形库 | 图像处理 |
+| metis | 图划分和重排列库 | 科学计算 |
+| oneapi | Intel开发的工具包,支持各种体系结构的HPC应用 | 开发工具 |
+| openblas | 线性代数库,实现BLAS接口 | 数学库 |
+| parmetis | 划分大型稀疏图形的高性能库 | 科学计算 |
+| petsc | 大规模科学计算软件包 | 科学计算 |
+| precice | 进程耦合库,用于将不同物理学模型耦合起来 | 应用部署 |
+| proj | 地理空间数据处理库 | 地理信息 |
+| singularity | 容器化解决方案 | 应用部署 |
+| slepc | 大规模特征值计算库 | 数学库 |
+| wxWidgets | 跨平台窗口工具包 | 开发工具 |
+| yaml-cpp | C++ YAML解析器和生成器 | 开发工具 |
+| bedtools | 用于基因组特征分析的软件 | 数据库 |
+| ctffind | 基于图像处理的电子显微镜聚焦软件 | 图像处理 |
+| gatk | 基因组变异分析工具 | 序列分析 |
+| gsl | GNU科学库,提供多种数学函数和数据结构 | 数学库 |
+| ImageMagick | 处理图像的开源软件 | 图像处理 |
+| lapack | 线性代数库,主要实现了BLAS接口 | 数学库 |
+| mfem | 可扩展有限元方法库 | 数学库 |
+| opencoarrays | 并行编程库 | 开发工具 |
+| picard | 处理生物信息数据的Java库 | 序列分析 |
+| python3 | Python编程语言的最新版本 | 开发工具 |
+| spglib | 空间群处理库 | 科学计算 |
+| zlib | 压缩库 | 工具库 |
+| bisheng | 基于鲲鹏极致优化的毕晟编译器,基于LLVM体系 | 开发工具 |
+| blas | 基本线性代数子程序 | 数学库 |
+| curl | 数据传输工具 | 工具库 |
+| cuda | NVIDIA的并行计算平台 | 并行编程 |
+| gcc | GNU C和C++编译器 | 开发工具 |
+| gdal | 用于地理空间数据转换和处理的开源库 | 地理信息 |
+| hdf4 | HDF4数据文件格式处理库 | 科学计算 |
+| hdf5 | HDF5数据文件格式处理库 | 科学计算 |
+| ioapi | 常见大气化学模型输出和输入预处理库 | 数据库 |
+| IPM | 描述HPC应用程序的性能测量的套件 | 性能优化 |
+| libint | 提供高精度库令积分的C库 | 数学库 |
+| libjpeg | JPEG图像压缩/解压缩库 | 图像处理 |
+| mpich | 高性能消息传递接口库 | 并行编程 |
+| mumps | 大规模稀疏线性系统求解器 | 数学库 |
+| opencv | 开源计算机视觉和机器学习软件库 | 图像处理 |
+| openjpeg | 用于压缩JPEG2000数据的开源库 | 图像处理 |
+| pio | 访问并行IO的工具 | 数据库 |
+| pixman | 图像处理和绘图库 | 图像处理 |
+| R | 开源统计计算和绘图软件 | 开发工具 |
+| spooles | 大规模稀疏线性代数Solver | 数学库 |
+| szip | 压缩库 | 工具库 |
+| boost | 十多年来一直是C++开发人员不可或缺的库 | 开发工具 |
+| bowtie2 | 测序匹配工具 | 序列分析 |
+| darshan | HPC应用程序性能分析工具,IO性能分析 | 性能优化 |
+| eigen3 | C++模版实现的线性代数库 | 数学库 |
+| glibc | GNU C语言库 | 工具库 |
+| git | 分布式版本控制系统 | 开发工具 |
+| hdf-eos2 | HDF-EOS2数据集处理库 | 科学计算 |
+| hdf-eos5 | HDF-EOS5数据集处理库 | 科学计算 |
+| jasper | 图像压缩/解压缩库 | 图像处理 |
+| jellyfish | 海星组装工具 | 序列分析 |
+| libpng | PNG图像格式处理库 | 图像处理 |
+| libvori | 计算相邻格点之间夹角,适用于大尺寸网格 | 科学计算 |
+| ncl | NCAR命令语言 | 开发工具 |
+| ncview | 可视化海洋和气象数据 | 可视化 |
+| openlb | 模拟流体现象的软件 | 科学计算 |
+| openmpi | 高性能消息传递接口库 | 并行编程 |
+| pkg-config | 安装GNU和Unix的编译器等工具所需的参数 | 工具库 |
+| plumed | 对构象变化进行统计物理和化学分析的软件包 | 序列分析 |
+| samtools | 处理NGS数据的磁盘和内存带索引文件的命令列表 | 数据库 |
+| salmon | 快速准确地从RNA-seq读数估计转录本表达水平 | 数据库 |
+| tau | HPC应用程序性能分析工具 | 性能优化 |
+| udunits | 单位标准化的C程序中用于解释单位 | 开发工具 |
+| bwa | 测序匹配工具 | 序列分析 |
+| elpa | 提供多种实现和算法的Eigenvalue求解器 | 数学库 |
+| gmp | 高精度计算库 | 数学库 |
+| hmpi | 高性能消息传递接口库 | 并行编程 |
+| kahip | 图划分库 | 图形计算 |
+| libxc | C语言库,可用于从交换关联功能获得DFT近似 | 数学库 |
+| netcdf | 处理气象和海洋科学等领域大型科学数据的C库 | 科学计算 |
+| optimized-routines | BLAS,LAPACK和这些程序中相关库的优化版本 | 数学库 |
+| pnetcdf | 访问并行I/O的工具库 | 数据库 |
+| scalapack | 大规模稠密线性代数求解器 | 数学库 |
+| valgrind | 内存调试和性能分析工具 | 开发工具 |
+
+### 支持安装的HPC应用列表
+
+| 应用名 | 应用信息 | 领域 |
+| ---------------- | --------------------------------------------- | --------- |
+| abinit | 第一个完全自主实现密度泛函理论的程序 | 科学计算 |
+| agcm | 气象局自主研发的全球大气环流谱模式 | 大气科学 |
+| amber | 分子动力学模拟软件 | 生命科学 |
+| bowtie2 | 测序匹配工具 | 序列分析 |
+| bwa | 分析二代测序数据 | 序列分析 |
+| calculix | 有限元分析代码 | 工程 |
+| duns | 模拟大气化学反应 | 大气科学 |
+| elmer | 多物理场模拟系统 | 数学库 |
+| grapes | 气象预报应用 | 大气科学 |
+| gromacs | 生物分子动力学软件 | 生命科学 |
+| imb | Intel MPI Benchmarks | 性能优化 |
+| ImageMagick | 图像处理命令行工具 | 图像处理 |
+| ioapi | I/O API支持emission和achimie模型 | 大气科学 |
+| mg-cfd | 并行计算流体力学软件 | 科学计算 |
+| mfem | 软件库,解决非线性问题和超大规模的并行问题 | 数学库 |
+| nco | 并行化Unix / Linux命令行工具,可用于处理NetCDF文件 | 科学计算 |
+| nwchem | 高性能计算量子化学模拟软件 | 化学 |
+| ncview | 可视化海洋和气象数据 | 可视化 |
+| openfoam | 开源的CFD软件 | 科学计算 |
+| openjpeg | 图像格式处理库 | 图像处理 |
+| openlb | 模拟流体现象的软件 | 科学计算 |
+| opencv | 开源计算机视觉库 | 计算机视觉 |
+| pytorch | Python语言驱动的深度学习框架 | 机器学习 |
+| qe | 第一个基于密度泛函理论的自由软件 | 科学计算 |
+| qmcpack | 基于Monte Carlo方法的量子物理仿真程序 | 物理学 |
+| samtools | 处理NGS数据的磁盘和内存带索引文件的命令列表 | 数据库 |
+| scotch | 图划分库 | 图形计算 |
+| siesta | 第一性原理计算软件 | 物理学 |
+| SU2 | 开源大规模CFD程序 | 科学计算 |
+| trinity | RNA-seq transcriptome拼装器 | 序列分析 |
+| udunits | C程序中用于解释单位的库 | 开发工具 |
+| bcc-esm | 全球气候系统模型 | 大气科学 |
+| bedtools | 常见的基因组工具 | 生命科学 |
+| blast | 序列匹配软件 | 序列分析 |
+| CMAQ | 使用化学传输模型的空气质量建模工具 | 大气科学 |
+| CP2K | 高精度物理和化学模拟 | 科学计算 |
+| CESM | 全球气候模型 | 大气科学 |
+| ctffind | 粒子旋转平均程序,用于酶成像等领域 | 生命科学 |
+| fvcom | 具有海洋生态动力学和水质应用的三维浪涌模型 | 海洋科学 |
+| gatk | 基因组变异检测框架 | 生命科学 |
+| grads | 可视化大气-土壤系统模型 | 数据可视化 |
+| hpcg | 并行HPC线性求解器性能基准 | 性能优化 |
+| hpl | HPL CheckRecd性能基准 | 性能优化 |
+| htslib | 用于高通量序列数据处理的C库 | 生命科学 |
+| jasper | JPEG-2000图像压缩库 | 图像处理 |
+| lammps | 大型分子动力学软件 | 生命科学 |
+| libjpeg | 压缩和解压缩JPEG影象 | 图像处理 |
+| miniFE | 有限元求解器 | 工程 |
+| mumps | 并行稠密和稀疏直接线性求解器 | 数学库 |
+| namd | 大规模分子动力学仿真软件 | 生命科学 |
+| ncl | NCAR Command Language,用于气象和大气科学 | 大气科学 |
+| octave | 数值计算软件包 | 数学库 |
+| octopus | 有限成键密度泛函理论程序 | 科学计算 |
+| OpenCoarrays | 使用Fortran COARRAYS的并行编程模式 | 并行编程 |
+| op2 | 一种快速GPU加速的稠密矩阵操作库 | 数学库 |
+| picard | 工具套件,用于操纵大规模数据集 | 生命科学 |
+| petsc | 并行线性代数工具 | 数学库 |
+| rmaps-now | 短时预报应用 | 大气科学 |
+| relion | 单粒子冷冻电镜图像处理软件 | 生命科学 |
+| roms | 海洋环境建模工具 | 海洋科学 |
+| SPECFEM3D_GLOBE | 全球弹性波地震模拟 | 地球物理 |
+| slepc | 大型特征值问题求解器 | 数学库 |
+| stream | 用于衡量计算机系统内存带宽的性能,为数据读写的不同操作提供独立的评估 | 性能优化 |
+| wannier90 | 转换Bloch波函数为Wannier函数的程序 | 物理学 |
+| wrf | 天气预报和研究模型 | 大气科学 |
+| wxWidgets | 用于创建跨平台GUI应用程序的开发工具 | 开发工具 |
-- [x] relion
### 使用说明
@@ -111,22 +233,34 @@ source ./init.sh
| [BUILD] | HPC应用构建脚本 | make -j 128 |
| [CLEAN] | HPC应用编译清理脚本 | make -j 128 clean |
| [RUN] | HPC应用运行配置,包括前置命令、应用命令和节点个数 | run = mpirun -np 2
binary = cp2k.psmp H2O-256.inp
nodes = 1 |
+| [JOB] | HPC应用作业调度运行配置 | 多瑙作业调度脚本 |
| [BATCH] | HPC应用批量运行命令 | #!/bin/bash
nvidia-smi -pm 1
nvidia-smi -ac 1215,1410 |
+| [LOOP] | HPC循环优化工具 | 将循环代码自动生成可进行性能分析和精度对比的程序 |
| [PERF] | 性能工具额外参数 | perf= -o
nsys=
ncu=--target-processes all --launch-skip 71434 --launch-count 1 |
-3.一键下载HPC应用(仅针对无需鉴权的链接,否则需要自行下载到downloads目录)
-
-```
-./jarvis -d
-```
-
-4.安装单个依赖
-
-```
-./jarvis -install [package/][name/version/other] [option]
-```
-
-option支持列表如下所示
+3.贾维斯命令大全
+| 功能 | 命令 | 示例/说明 |
+| --- | --- | --- |
+| 一键下载HPC应用 | ./jarvis -d | 应用将自动下载[DOWNLOAD]中地址到downloads目录 |
+| 安装依赖 | ./jarvis -install [package/][name/version/other] [option] | ./jarvis -install bisheng/2.1.0 com |
+| 一键卸载依赖 | ./jarvis -remove xxx | 支持模糊查询 ./jarvis -remove openblas/0.3.18 |
+| 一键下载并安装所有依赖 | ./jarvis -dp |读取配置文件中的[DEPENDENCY]字段内容并按顺序执行 |
+| 输出已安装的软件清单 | ./jarvis -l | 输出清单以相对路径列出 |
+| 查询已安装的软件 | ./jarvis -f xxx | 查询openblas安装路径 ./jarvis -f openblas |
+| 一键生成环境变量| ./jarvis -e | 读取配置文件中的[ENV]字段内容并生成env.sh脚本执行,执行-b/-r会自动生成 |
+| 一键编译 | ./jarvis -b | 自动进入[APP]字段中的build_dir目录,读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行 |
+| 一键运行 | ./jarvis -r | 自动进入[APP]字段中的case_dir目录,读取配置文件中的[RUN]字段内容并生成run.sh脚本执行 |
+| 一键CPU性能采集 | ./jarvis -p | 读取配置文件中的[PERF]字段内容的perf选项 |
+| 一键GPU性能采集 | ./jarvis -gp | 需安装CUDA驱动 |
+| 一键输出服务器信息 | ./jarvis -i | 输出CPU、网卡、OS、内存等信息|
+| 一键服务器性能评测 | ./jarvis -bench all
./jarvis -bench mpi
./jarvis -bench omp
./jarvis -bench gemm | 包括MPI、OMP、P2P等评测 |
+| 切换配置| ./jarvis -use XXX.config | 优先读取环境变量中的JARVIS_CONFIG,否则读取XXX.config,配置文件路径会保存到.meta文件中 |
+| 根据当前配置生成Singularity容器定义文件 | ./jarvis -container docker-hub-address | ./jarvis -container openeuler:openeuler |
+| 更新依赖库的路径 | ./jarvis -u | 如果移动了贾维斯的路径,将自动更新software/modulefiles的路径 |
+| 生成Fortran循环优化代码 | ./jarvis -loop | |
+| 帮助信息 | ./jarvis -h | |
+
+安装依赖的option支持列表如下所示
| 选项值 | 解释 | 安装目录 |
| ----------- | ----------------------------- | ------------------------- |
@@ -143,111 +277,6 @@ option支持列表如下所示
| com | 安装编译器 | software/compiler |
| any | 安装工具软件 | software/utils |
-注意,如果软件为MPI通信软件(如hmpi、openmpi),会安装到software/mpi目录
-
-eg:
-
-```
-./jarvis -install bisheng/2.1.0 com #安装毕晟编译器
-./jarvis -install package/bisheng/2.1.0 com #安装毕晟编译器
-./jarvis -install fftw/3.3.8 gcc+mpi #使用当前gcc和mpi编译fftw 3.3.8版本
-./jarvis -install openmpi/4.1.2 gcc #使用当前gcc编译openmpi 4.1.2版本
-```
-
-5.一键卸载依赖
-
-```
-./jarvis -remove openblas/0.3.18
-```
-
-6.一键下载并安装所有依赖(会读取配置文件中的[DEPENDENCY]字段内容并按顺序执行)
-
-```
-./jarvis -dp
-```
-
-7.输出已安装的软件清单
-
-```
-./jarvis -l
-```
-
-8.查询已安装的软件
-
-```
-./jarvis -f xxx
-```
-
-9.一键生成环境变量(会读取配置文件中的[ENV]字段内容并生成env.sh脚本执行,默认自动生成)
-
-```
-./jarvis -e && source ./env.sh
-```
-
-10.一键编译(会读取配置文件中的[BUILD]字段内容并生成build.sh脚本执行)
-
-```
-./jarvis -b
-```
-
-11.一键运行(会读取配置文件中的[RUN]字段内容并生成run.sh脚本执行)
-
-```
-./jarvis -r
-```
-
-12.一键性能采集(会读取配置文件中的[PERF]字段内容的perf值)
-
-```
-./jarvis -p
-```
-
-13.一键GPU性能采集(需安装nsys、ncu)
-
-```
-./jarvis -gp
-```
-
-14.一键输出服务器信息(包括CPU、网卡、OS、内存等)
-
-```
-./jarvis -i
-```
-
-15.一键服务器性能评测(包括MPI、OMP、P2P等)
-
-```
-./jarvis -bench all #运行所有benchmark
-./jarvis -bench mpi #运行MPI benchmark
-./jarvis -bench omp #运行OMP benchmark
-./jarvis -bench gemm #运行矩阵运算 benchmark
-```
-
-16.切换配置(配置文件路径会保存到.meta文件中)
-
-```
-./jarvis -use XXX.config
-```
-
-17.根据当前配置生成Singularity容器定义文件
-
-```
-./jarvis -container docker-hub-address
-eg: ./jarvis -container openeuler:openeuler
-```
-
-18.其它功能查看(网络检测等)
-
-```
-./jarvis -h
-```
-
-19.更新路径(如果移动了贾维斯的路径)
-
-```
-./jarvis -u
-```
-
### 路标

diff --git a/images/logo.png b/images/logo.png
new file mode 100644
index 0000000000000000000000000000000000000000..aa2c676275e6cfcdd5f64e237c8bcbe3298111ac
Binary files /dev/null and b/images/logo.png differ
diff --git a/package/kml/1.7.0/bisheng/install.sh b/package/kml/1.7.0/bisheng/install.sh
index 109c21ac0c0c3b3228bcde876d05a7ae39f6f955..8b8749eec8cf658f0f90df81b22506706f4fe485 100755
--- a/package/kml/1.7.0/bisheng/install.sh
+++ b/package/kml/1.7.0/bisheng/install.sh
@@ -11,7 +11,6 @@ rm -rf boostkit-kml-${kml_version}-1.aarch64.rpm
unzip -o ${JARVIS_DOWNLOAD}/BoostKit-kml_${kml_version}_bisheng.zip
rpm --force --nodeps -ivh --relocate /usr/local/kml=$1 --badreloc=$1 boostkit-kml-${kml_version}-1.aarch64.rpm
-
# generate full lapack
netlib=${JARVIS_DOWNLOAD}/lapack-3.10.1.tar.gz
netlib2=${JARVIS_DOWNLOAD}/scalapack-2.2.0.tar.gz
diff --git a/src/analysisService.py b/src/analysisService.py
index fba62098e58927330b2349ea8bb0be86e0d45cf6..52ddf727c81fc12dab52c388be2d07a3f7561482 100644
--- a/src/analysisService.py
+++ b/src/analysisService.py
@@ -64,6 +64,9 @@ class AnalysisService:
def batch_run(self):
self.jrun.batch_run()
+
+ def job_run(self):
+ self.jrun.job_run()
def clean(self):
self.jbuild.clean()
diff --git a/src/dataService.py b/src/dataService.py
index 0e8765f70c28ba0f81ca77beefb6e2c0911ac7a6..66e5763886cc25a7997c514e28d16ed8bae5c635 100644
--- a/src/dataService.py
+++ b/src/dataService.py
@@ -37,6 +37,7 @@ class DataService(object,metaclass=Singleton):
run_cmd = {}
batch_cmd = ''
loop_cmd = ''
+ job_cmd = ''
#Other Info
env_config_file = 'JARVIS_CONFIG'
config_file = 'data.config'
@@ -162,6 +163,8 @@ class DataService(object,metaclass=Singleton):
rowIndex, DataService.batch_cmd = self.read_rows(rows, rowIndex+1)
elif row == '[LOOP]':
rowIndex, DataService.loop_cmd = self.read_rows(rows, rowIndex+1, False)
+ elif row == '[JOB]':
+ rowIndex, DataService.job_cmd = self.read_rows(rows, rowIndex+1, False)
elif row == '[PERF]':
rowIndex, perf_data = self.read_rows_kv(rows, rowIndex+1)
self.set_perf_info(perf_data)
diff --git a/src/installService.py b/src/installService.py
index 3e2dc5e4d9b996dbcfd0d74f5787e2a067a21fd8..ce2155649c13b4ad57023e68342e1c94242dc220 100644
--- a/src/installService.py
+++ b/src/installService.py
@@ -275,6 +275,7 @@ class InstallService:
bins_str = ''
libs_str = ''
incs_str = ''
+ opal_prefix = ''
for file in file_list:
if not os.path.isdir(file):
continue
@@ -291,11 +292,14 @@ class InstallService:
libs_str = "prepend-path LD_LIBRARY_PATH "+':'.join(libs_dir)
if len(incs_dir) >= 1:
incs_str = "prepend-path INCLUDE " + ':'.join(incs_dir)
+ if self.is_mpi_software(sname):
+ opal_prefix = f"setenv OPAL_PREFIX {install_path}"
module_file_content = f'''#%Module1.0#####################################################################
set prefix {install_path}
set version {sversion}
setenv {sname.upper().replace('-','_')}_PATH {install_path}
+{opal_prefix}
{bins_str}
{libs_str}
{incs_str}
diff --git a/src/jarvis.py b/src/jarvis.py
index 4b23a9d3c2b394399c624f3adecf3de36281516d..ed2b7fd35ffb67530546da44b8038b93745d4007 100644
--- a/src/jarvis.py
+++ b/src/jarvis.py
@@ -28,6 +28,7 @@ class Jarvis:
parser.add_argument("-b","--build", help=f"compile {DataService.app_name}", action="store_true")
parser.add_argument("-cls","--clean", help=f"clean {DataService.app_name}", action="store_true")
parser.add_argument("-r","--run", help=f"run {DataService.app_name}", action="store_true")
+ parser.add_argument("-j","--job", help=f"run job {DataService.app_name}", action="store_true")
parser.add_argument("-p","--perf", help=f"auto perf {DataService.app_name}", action="store_true")
parser.add_argument("-kp","--kperf", help=f"auto kperf {DataService.app_name}", action="store_true")
# GPU perf
@@ -91,6 +92,9 @@ class Jarvis:
if self.args.build:
self.analysis.build()
+ if self.args.job:
+ self.analysis.job_run()
+
if self.args.run:
self.analysis.run()
diff --git a/src/runService.py b/src/runService.py
index ade3d417b6e4a144ed4ac2231d1e461c91cff9a0..9e730f6dc94c7bd881ad24c05bd6a33dd1030289 100644
--- a/src/runService.py
+++ b/src/runService.py
@@ -46,5 +46,30 @@ cd {DataService.case_dir}
run_cmd = f'''
chmod +x {batch_file}
./{batch_file}
+'''
+ self.exe.exec_raw(run_cmd)
+
+ def job_run(self):
+ job_file = 'job_run.sh'
+ job_file_path = os.path.join(self.ROOT, job_file)
+ print(f"start job run {DataService.app_name}")
+ job_content = f'''
+{self.hpc_data.get_env()}
+cd {DataService.case_dir}
+cat > run.sh << \EOF
+{DataService.job_cmd}
+EOF
+
+chmod +x run.sh
+if type djob >/dev/null 2>&1;then
+ dsub -s run.sh
+else
+ echo "dsub not exists."
+fi
+'''
+ self.tool.write_file(job_file_path, job_content)
+ run_cmd = f'''
+chmod +x {job_file}
+./{job_file}
'''
self.exe.exec_raw(run_cmd)
diff --git a/templates/grapes/3.0.2/grapes.singularity.cpu.config b/templates/grapes/3.0.2/grapes.singularity.cpu.config
new file mode 100644
index 0000000000000000000000000000000000000000..55f96fd788e425b0d053249d9dd1f04b08b90454
--- /dev/null
+++ b/templates/grapes/3.0.2/grapes.singularity.cpu.config
@@ -0,0 +1,76 @@
+[SERVER]
+11.11.11.11
+
+[DOWNLOAD]
+not opensource code
+
+[DEPENDENCY]
+set -e
+set -x
+module purge
+module use ./software/modulefiles
+./jarvis -install package/go/1.18 com
+module load go/1.18
+./jarvis -install package/singularity/3.9.9 any
+module load singularity/3.9.9
+./jarvis -install bisheng/2.5.0 com
+module load bisheng/2.5.0
+export CC=clang CXX=clang++ FC=flang
+./jarvis -install hmpi/1.2.0 clang
+module load hmpi/1.2.0
+export CC=mpicc CXX=mpicxx FC=mpifort
+
+[ENV]
+#!/bin/bash
+module purge
+module use ./software/modulefiles
+module load go/1.18
+module load singularity/3.9.9
+#module load bisheng/2.5.0
+#module load hmpi/1.2.0
+
+[APP]
+app_name = Grapes
+build_dir =
+binary_dir =
+case_dir = ${JARVIS_ROOT}/workloads/grapes_run-1KM1H_km
+
+[BUILD]
+#singularity build --sandbox grapes openeuler-base.sif
+#singularity shell -w openeuler-base
+singularity build grapes-arm-oe22-2.sif grapes
+
+[CLEAN]
+./clean
+
+[RUN]
+run = rm -rf duonao.* && dsub -s run.sh
+binary =
+nodes = 1
+
+[JOB]
+#!/bin/sh
+#DSUB -n grapes_1km
+#DSUB --job_type cosched:hmpi
+#DSUB -A root.default
+#DSUB -q root.default
+#DSUB -N 1
+#DSUB -R cpu=128
+#DSUB -oo duonao.grapes.%J.out
+#DSUB -eo duonao.grapes.%J.err
+
+##set runtime environment variables
+
+ulimit -s unlimited
+ulimit -c unlimited
+rm -rf rsl.*
+echo "----HOSTFILE generated---"
+cat $CCS_HOST_FILE
+echo "-------------------------"
+export CASE_DIR=$JARVIS_ROOT/workloads/grapes_run
+#inside run
+EXEC_CMD="time -p singularity exec -B $CASE_DIR --pwd $CASE_DIR $JARVIS_ROOT/container/grapes/grapes-arm-oe22-2.sif mpirun -n 32 -x OMP_NUM_THREADS=1 -x PATH -x LD_LIBRARY_PATH /hpcrunner/grapes_model/run/grapes.exe"
+echo "$EXEC_CMD"
+date
+$EXEC_CMD
+date
\ No newline at end of file
diff --git a/templates/hpcg/hpcg.arm.config b/templates/hpcg/hpcg.arm.config
new file mode 100644
index 0000000000000000000000000000000000000000..81f8f4d99ce8731980bef483059db1657aec6250
--- /dev/null
+++ b/templates/hpcg/hpcg.arm.config
@@ -0,0 +1,44 @@
+[SERVER]
+11.11.11.11
+
+[DOWNLOAD]
+hpcg/3.1
+
+[DEPENDENCY]
+module purge
+module use ./software/modulefiles
+./jarvis -install kgcc/10.3.1 com
+module load kgcc/10.3.1
+export CC=gcc CXX=g++ FC=gfortran
+./jarvis -install hmpi/1.2.0 gcc
+if [ ! -d "hpcg" ]; then
+ git config --global http.sslVerify false
+ git clone --depth=1 https://github.com/hpcg-benchmark/hpcg.git
+fi
+
+[ENV]
+module purge
+module use ./software/modulefiles
+module load kgcc/10.3.1
+module load hmpi/1.2.0
+export CC=mpicc CXX=mpic++ FC=mpifort
+export HPCG_HOME= $JARVIS_ROOT/hpcg
+
+[APP]
+app_name = hpcg
+build_dir = $HPCG_HOME
+binary_dir = $HPCG_HOME/bin/
+case_dir = $HPCG_HOME/bin/
+
+[BUILD]
+make -j
+echo "check if SVE exists"
+objdump -d bin/xhpcg | grep p0
+
+[CLEAN]
+make clean
+
+[RUN]
+run = mpirun --allow-run-as-root -np 32
+binary = xhpcg 104 104 104
+nodes = 1
diff --git a/templates/hpl/hpl.arm.config b/templates/hpl/hpl.arm.config
new file mode 100644
index 0000000000000000000000000000000000000000..3523e71b6a2a2a013751b065e2d2b2828ac58470
--- /dev/null
+++ b/templates/hpl/hpl.arm.config
@@ -0,0 +1,60 @@
+[SERVER]
+11.11.11.11
+
+[DOWNLOAD]
+hpl/2.3 https://netlib.org/benchmark/hpl/hpl-2.3.tar.gz
+
+[DEPENDENCY]
+module purge
+module use ./software/modulefiles
+./jarvis -install kgcc/10.3.1 com
+module load kgcc/10.3.1
+export CC=gcc CXX=g++ FC=gfortran
+./jarvis -install openblas/0.3.18 gcc
+./jarvis -install hmpi/1.2.0 gcc
+if [ ! -d "hpl-2.3" ]; then
+ tar -xzvf $JARVIS_DOWNLOADS/hpl-2.3.tar.gz
+ cp setup/Make.Linux_PII_FBLAS Make.aarch64
+fi
+
+[ENV]
+module purge
+module use ./software/modulefiles
+module load kgcc/10.3.1
+module load hmpi/1.2.0
+module load openblas/0.3.18
+export HPL_HOME= $JARVIS_ROOT/hpl-2.3
+
+[APP]
+app_name = hpl
+build_dir = $HPL_HOME
+binary_dir = $HPL_HOME/bin/aarch64
+case_dir = $HPL_HOME/bin/aarch64
+
+[BUILD]
+sed -i "64i ARCH = aarch64" make.aarch64
+sed -i "70i TOPdir = $(HPL_HOME)" make.aarch64
+sed -i "84i MPdir =" make.aarch64
+sed -i "85i MPinc =" make.aarch64
+sed -i "86i MPlib =" make.aarch64
+sed -i "95i LAdir = $(OPENBLAS_PATH)" make.aarch64
+sed -i "97i LAlib = $(LAdir)/lib/libopenblas.a" make.aarch64
+sed -i "169i CC = mpicc" make.aarch64
+sed -i "171i CCFLAGS = $(HPL_DEFS) -fomit-frame-pointer -O3 -fopenmp -funroll-loops -W -Wall" make.aarch64
+make arch=aarch64 -j
+echo "check if SVE exists"
+objdump -d bin/aarch64/xhpl | grep p0
+cd bin/aarch64
+#modify HPL.dat
+sed -i "6i 100000 Ns" HPL.dat
+sed -i "8i 256 NBs" HPL.dat
+sed -i "11i 4Ps" HPL.dat
+sed -i "12i 8Qs" HPL.dat
+
+[CLEAN]
+make arch=aarch64 clean
+
+[RUN]
+run = mpirun --allow-run-as-root -np 32
+binary = xhpl
+nodes = 1
diff --git a/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config b/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config
index d5cce55bbcc8b50853b921e279c21dac7d720a2d..58efa6379f3faf482e139b678438d71f286fe0df 100644
--- a/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config
+++ b/templates/wrf/4.2/bisheng/data.wrf.arm.cpu.config
@@ -7,12 +7,10 @@ wrf/4.2 https://github.com/wrf-model/WRF/archive/refs/tags/v4.2.tar.gz wrf-4.2.t
[DEPENDENCY]
set -e
set -x
+# basic system components
+./CHECK_ROOT && yum install -y time.aarch64
module purge
module use ./software/modulefiles
-./jarvis -install package/go/1.18 com
-module load go/1.18
-./jarvis -install package/singularity/3.9.9 any
-module load singularity/3.9.9
./jarvis -install bisheng/2.5.0 com
module load bisheng/2.5.0
export CC=clang CXX=clang++ FC=flang
@@ -23,30 +21,24 @@ 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
-./jarvis -install kgcc/9.3.1 com
-module load kgcc/9.3.1
-./jarvis -install kml/1.6.0/gcc gcc
-#./jarvis -install osu/1.0.0 clang+mpi
-#tar -zxvf $JARVIS_DOWNLOAD/wrf-4.2.tar.gz -C wrf-4.2-ori
-#tar -zxvf $JARVIS_DOWNLOAD/BJ-WRF-4.2.1.tar.gz -C wrf-4.2-ori
+./jarvis -install netcdf/4.7.4/clang clang+mpi
+module load netcdf-clang/4.7.4
+./jarvis -install kml/1.7.0/bisheng clang
+if [ ! -d "./WRF-4.2" ]; then
+ tar -zxvf $JARVIS_DOWNLOAD/wrf-4.2.tar.gz
+fi
[ENV]
#!/bin/bash
module purge
-module use ./software/modulefiles
-module load go/1.18
-module load singularity/3.9.9
+module use /hpcrunner/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 kgcc/9.3.1
-module load kml-gcc/1.6.0
-module unload kgcc/9.3.1
+module load hdf5-clang/1.12.0 pnetcdf/1.12.1 netcdf-clang/4.7.4
+module load kml-bisheng/1.7.0
export WRFIO_NCD_LARGE_FILE_SUPPORT=1
export NETCDF=$NETCDF_CLANG_PATH
export HDF5=$HDF5_CLANG_PATH
@@ -58,19 +50,67 @@ 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.2-ori/WRF-4.2.1.920B/WRF-4.2.1
+export WRF_DIR=$JARVIS_ROOT/WRF-4.2
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/WRF/conus12km/
+#case_dir = ${JARVIS_ROOT}/
+case_dir = ${JARVIS_ROOT}/workloads/conus12km/
[BUILD]
+cat << \EOF > ./arch/configure.defaults
+###########################################################
+#ARCH Linux aarch64,clang HYPERMPI#serial smpar dmpar dm+sm
+DESCRIPTION = CLANG ($SFC/$SCC)
+DMPARALLEL = 1
+OMPCPP = -D_OPENMP
+OMP = -fopenmp
+OMPCC = -fopenmp
+SFC = flang
+SCC = clang
+CCOMP = clang
+DM_FC = mpif90 -f90=$(SFC)
+DM_CC = mpicc -cc=$(SCC) -DMPI2_SUPPORT
+FC = CONFIGURE_FC
+CC = CONFIGURE_CC
+LD = $(FC) -L$(KML_BISHENG_PATH)/lib -lkm
+RWORDSIZE = CONFIGURE_RWORDSIZE
+PROMOTION = #-fdefault-real-8
+ARCH_LOCAL = -DNONSTANDARD_SYSTEM_SUBR -DWRF_USE_CLM
+CFLAGS_LOCAL = -mcpu=native -w -O3 -c -march=armv8.2-a
+LDFLAGS_LOCAL =
+CPLUSPLUSLIB =
+ESMF_LDFLAG = $(CPLUSPLUSLIB)
+FCOPTIM = -O3 -march=armv8.2-a
+FCREDUCEDOPT = $(FCOPTIM)
+FCNOOPT = -O0
+FCDEBUG = -g # -fbacktrace -ggdb-fcheck=bounds,do,mem,pointer -ffpe-trap=invalid,zero,overflow
+FORMAT_FIXED = -ffixed-form
+FORMAT_FREE = -ffree-form -ffree-line-length-0
+FCSUFFIX =
+BYTESWAPIO = -fconvert=big-endian
+FCBASEOPTS_NO_G = -w $(FORMAT_FREE) $(BYTESWAPIO)
+FCBASEOPTS = -mcpu=native $(OMP) $(FCBASEOPTS_NO_G)
+MODULE_SRCH_FLAG =
+TRADFLAG = -traditional
+CPP = /lib/cpp -P
+AR = ar
+ARFLAGS = ru
+M4 = m4 -G
+RANLIB = ranlib
+RLFLAGS =
+CC_TOOLS = $(SCC)
+
+#insert new stanza before the Fujitsu block, keep Fujitsu at the end of the list
+###########################################################
+#ARCH NULL
+EOF
+sed -i 's/derf/erf/g' ./phys/module_mp_SBM_polar_radar.F
echo 4 | ./configure
./compile -j 64 em_real 2>&1 | tee compile.log
@@ -78,7 +118,31 @@ echo 4 | ./configure
./clean
[RUN]
-run = dsub -s run.sh
+run = mpirun --allow-run-as-root -n 32 -x OMP_NUM_THREADS=1 -bind-to core $WRF_DIR/run/wrf.exe
binary =
nodes = 1
+[JOB]
+#!/bin/sh
+#DSUB -n wrf_test
+#DSUB --job_type cosched:hmpi
+#DSUB -A root.default
+#DSUB -q root.default
+#DSUB -N 1
+#DSUB -R cpu=128
+#DSUB -oo wrf.%J.out
+#DSUB -eo wrf.%J.err
+
+##set runtime environment variables
+
+ulimit -s unlimited
+ulimit -c unlimited
+rm -rf rsl.*
+echo "----HOSTFILE generated---"
+cat $CCS_HOST_FILE
+echo "-------------------------"
+EXEC_CMD="time -p mpirun $CCS_MPI_OPTIONS -n 32 -x OMP_NUM_THREADS=1 -x UCX_NET_DEVICES=mlx5_0:1 -mca io romio321 -mca pml ucx -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -bind-to core -x PATH -x LD_LIBRARY_PATH $WRF_DIR/run/wrf.exe"
+echo "$EXEC_CMD"
+date
+$EXEC_CMD
+date
\ No newline at end of file
diff --git a/templates/wrf/4.2/bisheng/run.sh b/templates/wrf/4.2/bisheng/run.sh
deleted file mode 100644
index 3f1040e6f2cfb5492c6ee663c45ae97128d63a83..0000000000000000000000000000000000000000
--- a/templates/wrf/4.2/bisheng/run.sh
+++ /dev/null
@@ -1,23 +0,0 @@
-#!/bin/sh
-#DSUB -n wrf_test
-#DSUB --job_type cosched:hmpi
-#DSUB -A root.default
-#DSUB -q root.default
-#DSUB -N 1
-#DSUB -R cpu=128
-#DSUB -oo wrf.%J.out
-#DSUB -eo wrf.%J.err
-
-##set runtime environment variables
-
-ulimit -s unlimited
-ulimit -c unlimited
-rm -rf rsl.*
-echo "----HOSTFILE generated---"
-cat $CCS_HOST_FILE
-echo "-------------------------"
-EXEC_CMD="time -p mpirun $CCS_MPI_OPTIONS -n 32 -x OMP_NUM_THREADS=1 -x UCX_NET_DEVICES=mlx5_0:1 -mca io romio321 -mca pml ucx -mca btl ^vader,tcp,openib,uct -x UCX_TLS=self,sm,rc -bind-to core -x PATH -x LD_LIBRARY_PATH $WRF_DIR/run/wrf.exe"
-echo "$EXEC_CMD"
-date
-$EXEC_CMD
-date
\ No newline at end of file