超算平台开发环境

目录

Linux 常用操作命令

 Shell 指令

                机器信息查询

                文件、目录和权限

                文件内容查看

                压缩与解压缩

                环境变量使用

        编辑器VIM

        编译器GCC

        工程构建工具Make

        作业管理系统slurm

        调试器gdb


Linux常用操作指令

        Shell指令

shell 指令可以理解成运行一个软件,只不过是命令行形式

一条shell 指令可能包含: [指令名称] [参数:-para 或 - -para] [命令操作对象] 

获取帮助:[指令名称] --help   

机器信息查询指令

用户名称:当前使用的账户whoami
服务器名称:当前所使用的节点hostname
机器信息:基本硬件配置

        查看CPU信息

        查看内存信息

lscpu

free -h

文件、目录和权限

目录/文件的查看和权限:

查看指定目录下所有文件:ls [directory]

以详细列表形式显示文件:ls -l

以修改时间倒序显示文件:ls -ltr

通配符:星号 *

查看文件名中带有na字符的文件:ls *na*

  • 更改文件的权限: chmod [para] [filename]
  • 增减某种权限: chmod +x [filename] chmod -w [filename]
  • 目录的创建,目录以及文件的删除: mkdir [directoryName]  ,   rm [-rf] [filename or directoryName]
  •  查看当前目录(路径):pwd
  • 目录切换: cd [absolutePath] 
  •        cd .. 上级目录           cd . 当前目录
  •        cd - 上次访问目录      cd ~ 用户根目录
  • 文件的创建(空文件):  touch [filename]
  • 文件/目录的移动: mv [filename] [object_directoryName]
  • 文件/目录的重命名:mv [old_filename] [new_filename]
  • 文件/目录的拷贝:cp [source_filename] [dest_filename]
  • 文件/目录名称补全: 输入文件名称起始n个字符后,单击tab键,将快速把文件名称补全,加快速度
  • 文件和目录查找:find(在目录中找文件/文件夹)
    • 在指定目录下搜索,文件名中包含某特定字符串的文件                                                  find [directory] –name [filename]
  • 文件的字符搜索:grep(在文件中找字符串)
    • 在指定目录下文件中搜索,是否包含特定字符串,存在便显示                                          grep “[string]” –r [filename]

文件内容查看

显示文件全部内容 cat   

        cat [file_name] 将文件整个内容从上到下显示在屏幕  

显示文件开头 head

        head [file_name]

        head –n [line_num] [file_name] 指定行数

显示文件结尾 tail

        tail [file_name]

        tail –n [line_num] [file_name]指定行数

        tail –f [file_name] 动态刷新文件末尾

显示文件结尾 more

        more [file_name]

        若屏幕输出太长,该命令可一页一页显示,更方便使用者逐页阅读

压缩与解压缩

打包 tar及解压

        tar –cvf jpg.tar *.jpg    //将目录里所有jpg文件打包成 jpg.tar

        tar –czf jpg.tar.gz *.jpg   / /将目录里所有jpg文件打包成 jpg.tar.gz

        tar -xf jpg.tar    //解压 jpg.tar包中所有文件

        tar -zxf jpg.tar.gz    //解压 jpg.tar.gz包中所有文件

压缩 zip

        zip jpg.zip *.jpg   //将目录里所有jpg文件压缩成 jpg.zip

        unzip jpg.zip   //解压 jpg.zip包中所有文件

环境变量使用

env : 用来显示环境变量,显示当前用户的变量

export: 用来设置环境变量

echo : 用来查看指定变量内容 echo $PATH,  echo ${PATH}

PATH : 当前 shell 中命令、系统程序、应用程序以及自定义可执行文件的路径

LD_LIBRARY _PATH : 可执行共享库(动态库)的目录路径

export PATH=[one_path]:$PATH 注意等号两边不能有空格

编译器VIM

程序开发:将人类想要计算机执行的工作按照计算机所支持的方式流程化、格式化、系统化的,使用编译 器支持的开发语言组织成文,并由编译器翻译成机器码供计算机执行。

C/C++程序开发一般包括以下步骤: ① 明确任务需求或目标

                                                          ② 算法设计

                                                          ③ 编码源文件 (通过编辑器vim编写)

                                                          ④ 编译二进制文件 (通过编译器GCC完成)

                                                          ⑤ 运行二进制文件 (通过作业管理系统slurm运行计算任务)

                                                          ⑥ 调试程序 (debug)

vim使用(截图课程ppt):

 Linux的程序编译器GCC

        C/C++程序的编译由编译器完成,将源文件内的高级语言 翻译成计算机能直接“看懂”和执行的机器码,即二进制 文件。

编译器对我们编写的源文件进行:预处理、编译、链接三 个步骤:

① 预处理:处理.c文件的#define,#include等预处理指 令

② 编译:把高级语言(.c)翻译成汇编指令(.s),再翻译成机 器码(.o)

③ 链接:将所有目标文件(.o)和第三方库文件,链接成二 进制文件(exe)

gcc命令的的简易编译规则:gcc –o [binaryfile] [sourcefile1] [sourcefile1] ……

分步进行编译和链接:

      编译(源文件逐个编译成目标文件: 

         gcc –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

        链接(将所有目标文件,以及第三方库,链接成二进制文件):

        gcc –o [bin] [all_obj_files] –L[library_path] –l[library_file_name]

        例如:gcc –o exe main.o kernel.o -L/home/opt/lib –lmymath

直接编译出二进制:

gcc –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 –lmymath

编译选项:

         gcc命令后可加入可选编译选项,以实现代码优化等不同目的。

         gcc [–option] –o [bin] [src_file]

        常用option编译选项及其作用如下:

         优化等级选项 -O0,-O1,-O2,-O3 由编译器自动进行代码性能优化,优化等级越大,程序运算速度越快

        O0 — debug调试版本,

        O2/O3 — release发行版本

警告选项:

-Wall 显示所有警告

调试选项 -g 通常结合-O0优化等级编译,后期可使用gdb工具对二进制文件进行调试。会降低程序计算速度

性能分析选项 -pg 后期可用于gprof工具对二进制文件进行性能分析。会降低程序计算速度

宏定义选项 -D 对应着程序代码中的宏定义。如-DUSE_MPI

工程构建工具 make

        Make 与 Makefile

                GNU Make:最基本的项目构建工具

                命令行逐个文件手动编译的缺陷: 不可重复,效率低

                源文件很多情况下,几乎无法完成程序的编译。

                而 Make 通过一个Makefile 文件,获取如何构建执行文件信息, 并按照 Makefile 里面                   设定的规则,根据源文件的依赖关系,调 用编译器自动执行编译

                Make 还会根据源文件的更新状态,来判断是否需要重新编译 该文件

 Makefile 的逻辑与规则:

        Makefile 组成结构即为:目标、目标的前置条件(依赖)、和 规则,还包括变量以及内置函数,也都是为前面三者服务的

一个目标(或者说总体目标,即最终的执行文件),会依赖一 些文件(如源文件、目标文件、库文件等),所依赖的文件也 可以作为新的目标(子目标)放在后面,建立其对应的规则

当我们输入 make 指令时,make 首先执行的是 Makfile 里面的第一个目标,检查第一个目标的前置条件,然后寻找 “前置条件”的“前置条件”,以此类推

执行某个特定的目标,不遵循默认从第一个目标开始,则输入: make [targetName] make 会从 [targetName] 名称指定的目标开始执行

作业管理系统slurm

资源管理系统是用户使用超算平台中计算资源的入口。资源管理系统主要由控制进程、节点监控进程、作业管理进程、记账存储进程、命令工具等组成

用户层面:只有通过资源管理系统分配资源,用户才能够访问计算节点。可:查看系统状态,提交作业,加载执行计算任务,查看历史作业信息等。

基本用户指令:

yhinfo / yhi: 资源信息查询

       thcp1:分配给帐户的分区名称

       alloc:表示已经被分配的节点, 已经被别人用了,现在不可用。

       idle:空闲节点,表示可以的节点。

yhalloc: 资源申请(强占)

yhrun: 作业提交(自动申请资源)

yhrun –p [partitionName] –N [nodesNum] –n [totalProcs] -c [numThreadss] [binaryPath]

-p:指定分区

-N:指定程序使用的节点数目

-n:指定程序使用的总进程数目,则每个节点启动约n/N个进程,一般情况是整除

-c:指定每个进程可使用的处理器个数,通常应该等于每进程派生的线程数

[binaryPath]:可执行文件名字,相对路径或者绝对路径,后面可以继续带程序自身的运行时参数

yhqueen / yhq: 作业队列查询

JOBID: 作业ID号,可以根据作业ID使用其他操作,如取消yhcancel等

PARTITION : 分区名称

NAME: 可执行文件名

USER: 用户

ST: 状态,R表示RUN,还有排队PD等:

TIME: 运行了多长时间

NODES: 使用的节点数目

NODELIST: 具体节点列表

yhcancel: 作业取消

yhbatch: 批处理作业

yhbatch –p [partitionName] –N [nodesNum] [scriptPath]

scriptPath:为shell脚本文件,需包含yhrun命令

yhbatch 提交的作业终端关闭时不会受到影响,登陆结点宕机时也不会受到影响,强烈推荐使 用 yhbatch 提交任务。

运行命令yhbatch –p thcp1 -N 2 ./yhrun.sh

yhacct: 作业历史查询

程序调试工具 GDB

        GDB:GNU symbolic debugger, 是 Linux 下常用的程序调试器

                调试模式启动程序,指定可能影响其行为的任何内容

                使程序在指定条件下停止,多种断点

                检查程序崩溃或停止时发生了什么

                更改程序中的内容,尝试纠正一个错误的影响,并 继续了解另一个错误

实时调试:

        源码编译阶段,需要添加调试选项 “-O0 -g ” gcc –O0 –g -o exe file.c

进入实时调试的两种方法:

        1、先使用gdb命令进入gdb窗口 再使用 file 命令加载二进制文件:file exe [命令行参数]

        2、使用 gdb exe [命令行参数] 直接进入调试模式

•在编译程序的时候,需要加调试选项:-g  

         user@hostname ~ ❯❯❯ gcc –g –o ex1 main.c

使用 gdb 启动程序:

        user@hostname ~ ❯❯❯ gdb ./ex1

GDB常用命令总结:

 core 文件调试

        如果程序运行中因段错误发生崩溃结束,便会 生成core文件,使用这个 core 文件来回溯程 序崩溃的时候发生了什么。

什么是 core 文件?

        core 文件,确切说是 core dump 文件,core 是内存的映像,当程序崩溃时,dump 是“扔出来”的意思,即核心 已转储,实际上就是有问题的程序运行后,产生“段错误 (核心已转储)”时生成的具有堆栈信息和调试信息的文件

如何生成 core 文件?

使用 ulimit -c 查看core开关,如果为0表示关闭,不会生成core文件;

使用 ulimit -c [filesize] 设置core文件大小,当最小设置为4之后才会生成core文件;

使用 ulimit -c unlimited 设置core文件大小为不限制,这是常用的做法;

core 文件的目录:

        默认情况下一般 core 文件的生成目录为程序运行当前目录,用户不要自行修改

core 文件调试:

        gdb -c:使用 core 文件记录的信息进入程序调试

        进入调试环境后,gdb 会直接给出代码奔溃的位置 

core 文件的使用场景:

在超算平台上,程序一般是通过作业管理系统发送到计算几点执行的。

gdb 实时调试,r 指令运行程序的时候,实际上是在登录节点本地执行,原则上这不允许,尤 其是大型程序。

作为用户,有时是不开放登录计算节点权限的,没有办法使用计算节点直接实时调试,或者是 程序在计算节点上的运行时间非常短,来不及其它措施(实时,或 attach)等。

超算平台的权限部署,也一般不允许离开作业管理系统操作计算节点,所以 gdb 独立远程调 试所需的权限一般也没有 这种情形下,core 文件调试就很有作用,但不是所有的程序崩溃都会产生 core 文件。            

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值