不带浮点运算的数学(译文)
By S.F.
本文链接 https://www.kyfws.com/news/math-without-a-floating-point-unit/
版权声明 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
- 4 分钟阅读 - 1608 个词 阅读量 0不带浮点运算的数学(译文)
原文地址:https://www.codeproject.com/Articles/54593/Math-without-a-Floating-Point-Unit
原文作者:Joel Ivory Johnson
译文由本站翻译
前言
不带浮点运算的数学
我所做的日常开发都针对台式机处理器.处理器具有满足计算需求和性能需求的能力,因此我很少考虑执行特定数学运算需要多长时间.但是,尽管这是一般情况,但并非总是如此. 当我读完研究生时,我的一个项目涉及机器视觉和照片的自动分类.我了解了我需要实现的算法以及一切将如何融合在一起.在开发单个组件的过程中,我使用了一些小的数据集,这些数据足以让我知道这些组件正在按设计工作.直到我将所有组件放在一起,才使系统能够处理完整尺寸的图像(大约2兆像素).我知道完整尺寸的图像将需要更长的处理时间,但是图像处理大约需要三个小时!在研究导致速度缓慢的原因时,我发现我尝试执行的某些功能并未得到机器处理器的本地支持,而是被仿真了.一些数学运算消耗的时间比本地运算多50到100倍.该程序的执行时间受到时间限制,因为我必须在演示过程中在课堂上演示其执行.为了保持这些约束,更昂贵的数学运算被查找表取代,程序从仅多线程变为充分利用了多处理的优势. 在过去的几周里,我收到其他开发人员的几封电子邮件,试图弄清为什么他们的程序性能这么差,给我留下了深刻的印象.两位开发人员都在创建执行图形处理的程序,并且都针对Windows Mobile设备(使用ARMS处理器). ARMS处理器具有广泛的性能特征.在低端,处理器仅支持整数运算,没有除法指令,并且通常在200 MHz附近运行.在高端,处理器可能具有用于浮点运算(包括除法指令)的硬件实现,内置于3D图形加速器中,并以高达1 GHz的速度运行.两位开发人员都在没有本地浮点支持和除法指令的设备上测试他们的程序.因此,这些操作正在被仿真.仅这些信息就足以回答他们的问题.但是我决定做一些测量. 我挖出了所有运行Microsoft操作系统的基于ARM的设备.我所拥有的有几台Windows Mobile设备,从PocketPC 2002设备到即将发布的即将推出Windows Mobile 6.5的新发布的设备. Microsoft Zune也是基于ARMS的.因此,我将其包含在测试中.我还可以远程访问一些新发布的设备.为了进行测试,我让每个设备对整数和双精度浮点数执行一百万次加,减,乘和除运算.对于Windows Mobile设备,由于.NET Compact框架不支持浮点运算,因此我使用本机(C语言)程序进行了此操作.对于Zunes,我通过XNA框架使用.NET. .NET框架的Zune版本支持浮点操作.由于这些设备用于每个设备的时钟频率范围很广,因此我将执行百万次加法所花费的时间用作基本度量.我的发现是相当一致的.通常,不支持浮点的设备对双精度数字进行除法的时间比整数加法花费大约30倍的时间.具有浮点支持的设备执行双精度除法的时间比加法要长大约2倍. 两位开发人员都在实现的算法大量使用了浮点运算.人们对程序在从台式机的经验转移过来的移动设备上运行时的性能抱有一些期望.与移动处理器相比,台式机处理器在硬件上实现的数学运算更为完整.两位开发人员也使用了不支持浮点的同一设备.因此,为什么算法运行这么慢也就不足为奇了.那么他们能做什么呢?对于功能强大的硬件,没有任何一种令人满意的替代方法,因此确切的解决方案将取决于人们要完成的工作.对于一个开发人员,一个可接受的解决方案是使用另一种算法,该算法可以产生可接受的结果并且计算量要低得多.对于其他开发人员而言,无法接受对结果的妥协,因此修改了其软件的硬件要求,以便他们确定所需的硬件. 来自学校的经验和两位开发人员的经验都强调了确保解决方案的硬件和实现彼此同步的重要性. CodeProject
许可
本文以及所有相关的源代码和文件均已获得The Code Project Open License (CPOL)的许可。
All-Topics 新闻 翻译