生成式AI领域的最新成果都在这里!抢 QCon 展区门票 了解详情
写点什么

攻坚计算产业下一站,华为联合 18 城鲲鹏创新中心聚力打造开发者创享日

  • 2020-07-04
  • 本文字数:3021 字

    阅读完需:约 10 分钟

攻坚计算产业下一站,华为联合18城鲲鹏创新中心聚力打造开发者创享日

5G 时代,新基建浪潮风起云涌,新兴技术百家争鸣,推动着计算产业上新一轮的开疆拓土,大浪淘沙之下怎样才能立足未来?


如果把新基建比作一辆汽车,新兴技术就是四个轮子,算力则是提供动能的汽油。伴随着云计算、AI、5G 的快速布局,创新应用实现了加速落地,多样化应用催生出多样化算力的需求,市场既需要通用计算算力也需要异构计算算力,创新应用数量和种类的增长让计算单元更加丰富化。


同时,受摩尔定律放缓的影响,算力和性能遭遇发展瓶颈,企业的算力需求却在持续飙升,两相对冲之下,计算产业的创新与变革已经迫在眉睫。


作为先行者,华为早已为计算产业和行业生态的建设埋下伏笔。


2019 年 1 月,其推出鲲鹏 920 处理器,针对大数据、分布式存储、数据库和云服务等场景进行了优化,具备多核、并发处理效率高等特点,同时兼容 ARM 架构,未来具备独立演进能力。在强大的技术底座支撑下,华为计划在全国 18 个城市成立鲲鹏生态创新中心,吸引着越来越多的企业和开发者加入到鲲鹏生态建设中,共同推动计算产业的发展。


然而,算力要想大显身手,同样离不开软件辅助。鲲鹏早早便预见到了这一点,从软硬协同着手进一步提升处理器的性能,以软件迁移和调优两方面助力合作伙伴实现破局。在丰富的实践积累下,目前其已经沉淀了诸多迁移和调优方面的经验与方法论。

x86 向 ARM 迁移成趋势,软件迁移的知识你懂多少?

随着移动互联网、物联网和边缘计算的兴起,x86 架构称霸互联网的时代逐渐落幕,对于普通消费者来说,x86 的缺点是功耗大,对于开发者来说,则存在通用寄存器数量少、系统速度慢、对计算机硬件的利用率低等问题。由此可见,在移动互联网盛行的当下,不管是从市场角度还是从企业端的需求来看,x86 架构的不足已经非常明显,架构发展之路亟待创新。


在此背景下,蛰伏多年的 ARM 架构凭借着低能耗、低成本、与主要用户群体设备架构统一等优势实现了异军突起,成为众多主流科技公司的最优选择,从 x86 迁移到 ARM 也成为一种主流趋势。但由于两种架构之间存在的架构、指令集、向量寄存器的差异问题,也使得这条迁移之路异常坎坷,一些开发者甚至“谈迁移而色变”。


不同的开发语言面临的迁移难点也不尽相同,以最为复杂的 C/C++代码迁移为例,其最具代表性的有五类迁移问题,华为鲲鹏基于此已经存在相对成熟的迁移实战经验:


  • 编译脚本、编译选项移植。以编译 64 位应用程序为例,x86 平台可通过指定编译选项为-m64 来完成,而在鲲鹏处理器下需要-mabi=lp64 的形式指定;在 X86 平台下默认 char 类型是有符号类型,鲲鹏平台下默认是无符号类型。

  • 编译宏移植。以编译器自定义宏为例,x86 编译选项是__x86_64__或__x86_64,对应的 ARM 编译选项是__aarch64__。

  • builtin 函数移植。以替换 crc32 值计算函数为例,x86 下的__builtin_ia32_crc32qi ()对应到 ARM 中则为__builtin_aarch64_crc32cb()。实际上,需移植的普通 builtin 函数实际并不多,大部分需移植的 builtin 函数集中在 SSE intrinsic 函数内。

  • 内联汇编函数移植。这是 C/C++代码迁移过程中较难的部分,做移植前需先找到核心的汇编指令,随后结合内联汇编规则,也能够快捷的完成替换移植。

  • SSE intrinsic 函数移植。这同样是硬核技术点,SSE/NEON  intrinsic 函数是一些列 c 函数调用,编译器可将其替换为适当的 SSE/NEON 指令。SSE/Neon intrinsic 函数几乎提供与编写 SSE/NEON 汇编指令相同的功能,但是将寄存器分配等工作留给编译器,以便开发人员可以专注于算法开发。


开发语言复杂精妙,C/C++代码迁移只是冰山一角,但仅仅这一角都不是寥寥数语能够概括的,鲲鹏的迁移实战经验远不止于此。诸如 Java/Python 代码迁移、Maven 软件构建、RPM 软件迁移,在从 x86 向 ARM 的迁移过程中都存在着诸多问题,而鲲鹏均沉淀出了相对成熟的方法论,以各地创新中心为出口,以技术沙龙为课堂,向开发者源源不断地输出着这些实践经验。


回归到现实场景,企业之所以想要迁移到不同的平台,原因只能是新的平台有着更加强悍的算力基础,方便企业更好地开展自身业务,但往往复杂的代码迁移就已经磨去了开发者们所有的耐性,更遑论在迁移过程中同步思考通过性能调优充分发挥新平台的算力优势。而如果调优做不到位,迁移的效果同样会大幅缩水。


如今,迁移已经找到捷径,调优的捷径又在何方呢?

四座大山横亘,软件调优究竟有没有捷径?

同软件迁移一样,作为提升算力的一种有效途径,软件调优也是一门复杂学问。从冯诺依曼瓶颈来看,软件调优主要包括四个方向,分别是 CPU/内存、磁盘、网卡、应用,华为鲲鹏从这四点出发,在每个方向下总结出了不同的优化方法,累计共 10 大方法,被称之为“性能调优十板斧”。


以编译器为例,如何优化才能打破 CPU/ 内存瓶颈?基于芯片微架构,鲲鹏在实践中总结的优化方式如下:


  • 指令布局优化:拆分函数代码,按照冷热指令重新排布,提升指令 Cache 命中率

  • 内存布局优化:按照内存数据访问频度,组合热数据区域,提升数据 Cache 命中率

  • 循环优化:分析循环迭代间数据访存依赖关系, 对无依赖的循环并行到多核执行,无依赖的数据自动矢量化计算,加速程序运行


同时,针对 SMP 系统(可以使多个 CPU 汇集到同一台计算机上以提升数据处理能力)下核数的扩展受到内存总线限制的问题,搭载非统一内存访问架构 NUMA 有望解决,但想要充分发挥 NUMA 的性能,就需要克服内存访问速度不均匀的挑战,鲲鹏的应对方案是采用 Nginx 绑核优化,即将 Nginx 进程分布到各个 NUMA node 之内,让系统整体的负载比较均衡,按照中断号将中断服务和 Nginx 绑定在一个 NUMA 内,性能将会有非常明显的提升。


以上均为 CPU/内存的优化方法,但受篇幅所限也只能遴选出一二知识点进行概述。在磁盘、网卡、应用这三座大山上还存在着诸多难走的路,鲲鹏通过实践也已经摸索出了一套翻越大山的有效路径。


同时,其还为开发者打造了一条登峰的捷径,那就是鲲鹏开发套件,包括 Dependency Advisor(分析扫描工具)、Porting Advisor(代码迁移工具)、Tuning Kit(性能优化工具),是一套协助开发人员面向鲲鹏处理器快速进行应用软件迁移与调优的工具集。


依托于华为代码迁移与性能调优的专家经验,开发套件能够对海量代码进行自动化扫描和分析,识别出需要移植的依赖库文件,给出专业的移植报告与建议,并提供从系统、进程、函数到代码的全景性能分析,为开发提供从软件评估、代码移植到性能调优端到端的一站式服务,助力迁移和调优达到事半功倍的效果。

鲲鹏展翅 18 城,共话计算新时代

秉持着“硬件开放、软件开源、使能伙伴”的初心,华为一直毫不吝啬于对外开放自己的技术能力。以技术创新为动力,以技术布道为使命, 鲲鹏生态愈发强大,携手越来越多的开发者和合作伙伴共同攻坚计算产业下一站,推动计算产业新时代的到来。


7 月 11 日,华为将在全国 18 个城市同时举办鲲鹏开发者技术沙龙,本次活动的主题为「18 城鲲鹏创新中心开发者创享日」,届时华为技术专家将为 18 个城市的开发者带来关于鲲鹏生态发展战略、软件迁移与调优的实践经验和对应方法论、Open Euler 操作系统的介绍等课程,同时还将发布各区域下半年的技术沙龙活动日历,并启动鲲鹏应用创新大赛的招募,联合全国的开发者共同推动鲲鹏计算产业的发展。



码上选择你的专属城市课堂参与活动报名


赶快来鲲鹏 18 城创新中心课堂前排占座,不仅有与名师一对一沟通交流的机会,更有上机实操演练环节让你轻松将晦涩难懂的技术转化为身经百战才能练就的技能!


点击阅读原文获取开发者的专属报名通道


公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2020-07-04 21:501593

评论

发布
暂无评论
发现更多内容

aPaaS将如何改变软件行业?

华为云开发者联盟

云计算 软件 软件开发 SaaS aPaaS

腾讯员工怒怼加班文化事件:大厂的内卷,小厂有什么资格?

菜根老谭

百度爱番番实时CDP建设实践

百度Geek说

后端

从原理到操作,让你在 APISIX 中代理 Dubbo 服务更便捷

API7.ai 技术团队

微服务网关

预约小程序开发笔记一:背景与技术方案的选型

CC同学

Java11特性-效能翻倍的HttpClient

蜜糖的代码注释

Java 后端技术 2月月更

React Fragment介绍与使用

编程江湖

React

【架构实战营】模块七:命题作业

wgl

「架构实战营」

java开发之Spring集成MyBatis知识分享

@零度

Java spring mybatis

探秘 k8e:极简 Kubernetes 发行版

张晓辉

Kubernetes 云原生

如何解决Python项目在VScode中跨文件夹导包问题

IT蜗壳-Tango

IT蜗壳教学 2月月更

盘点冬奥会上的那些“黑科技”,你也可以掌握它!

博文视点Broadview

如何让代码代码管理变的更安全更高效 | 云效开发篇

阿里云云效

阿里云 DevOps 云原生 代码管理 Codeup

设备接入服务,看完这篇给你整的明明白白

华为云开发者联盟

物联网 IoT 华为云 设备接入服务 设备

在阿里,我们如何管理代码分支?

阿里云云效

阿里云 DevOps 云原生 研发 分支管理

Ceph核心概念解读

总想做点什么

分布式存储 Ceph 云存储 云计算,

Java 字符串常见的操作

编程江湖

大数据开发之运维面试题汇总分享

@零度

面试题 大数据运维

推荐学java——Spring与web项目

逆锋起笔

Spring web idea web web项目 idea spring

鸿蒙轻内核源码分析:文件系统LittleFS

华为云开发者联盟

鸿蒙 文件系统 Flash LittleFS LiteOS-M内核

分配任务的人才是团队的核心成员

panda

管理 限界上下文 任务分配

面试突击20:进程和线程有什么区别?

王磊

永中软件加入龙蜥社区,共建开源新生态

OpenAnolis小助手

Linux 开源 永中

不断突破,稳中求进——我的移动端跨平台开发技术回顾与展望| 社区征文

No Silver Bullet

跨平台 移动端 新春征文 2月月更

新思科技BSIMM评估为安全团队提供“他山之石”

InfoQ_434670063458

汽车 新思科技 软件定义汽车 软件安全 BSIMM评估

阿里巴巴DevOps文化浅谈

阿里云云效

阿里巴巴 阿里云 DevOps 云原生 研发

前端开发之js栈内存和堆内存的区别

@零度

JAVA开发 堆内存 栈内存

Kubernetes HPA 基于 Prometheus 自定义指标的可控弹性伸缩

张晓辉

Kubernetes 弹性 HPA

【高并发】一文解密诡异并发问题的第一个幕后黑手——可见性问题

冰河

Java 并发编程 多线程 异步编程 精通高并发系列

“1天一朵云”,这是如何做到的?

华为云开发者联盟

数字化转型 软件架构 华为云 华为云Stack 全栈云平台

百度APP视频播放中的解码优化

百度Geek说

百度 性能优化 视频

攻坚计算产业下一站,华为联合18城鲲鹏创新中心聚力打造开发者创享日_开源_马红伟_InfoQ精选文章