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

1.6.3 结果验证

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

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

1.6.3 结果验证

汇编代码比C代码更不易读,这使它更易产生编程错误。因此,当测试优化实现时,应当验证结果,参考实现并比较结果。比较这两种实现的执行性能,并在输出数据中显示不匹配的错误。

为了进行后面的操作,将参考实现转换成一个函数。这就需要删除涉及数组和N值的代码,将主函数名改为“bubble_sort”,并利用参数传递的指向数组指针和它的大小:

接下来,将汇编实现转换成一个函数。为此,移除“.equ”和“comm”指令,将输出标志名改为“bubble_sort_asm”,并添加一个指定这一函数的新指令:

函数参数(包含指向数组的指针和它的大小),将分别访问寄存器r0和r1。为此,移除初始化数组大小的指令“ldr r1,= N”,同时将初始化外循环体数组基础寄存器的指令由“ldr r2,=data”变成“mov r2,r0”。

最后,在返回给调用者之前将寄存器r0的值设置为返回值:

现在写一个调用这两个函数的驱动程序。这个驱动程序也将负责分配数组和验证结果。

使用gcc编译这段代码:

如果程序运行时没有出现验证错误,则有理由假设汇编实现在功能上是正确的,并且实现了与编译器生成代码相同的算法。但是,导致性能差异的原因是什么?

性能受到许多因素的影响,包括:

执行的指令数。

数据依赖和分支预测失误导致的延迟。

防止多个问题的数据依赖和资源约束。

缓存失效导致的延迟。

包括缓存失效率在内的所有这些因素是可以改变的——通过修改算法的汇编代码来改善性能。


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

51CTO读书频道二维码


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

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

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

读 书 +更多

Groovy入门经典

本书详细介绍脚本语言Groovy,首先介绍Groovy语言的基本特性,包括讨论Groovy方法、程序闭包、列表、映射以及对类和继承的支持,然后介绍如...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊