鲲鹏开发套件GCC for openEuler功能支持实践【玩转华为云】

举报
y-wolfandy 发表于 2022/03/29 18:35:35 2022/03/29
【摘要】 1、概述本实验指导用户基于华为云弹性服务器进行GCC for openEuler功能支持实践。2、操作流程2.1、登录实验环境进入【实验操作桌面】,打开Chrome浏览器,首次可自动登录并进入华为云控制台页面。2.2、配置环境登录弹性云服务器ECS点击左上角“服务列表”再点击“弹性云服务器ECS”,进入弹性云服务器ECS管理列表,在此可查看预置的弹性云服务器ECS的弹性公网IP,通过终端登录...

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、配置环境变量

检查环境变量INCLUDELD_LIBRARY_PATH

如果输出为空,则表示INCLUDELD_LIBRARY_PATH两个环境变量原本没有值;如果输出不为空,则表示INCLUDELD_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

变量bar1size大于-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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。