我在想哪种整数或浮点类型是最快的...
我认为byte比integer更快,因为它的范围更小。
有些人告诉我.. 在某些情况下,integer比byte更快。
第二个问题:
GPU正在走向世界统治..
所以我问自己:一个Double“比Integer更快”.. 因为FPU
那么专家们在哪里呢? :)
我在想哪种整数或浮点类型是最快的...
我认为byte比integer更快,因为它的范围更小。
有些人告诉我.. 在某些情况下,integer比byte更快。
第二个问题:
GPU正在走向世界统治..
所以我问自己:一个Double“比Integer更快”.. 因为FPU
那么专家们在哪里呢? :)
这取决于架构中的数据位数。 浮点处理器在进行计算时将以相同方式处理float和double。它们都使用80位精度进行评估,因此需要相同的时间。将值加载到FPU寄存器中并将其保存可能会有所不同。由于双倍占用RAM空间,因此可能会因缓存未命中而变慢。如果您有倾向于随机索引的大型数组,则会注意到这一点。
在 CPU 级别上,没有字节,只有单词,现在是 32 位或 64 位。算术单元通常被硬连线处理单词大小的数字(或更大,如浮点数)。
因此,在算术运算方面使用比单词小的类型并没有速度优势,而且可能会有速度惩罚,因为您必须做额外的工作来模拟 CPU 没有本地支持的类型,例如写入单个字节到内存需要先读取它所属的单词,修改它,然后将其写回。为了避免这种情况,大多数编译器实际上会对所有较小的变量使用完整的内存单词,因此即使布尔变量也占用 32 或 64 位。
但是,如果您有大量数据,例如大型数组,则使用较小的类型通常会产生更好的性能,因为您将减少缓存未命中的次数。
数值类型的字节长度取决于使用的语言和平台。例如,在Java中,int和float都使用4个字节,因此处理时间应该相等。然而,更长的类型被更快地处理这一点让我感到惊讶。如果有证据支持,请分享给我阅读。
好的,只要您不进行任何矢量优化,您可以使用整数作为寄存器(32/64位)的大小而不会受到任何实际性能损失。
浮点数略有不同:虽然 CPU 优化了 double,但 GPU 通常使用 float。