培训前熟悉一下工具
Linux常用命令
机器信息
- 用户名称:当前使用的账户
1 | whoami |
- 服务器名称:当前所使用的节点
1 | hostname |
- 机器信息:基本硬件配置
1 | lscpu |
- 内存信息
1 | free |
- 监视进程和Linux整体性能
1 | top |
文件和目录
- 查看指定目录下所有文件
1 | ls |
- 更改文件权限
1 | chmod [para] [filename] |
- 目录的创建,目录以及文件的删除
1 | mkdir [directoryName] |
- 查看当前目录 (路径)
1 | pwd |
- 目录切换
1 | cd [absolutePath] |
- 文件的创建 (空文件)
1 | touch [filename] |
- 文件/目录的移动
1 | mv [filename] [object_directiryName] |
- 文件/目录的重命名
1 | mv [old_filename] [new_filename] |
- 文件/目录的拷贝
1 | cp [source_filename] [dest_filename] |
- 文件字符搜索:grep (在文件中找字符串)
1 | grep "[string]" -r [filename] |
- 文件和目录查找:find (在目录中找文件/文件夹)
1 | find [directory] -name [filename] |
- 显示文件全部内容
1 | cat [file_name] 将文件整个内容从上到下显示在屏幕 |
- 显示文件开头
1 | head [file_name] |
- 显示文件结尾
1 | tail [file_name] |
- 显示文件结尾
1 | more [file_name] |
环境变量
- 环境变量的查看、设置
1 | env #用来显示环境变量, 显示当前用户的环境变量 |
- 将/home/user/bin路径正确加入到PATH环境变量中
1 | export PATH=/home/user/bin:$PATH |
- 可执行共享库(动态库)的目录路径
1 | LD_LIBRARY_PATH=/usr/local/lib: |
文件编辑器 Vim
- 命令行式编辑器:Vim(通过终端对文件进行查看、编写和保存)
1 | vim [filename] |
- Vim 编辑环境下的四种常用模式
- 正常模式 (Normal-mode)
- 插入模式 (Insert-mode)
- 命令模式 (Command-mode)
- 可视模式 (Visual-mode)
编译器 GCC
程序编译流程
编译过程:预处理、编译、链接
- 预处理:处理 .c 文件的 #define,#include 等预处理指令
- 编译:把高级语言 (.c) 翻译成汇编指令 (.s),再翻译成机器码 (.o)
- 链接:将所有目标文件 (.o) 和第三方库文件,链接成二进制文件 (.exe)
gcc命令的建议编译规则
1 | gcc -o [binaryfile] [sourcefile1] [sourefile2]… |
gcc 编译链接命令规则及常用编译选项
编译与链接
示例:需要编译 main.c、kernel.c 成 exe,其使用了 /home/opt/ 路径下的第三方库 math,其中 opt 目录下包含:/include/mymath.h、/lib/mymath.so
分步进行编译和链接
- 编译 (将源文件逐个编译成目标文件)
1
2
3
4gcc -o [obj_file] -c [src_file] -I [include_path]
gcc -c main.c -o main.o
gcc -c kernel.c -o kernel.o -I /home/opt/include- 链接 (将所有目标文件,以及第三方库,链接成二进制文件)
1
2
3gcc -o [bin] [all_obj_files] -L [library_path] -l [library_file_name]
gcc -o exe main.o kernel.o -L /home/opt/lib -l mymath直接编译出二进制文件
1
2
3gcc -o [bin] [all_src_files] -I [include_path] -L [library_path] -l [library_file_name]
gcc -o exe main.c kernel.c -I /home/opt/include -L /home/opt/lib -l mymath
编译选项:
- 优化等级选项:
-O0,-O1,-O2,-O3 由编译器自动进行代码性能优化,等级越大,程序运行速度越快
- 警告选项:
-Wall 显示所有警告
- 调试选项:
-g 通常结合 -O0 优化等级编译,后期可使用 gdb 工具对二进制文件进行调试。会降低程序计算速度
- 性能分析选项:
-pg 后期可用于 gprof 工具对二进制文件进行性能分析。会降低程序计算速度
- 宏定义选项
-D 对应着程序代码中的宏定义。如 -DUSE_MPI
工程构建工具 Make
GNU Make 是最基本的项目构建工具,Make 通过 Makefile 文件,获取如何构建执行文件信息,并按照 Makefile 里面设定的规则,根据源文件的依赖关系,调用编译器自动执行编译
编写 makefile
1 | BIN=hello #"="定义变量BIN: 要生成的二进制文件名称为"hello" |
作业管理系统
常用用户命令
yhinfo / yhi:资源信息查询yhalloc:资源申请 (强占)yhrun:作业提交 (自动申请资源)yhqueen / yhq:作业队列查询yhcancel:作业取消yhbatch:批处理作业yhacct:作业历史查询
查看系统信息
1 | hnu_ydy@ln6:~/test$ yhinfo |
- PARTITION 分区
- TIMELIMIT 时间限制
- NODES 节点数量
- STATE运行状态
作业提交
yhrun:交互式命令行直接提交作业,在提交节点上运行,关闭当前登录终端会导致程序退出。仅用于测试,避免以此方式提交正式作业任务。
1 | yhrun -p hpc_test -N 2 -n 32 --mpi=pmix vasp_std |
yhalloc:先获取可用节点资源,再在分配节点上提交任务。用户的作业脚本直接在提交节点上运行,关闭当前登录终端会导致程序退出。yhbatch:批处理方式提交用户作业脚本,在分配的第一个节点上运行,关闭当前登录终端不会影响作业的运行。建议用户使用yhbatch提交作业
首先编写 slurm 脚本,设置用于作业的局部变量和环境变量;添加提交作业的 yhrun 指令,并指定节点数、核数、分区以及作业的可执行文件等。
submit_cp2k.sh
1 | !/bin/bash |
最后使用 yhbatch 提交前述的 slurm 脚本,并指定节点数、核数、 分区等信息。
1 | yhbatch -N 2 -n 32 -p 653 ./submit_cp2k.sh |
提交作业常用参数说明:
-N,--nodes:指定作业要使用的节点数。
-n,--ntasks:指定作业要加载的任务数。
-p, --partition:指定作业要使用的分区。作业将从指定的分区中分配资源,同时使用指定分区的配置进行访问控制检查、资源限制等。如未指定,作业将被提交到系统的默认分区。一个作业必定位于一个分区中,不能跨分区。
--mpi=pmix:指定 mpi 运行方式。
-c,--cpus-per-task:指定每个任务使用的处理器数,默认每个计算任务使用一个处理器。对于某些多线程的计算任务,如 openMP 程序,使用多个处理器可以得到最佳性能。
查看任务
提交作业后,使用命令
yhinfo [-p PARTITION]查看节点信息[指定分区]。使用命令
yhqueue [-u USERNAME]查看用户当前排队作业[指定用户]使用命令
yhcontrol查询仍运行未结束作业;格式为:yhcontrol show jobs [jobid];jobid为单个作业编号,缺省时输出yhqueue命令能查询到的所有作业。使用命令
yhacct查询已提交作业;
常用主要参数有为:
-u:指定用户名,非 root 用户可缺省;
-S:指定查询开始时间;
-E:指定查询结束时间;
-j,--jobs:查询作业号列表;
--format:指定作业号输出的列表名。
结束任务
若任务正常运行结束:slurm-jobid.out 文件中不会有任务的报错信息。
若任务提前取消或终止:使用 yhq 命令获取 jobid;然后 yhcancel jobid 即取消指定作业 id 的任务;或使用yhcancel -u username 命令即取消指定用户提交的所有任务(慎用)。