繁体   English   中英

对不同数据类型的操作

[英]Operation on different data types

在任何标准语言C / C ++,Java等中考虑基本数据类型,如char,int,float,double等

是否有类似的东西......“对整数进行操作比对字符进行操作更快”..通过操作我的意思是赋值,算术运算/比较等等。数据类型是否比另一个慢?

对于你正在做的几乎任何事情,这几乎没有任何影响,但纯粹出于信息目的 ,使用大小为机器字大小的数据类型(即x86上的32位和amd64上的64位)通常最快。 此外,如果您可以将这些指令分组并同时处理它们,SSE / MMX指令也会给您带来好处

这个规则有点像英语拼写和/或语法规则。 这些规则至少在遵循规则的情况下被打破。

例如,多年来“每个人都知道”浮点运算比整数慢,特别是对于更复杂的运算,如乘法和除法。 实际上,一些处理器通过将操作数转换为浮点,在浮点上执行操作,然后将结果转换回整数来执行一些整数运算(尤其是乘法和除法)。 正如您所期望的那样,浮点运算实际上更快(尽管只是一点点)。

然而,大多数时候,它并不重要 - 在很多情况下,将处理器本身的操作视为免费是非常合理的,并且主要关注优化对内存的带宽使用。 当然,做得好往往更难......

是的,一些数据类型肯定比其他数据类型慢。 例如,浮点数比int更复杂,因此在进行除法和乘法运算时可能会产生额外的惩罚。 这完全取决于您的硬件设置方式以及它支持的指令类型。

长于机器字大小的数据类型也会变慢,因为执行操作需要更多周期。

取决于你做什么,差异可能非常大,特别是在使用花车而不是双倍与长双倍时。

在现代处理器中,它归结为simd指令,它具有一定的长度,最常见的是128位。 四个浮动对两个双数。

但是,有些处理器只有32位simd指令(PPC),而GPU硬件在float和double之间的性能差异为8。

当您将三角函数,指数函数和平方根函数添加到混合中时,浮点数将在给定数量的因素下具有更好的性能。

几乎所有这个页面上的答案都是正确的。 但是,答案会有很大差异,具体取决于您的硬件,语言,编译器和VM(在Java等托管语言中)。 在大多数CPU上,最佳性能是对适合CPU本机操作数大小的数据类型执行操作。 但是,在某些情况下,某些编译器会为您优化。

在大多数现代桌面CPU上,浮点和整数运算之间的差异变得非常微不足道。 但是,在较旧的硬件和许多嵌入式系统上,所有这些因素的差异仍然非常大。

重要的是要了解目标架构和工具的细节。

这个答案与Java案例(仅)有关。

字面上的答案是原始类型和运算符的相对速度取决于您的处理器硬件和JVM实现。

但更好的答案是,它通常不会对您使用的表现形式产生很大的影响。 实际上,为了使代码在当前机器/ JVM上快速运行,您所做的任何聪明的数据类型优化都可能成为不同机器/ JVM组合的反优化。

通常,最好以正确和自然的方式选择代表数据的数据类型,并将其留给编译器来整理细节。 但是,如果要创建基本类型的大型数组,则值得知道Java对布尔,字节和短数组使用紧凑表示。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM