首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android:为什么在运算量增加的情况下,整数运算会比浮点运算慢很多?

在运算量增加的情况下,整数运算比浮点运算慢很多的原因主要有以下几点:

  1. 硬件支持:整数运算在大多数计算机体系结构中都有专门的硬件支持,例如整数寄存器、整数运算单元等。而浮点运算通常需要使用浮点处理器,这些处理器的设计和实现相对复杂,需要更多的硬件资源和指令集支持。
  2. 精度要求:浮点运算通常需要更高的精度,因为浮点数可以表示更广泛的数值范围和更小的数值间隔。为了满足这种精度要求,浮点运算需要更多的位数来表示和计算,这导致了更多的计算量和运算时间。
  3. 运算规则:浮点运算涉及到更复杂的运算规则,例如舍入、溢出、下溢等。这些规则需要更多的计算和判断,从而增加了运算的复杂性和时间消耗。
  4. 数据存储和传输:整数通常可以直接存储在计算机的寄存器或内存中,而浮点数通常需要使用特定的格式进行存储和传输,例如IEEE 754标准。这种格式转换和数据传输过程也会增加运算的时间消耗。

综上所述,整数运算比浮点运算慢很多的原因主要是因为硬件支持、精度要求、运算规则和数据存储传输等方面的差异。在实际应用中,根据具体的需求和场景,选择合适的数据类型和运算方式可以提高计算效率和性能。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android硬件加速原理与实现简介

绘制过程经常需要进行逻辑较简单、但数据量庞大浮点运算。...一次整型和逻辑运算一般需要1~3个机器周期,而浮点运算要转换成整数计算,一次运算可能消耗上百个机器周期。 更简单CPU甚至只有加法指令,减法用补码加法实现,乘法用累加实现,除法用减法循环实现。...如果数据量更大、级联层级更大,则并行结构优势更明显。 由于电路限制,不容易通过提高时钟频率、减小时钟周期方式提高运算速度。并行结构通过增加电路规模、并行处理,来实现更快运算。...GPU并行计算方式简单粗暴,资源允许情况下,可以为每个像素开一个GPU线程,由其进行加1操作。数学运算量越大,这种并行方式性能优势越明显。 ?...Android硬件加速 Android中,大多数应用界面都是利用常规View来构建(除了游戏、视频、图像等应用可能直接使用OpenGL ES)。

2.1K50

Android硬件加速介绍与实现

绘制过程经常需要进行逻辑较简单、但数据量庞大浮点运算。...一次整型和逻辑运算一般需要1~3个机器周期,而浮点运算要转换成整数计算,一次运算可能消耗上百个机器周期。 更简单CPU甚至只有加法指令,减法用补码加法实现,乘法用累加实现,除法用减法循环实现。...如果数据量更大、级联层级更大,则并行结构优势更明显。 由于电路限制,不容易通过提高时钟频率、减小时钟周期方式提高运算速度。并行结构通过增加电路规模、并行处理,来实现更快运算。...GPU并行计算方式简单粗暴,资源允许情况下,可以为每个像素开一个GPU线程,由其进行加1操作。数学运算量越大,这种并行方式性能优势越明显。 ?...Android硬件加速 Android中,大多数应用界面都是利用常规View来构建(除了游戏、视频、图像等应用可能直接使用OpenGL ES)。

1.7K80

Android硬件加速介绍与实现

绘制过程经常需要进行逻辑较简单、但数据量庞大浮点运算。...一次整型和逻辑运算一般需要1~3个机器周期,而浮点运算要转换成整数计算,一次运算可能消耗上百个机器周期。 更简单CPU甚至只有加法指令,减法用补码加法实现,乘法用累加实现,除法用减法循环实现。...如果数据量更大、级联层级更大,则并行结构优势更明显。 由于电路限制,不容易通过提高时钟频率、减小时钟周期方式提高运算速度。并行结构通过增加电路规模、并行处理,来实现更快运算。...GPU并行计算方式简单粗暴,资源允许情况下,可以为每个像素开一个GPU线程,由其进行加1操作。数学运算量越大,这种并行方式性能优势越明显。 ?...Android硬件加速 Android中,大多数应用界面都是利用常规View来构建(除了游戏、视频、图像等应用可能直接使用OpenGL ES)。

1.3K60

嵌入式开发既要代码小,又要速度快!程序该如何优化?

,有很多C 编译器都会生成2~3个字节指令。...4、减少运算强度 可以使用运算量小但功能相同表达式替换原来复杂表达式。...如下: (1) 求余运算 a = a % 8; 可以改为: a = a & 7; 说明:位操作只需一个指令周期即可完成,而大部分C 编译器“%”运算均是调用子程序来完成,代码长、执行速度。...使用while 循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成代码更少1~3 个字母。...6、查表 程序中一般不进行非常复杂运算,如浮点乘除及开方等,以及一些复杂数学模型插补运算,对这些即消耗时间又消费资源运算,应尽量使用查表方式,并且将数据表置于程序存储区。

1.6K30

专栏 | 为模型减减肥:谈谈移动/嵌入式端深度学习

为什么要为深度学习模型减肥 随着深度学习发展,神经网络模型也越来越复杂,常用模型中 VGG 系列网络计算量可以达到 30-40 GOP(1GOP=109 运算)。...Depthwise convolution 能大幅降低运算量,但是同时不同特征之间权重参数变成线性相关。理论上减小了自由度,但是由于深度学习网络本身就存在冗余,因此实际测试中性能并没有降低很多。...大家都知道数据计算机系统中以二进制形式表示,传统全精度 32-bit 浮点数可以覆盖非常大数字范围,但是也很占内存,同时运算时硬件资源开销也大。...实际上深度学习运算中可能用不上这么高精度,所以最简单直接方法就是降低精度,把原来 32-bit 浮点数计算换成 16-bit 浮点数甚至 8-bit 定点数。...总结 移动/嵌入式端运行深度学习网络模型必须考虑运行速度以及能效比,因此模型运算量和模型尺寸大小都是越小越好。

1.1K80

深入理解计算机系统(2.7)------浮点数舍入以及运算

通常情况下我们采取舍入规则是原来值是舍入值中间值时,采取向偶数舍入,二进制中,偶数我们认为是末尾为0数。...2、浮点运算    IEEE标准中,制定了关于浮点运算规则,就是我们将把两个浮点运算精确结果舍入值,作为我们最终运算结果。...正是因为有了这一个特殊点,就会造成浮点数当中,很多运算不满足我们平时熟知一些运算特性。   ...= a * b + a * c   浮点数失去了很多运算方面的特性,因此也导致很多优化手段无法进行,比如我们试图优化下面这样一段程序。...然后扩展到整数表示和运算,实数表示和运算实际编程中,我们会经常和数打交道,如何避免一些错误,相信看完后会有个大概了解了。那么接下来我们将学习第三章,这将是一个全新世界——汇编语言。

2.6K60

骁龙855超越麒麟980?手机芯片AI性能最新评测基准出炉

浮点运算性能相比骁龙 855 要低 10%,整数运算速度上 20-60% 麒麟 970 速度约比麒麟 980 30-50% 谷歌 Pixel 缺席:由于性能不足,Pixel Visual...过去几个月,AI Benchmark 得分被用于很多事件和出版物中,引发了很多关于一些新推出芯片组和手机性能问题。下面是我们对 2019 年 2 月更新分数和结果官方解释。...由于技术问题,麒麟 NPU 无法通过 NNAPI 加速整数运算,它会转而使用 Arm NN 驱动进行基于 GPU 加速,在这种情况下其性能会低于高通和联发科——从而导致基准测试分数较低。...还需要指出是,三星还是有机会在 AI 性能上扳回一局,Mali GPU 可以大幅加速浮点及量化神经网络,三星只需整合 Arm NN 就能实现加速,但在这种情况下,在下一代三星手机安卓 Q 固件发布(...看起来,Mate 20 Pro 16 位浮点运算和内存方面占据优势。

1K30

算法优化——如何将人脸检测速度做到极致

此外,Haar特征实现中,为了解决亮度归一化问题,需计算像素值平方和(square sum),平方和需要64位整数来存储;还需要开方(sqrt)运算。...64位整数运算和开方运算,对很多嵌入式系统来讲,都是高计算量操作。 HOG特征是一个描述能力特别强特征,也可以用在人脸检测上。HOG特征需要计算梯度方向和长度。...而描述样本高维特征空间分布,应该是很多模式识别问题核心问题。   好,不谈理论谈经验。样本选择是一般人不提重要事情。...定点化   有些低功耗嵌入式系统不支持硬件浮点运算,特征提取和分类器设计应尽可能避免浮点运算。不可避免浮点数可以转为定点数,当然这会损失精度。...Boosting算法中逻辑分支较多,也就是有不定长for循环,有if-else判断;并行时候每个运算单元运算量并不相同,有些运行时间长,有些运行时间短。运行时间短要等运行时间长

2.9K60

干货!嵌入式C语言源代码优化方案

实际上,只要是乘以或除以一个整数,均可以用移位方法得到结果,如: a = a*9 可以改为: a = (a << 3) + a 采用运算量更小表达式替换原来表达式,下面是一个经典例子: 旧代码...(8)提取公共子表达式 某些情况下,C++编译器不能从浮点表达式中提出公共子表达式,因为这意味着相当于对表达式重新排序。...使用while循环时也一样,使用自减指令控制循环会比使用自加指令控制循环生成代码更少1~3个字母。...很多高级语言,包括C++,并不对产生浮点表达式重新排序,因为那是一个相当复杂过程。需要注意是,重排序代码和原来代码代码上一致并不等价于计算结果一致,因为浮点操作缺乏精确度。...循环不变计算 对于一些不需要循环变量参加运算计算任务可以把它们放到循环外面,现在许多编译器还是能自己干这件事,不过对于中间使用了变量算式它们就不敢动了,所以很多情况下你还得自己干。

2.6K40

Erlang 03 - Erlang缺陷

大部分情况下, 每个操作成本都清晰可辨, 没有隐式调用对象构造函数和析构函数, 没有运算符重载(因此+运算符局部可能偷偷摸摸复制整个对象), 没有虚函数表带来间接调用, 没有临界区, 也没有阻塞式消息发送原语...数据类型 内存占用量 小整数 1个字 大整数 至少3个字(可按需增长) 浮点32位架构下占4个字, 64位架构下占3个字 原子 1个字(原子名称字符串仅存在Erlang节点原子表中) 二进制串或位串...二者之间唯一可感知区别就是大整数运算会比整数运算要来. 带有密集数值运算大紧凑循环中, 如果给定输入会导致大量大数运算, 就会产生较为明显性能差异....浮点数及其装箱形式 Erlang采用是64位精度浮点数, 一个字长容纳不下(即使64位机器上也放不下, 和小整数情景一样, BEAM会讲一些位用作类型标签)....例如, 很多年前调用其他模块中函数比调用本地函数要慢得多, 现如今, 二者已经差不多了.

1.6K30

阿里云面试:为什么建议使用 BigDecimal 进行浮点运算

浮点运算竟然还会有精度丢失风险吗?确实会!...这个和计算机保存浮点机制有很大关系。我们知道计算机是二进制,而且计算机表示一个数字时,宽度是有限,无限循环小数存储计算机时,只能被截断,所以就会导致小数精度发生损失情况。...这也就是解释了为什么浮点数没有办法用二进制精确表示。...通常情况下,大部分需要浮点数精确运算结果业务场景(比如涉及到钱场景)都是通过 BigDecimal 来做。...想要解决浮点运算精度丢失这个问题,可以直接使用 BigDecimal 来定义浮点值,然后再进行浮点运算操作即可。

42610

两行代码统计模型参数量与FLOPs,这个PyTorch小工具值得一试

模型到底有多少参数,每秒浮点运算到底有多少,这些你都知道吗?近日,GitHub 开源了一个小工具,它可以统计 PyTorch 模型参数量与每秒浮点运算数(FLOPs)。...其实模型参数量好算,但浮点运算数并不好确定,我们一般也就根据参数量直接估计计算量了。但是像卷积之类运算,它参数量比较小,但是运算量非常大,它是一种计算密集型操作。...反观全连接结构,它参数量非常多,但运算量并没有显得那么大。 此外,机器学习还有很多结构没有参数但存在计算,例如和 等。...最后输出浮点运算数和参数量分别为如下所示,换算一下就能知道 DenseNet-121 参数量约有 798 万,计算量约有 2.91 GFLOPs。...其实它统计代码项目中也非常可读,从代码上看,目前该工具主要统计了视觉方面的运算,包括各种卷积、激活函数、池化、批归一化等。

4.2K20

为什么说NVIDIA推出了史上最强GPU?

可能增强TensorCore 辅助 新加入RT Core,一起来完成RealtimeRay-Tracing。能将巨大运算量完成实时渲染,这点实际上很伟大!...本次NV在这个新图灵架构上提供了能大量加速实时性计算(包括光线追踪, 以及, VR/AR)上面的增强特性.这带来了第(3)点:该运算性能增强是浮点? 还是整数?是否是谣传以久FP8? ?...还有这里,目前NV图里面给出性能单位是10G Rays/Sec,不知道这个单位意思。10G条光线每秒,不知道是指折算到什么计算情况下。...可以实现浮点运算整数运算并发,等于两张卡了:一张整数卡,一张浮点卡。前者可以图像处理,后者科学计算。...突然想到国内BTM/Tensority团队和比特大陆。以前有个BTC,大家都说挖矿是浪费能源。很多人都骂这点,说是炒作,浪费国家电力。

1.2K40

估算卷积层与反卷积层运算量

那么对于给定一个卷积神经网络模型定义,该如何估算其浮点运算量。对卷积神经网络来说,卷积层运算量是占网络总运算量大头,而对于一些像素级别任务,反卷积层也要算上。...网上有很多介绍如何计算卷积网络运算量文章,基本都是介绍卷积还有全连接等一些常用层是如何计算,但很少有介绍反卷积层运算量如何计算。...Scala版本:https://github.com/Ldpe2G/DeepLearningForFun/tree/master/Mxnet-Scala/UsefulTools 普通卷积 普通卷积层运算量很多文章都已经讲过如何计算了...下面这个仓库代码计算运算量时候也是只算了乘法: https://github.com/albanie/convnet-burden 卷积反向和接下来要介绍和反卷积前向是对应,这里简单提一下卷积反向过程...分组卷积 分组卷积运算量其实就是直接把卷积运算量除以组数,比如分为g组,继续沿用上面卷积运算量公式的话,那么分组卷积运算量为: ? 加上偏置的话就是: ?

90920

两行代码统计模型参数量与FLOPs,这个PyTorch小工具值得一试

机器之心报道 参与:思源 你模型到底有多少参数,每秒浮点运算到底有多少,这些你都知道吗?...其实模型参数量好算,但浮点运算数并不好确定,我们一般也就根据参数量直接估计计算量了。但是像卷积之类运算,它参数量比较小,但是运算量非常大,它是一种计算密集型操作。...反观全连接结构,它参数量非常多,但运算量并没有显得那么大。 此外,机器学习还有很多结构没有参数但存在计算,例如最大池化和 Dropout 等。...最后输出浮点运算数和参数量分别为如下所示,换算一下就能知道 DenseNet-121 参数量约有 798 万,计算量约有 2.91 GFLOPs。...其实它统计代码项目中也非常可读,从代码上看,目前该工具主要统计了视觉方面的运算,包括各种卷积、激活函数、池化、批归一化等。

6.7K20

从奔腾IVCD播放到AI区块链播放器——程序优化魔法

如果算1个点,用一个标准原始reference算法,需要做8个乘加运算,8个点就64个乘加运算,这样非常;如果使用快速算法,快速算法用加法移位替换乘法,一般小于16个乘法,这样相当于每个点只做了2...很早以前也就是Windows图形化窗口普及之前出现一些3D游戏就要大量浮点运算,即使做一个开方也无法避免。但这之中有几个奇迹般开方函数,这个函数原理究竟是怎样,我一直没有研究透彻。...这是一个很神奇系数,其运算也很诡异,最后通过一个从整数浮点强制转换就可以使这个结果返回,相当于牛顿迭代法迭代了三次。...这使得运算量被大幅减小,同时预先生成参数表体积小很多。这些改进带来实际性能提升可达到3倍以上,可以说是巨大提升了。...这样做两次就会造成动态代码非常大同时运算量很多,这种情况下运算速度也会非常快。用这种方法处理完成后,基本上处理速度会有一倍左右提升。 4、结果 两次变化本身就比一次单个变换快。

38310

C语言代码优化方案

在其它条件不变情况下,使用%f参数,会使生成代码数量增加很多,执行速度降低。...(2)求余运算 a=a%8; 可以改为: a=a&7; 说明:位操作只需一个指令周期即可完成,而大部分C编译器“%”运算均是调用子程序来完成,代码长、执行速度。...实际上,只要是乘以或除以一个整数,均可以用移位方法得到结果,如: a=a*9 可以改为: a=(a<<3)+a 采用运算量更小表达式替换原来表达式,下面是一个经典例子: 旧代码: x = w %...(8)提取公共子表达式 某些情况下,C++编译器不能从浮点表达式中提出公共子表达式,因为这意味着相当于对表达式重新排序。...很多高级语言,包括C++,并不对产生浮点表达式重新排序,因为那是一个相当复杂过程。需要注意是,重排序代码和原来代码代码上一致并不等价于计算结果一致,因为浮点操作缺乏精确度。

6.7K108

c语言中位运算用法_c语言中位运算优先级

1.左移运算符<< 运算规则:对运算符<<左边运算量每一位全部左移右边运算量表示位数,右边空出位补0。...乘法运算转化成位运算 (不产生溢出情况下) a * (2^n) 等价于 a<< n 2....右移运算符>> 运算规则:对运算符>>左边运算量每一位全部右移右边运算量表示位数,右边低位被移出去舍弃掉,空出高位补0还是补1,分两种情况: (1)对无符号数进行右移时,空出高位补0。...除法运算转化成位运算 (不产生溢出情况下) a / (2^n) 等价于 a>> n 取模运算转化成位运算 (不产生溢出情况下) a % (2^n) 等价于 a & (2^n – 1) 循环移位实现...如将一个无符号整数x各位进行循环左移4位运算,即把移出高位填补空出低位处。 可以用以下步骤实现: (1)将x左移4位,空出低4位补0,可通过表达式x<<4实现。

77410
领券