鲲鹏开发套件GCC for openEuler功能支持实践【玩转华为云】
1、概述
本实验指导用户基于华为云弹性服务器进行GCC for openEuler功能支持实践。
2、操作流程
2.1、登录实验环境
进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云控制台页面。
2.2、配置环境
登录弹性云服务器ECS
点击左上角“服务列表”再点击“弹性云服务器ECS”,进入弹性云服务器ECS管理列表,在此可查看预置的弹性云服务器ECS的弹性公网IP,
通过终端登录云主机,根据提示输入root账号密码。
检查Glibc版本
键入如下命令来检查Glibc的版本:
利用mkdir命令生成安装目录并进入该目录:
键入如下命令,下载GCC for openEuler编译器软件包:
完成后,会生成如下文件。
2.3、完整性校验
键入如下命令,生成当前文件的哈希值:
sha256sum文件用于软件包的完成性校验,键入如下命令,下载毕昇编译器sha256:
将gcc-9.3.1-2020.12-aarch64-linux.tar.gz生成的哈希值与gcc-9.3.1-2020.12-aarch64-linux.tar.gz.sha256文件内容进行比较,一致则表示下载的软件包与网站发行的软件包一致。
2.4、解压软件包
在安装目录下(这里是/opt/aarch64/compiler),使用tar命令对软件包进行解压缩:
解压后的文件夹全名为:gcc-9.3.1-2020.12-aarch64-linux。
2.5、配置环境变量
检查环境变量INCLUDE和LD_LIBRARY_PATH:
如果输出为空,则表示INCLUDE和LD_LIBRARY_PATH两个环境变量原本没有值;如果输出不为空,则表示INCLUDE和LD_LIBRARY_PATH两个环境变量已经有值。打开/etc/profile文件,并在文件未尾部添加如下字段,并保存。
执行下列命令让环境变量生效:
2.6、验证版本信息
键入如下命令,验证版本信息:
3、GCC for openEuler功能支持实践
3.1、程序编译
使用一个swap函数验证GCC的程序编译功能,首先我们在个人文件夹(这里以/home/hgcc-tester为例)下创建swap.c文件:
将如下所示的swap.c用例内容添加到swap.c文件中:
键入如下命令进行编译和运行:
3.2、动态取址增强
选项-mcmodel=medium使能了32bit之外的动态取址操作,这里使用hello.f90 用例来演示验证此功能,此例中有size=85899*1000*10的大符号bar1。首先我们在个人文件夹下创建hello.f90,这里还是以/home/hgcc-tester为例进行演示:
添加如下代码:
保存后,键入如下命令,不加此选项编译hello.f90用例:
gfortran hello.f90 -o hello.out
变量bar1的size大于-mlarge-data-threshold=1选项指定的阈值,使用mcmodel=medium分配内存,因此实现了64bit的相对PC寻址。
3.3、使能四精度浮点库
选项-DAARCH64_QUADMATH使能了四精度浮点使用,这里使用test.c用例来演示验证此功能,此例中有128位四精度浮点数。首先我们在个人文件夹下创建并编辑test.c,这里还是以/home/hgcc-tester为例进行演示:
cd /home/hgcc-tester
touch test.c
vi test.c
按下字母“i”键进入“插入模式(Insert mode)”编辑文件,将如下所示的test.c用例内容添加到test.c文件中:
键入如下命令进行编译和运行:
gcc test.c -o test.out -lquadmath -DAARCH64_QUADMATH./test.out
3.4、矢量化增强
选项-ftree-vect-analyze-slp-group使能可进行矢量化控制,在打开矢量化控制开关-ftree-vectorize的基础下,在编译命令中加入-ftree-vect-analyze-slp-group选项。这里使用a.c数组乘加运算用例来演示验证此功能,首先我们在个人文件夹下创建并编辑a.c,这里还是以/home/hgcc-tester为例进行演示:
cd /home/hgcc-tester
touch a.c
vi a.c
按下字母“i”键进入“插入模式(Insert mode)”编辑文件,将如下所示的a.c用例内容添加到a.c文件中:
保存后,键入如下命令,在未打开该选项时进行编译和运行:
gcc -O2 -funsafe-math-optimizations -fno-tree-reassoc -S a.c -o a.s && cat a.s
观察到该测试用例在选项未打开时和打开后,生成的相关代码有明显差别,打开后可成功矢量化,至此实验已全部完成。综合上述实验,可以看到GCC for openEuler在除GCC通用功能和优化外,增加了新的功能支持,如mcmodel=medium、四精度浮点等;对中后端性能优化技术也进行了增强,包括浮点优化、SVE(可伸缩矢量化)等。
4、其它
有兴趣的同学可参考如下链接进行实验操作。
https://lab.huaweicloud.com/testdetail_564
- 点赞
- 收藏
- 关注作者
评论(0)