|
|
51CTO旗下网站
|
|
移动端

1.6.1 参考实现

《ARM嵌入式系统编程与优化》第1章Linux/ARM嵌入式平台,本章介绍如何使用GCC编译器、汇编器和连接器来编写和执行独立的汇编语言程序,以及如何将一个C语言代码和汇编语言代码合起来,以验证汇编代码子程序的正确性。本节为大家介绍参考实现。

作者:梁元宇 译来源:机械工业出版社|2017-09-26 19:05

【大咖·来了 第7期】10月24日晚8点观看《智能导购对话机器人实践》

1.6 汇编优化1:排序

接下来的两节通过两个例子来粗略介绍一下ARM汇编编程、优化以及性能分析。***个例子是冒泡排序。

1.6.1 参考实现

先在bubble_sort.c文件中用C语言写一个参考实现。

前三行代码用于在全局存储器中分配32K整型数组。现在程序不会初始化这个数组。

回想一下,冒泡排序比较了每一个相邻对值n - 1次,其中n是元素数量。每次比较后,如果它们是未整理的顺序,则会被交换。每个单独值在最外层每次迭代时朝数组起始处移动一个位置,这可以认为是作为泡沫缓慢上升到液体顶部。

将这个文件保存为bubble_sort.c文件,使用gcc编译,并使用“-O3”标记“告诉”编译器使用***优化:

使用以下指令了解程序执行所用时间:

在ARM Corte A15中,程序需要4.0s的中央处理器时间来执行。从这一方面,它可能对编译器效率做出粗略的估计。

程序比较需要n2 = 215×215 = 230对值,这意味着处理器的每次比较需要接近4.0/230 = 3.7ps。

当时钟频率为2.3GHz(通常在/sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_max_freq中找到)时,这将转化为:

每次比较需要2.3e9×3.7e - 9 = 8.5个周期。

其中包括执行比较指令的周期和存储交换(缓存失效)需要的时间。这是合理的吗?

为了找出问题所在,接下来在bubble_sort_asm.s文件中编写一个纯汇编实现。


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

16招轻松掌握PPT技巧

16招轻松掌握PPT技巧

GET职场加薪技能
共16章 | 晒书包

289人订阅学习

20个局域网建设改造案例

20个局域网建设改造案例

网络搭建技巧
共20章 | 捷哥CCIE

645人订阅学习

WOT2019全球人工智能技术峰会

WOT2019全球人工智能技术峰会

通用技术、应用领域、企业赋能三大章节,13大技术专场,60+国内外一线人工智能精英大咖站台,分享人工智能的平台工具、算法模型、语音视觉等技术主题,助力人工智能落地。
共50章 | WOT峰会

0人订阅学习

读 书 +更多

Linux服务器安全策略详解

Linux主要用于架设网络服务器。如今关于服务器和网站被黑客攻击的报告几乎每天都可以见到,而且随着网络应用的丰富多样,攻击的形式和方法...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO播客