Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance 双精度操作:32位与64位机器_Performance_Memory_32bit 64bit_Cpu Registers_Cpu Architecture - Fatal编程技术网

Performance 双精度操作:32位与64位机器

Performance 双精度操作:32位与64位机器,performance,memory,32bit-64bit,cpu-registers,cpu-architecture,Performance,Memory,32bit 64bit,Cpu Registers,Cpu Architecture,在64位机器上执行64位操作(例如,双精度操作)时,与在32位机器上执行相比,我们为什么看不到性能提高两倍 在32位机器中,我们不需要从内存中提取两倍的数据吗?更重要的是,我们不需要两倍的周期来执行64位操作吗?“64位机器”是一个模棱两可的术语,但通常意味着处理器的通用寄存器是64位宽的。比较和,它们具有相同的指令集,在这个意义上都可以称为16位处理器 在这个意义上使用这个短语时,它与内存总线的宽度、CPU内部总线的宽度以及ALU在32或64位宽数据上高效运行的能力无关 您的问题还假设乘法中最

在64位机器上执行64位操作(例如,双精度操作)时,与在32位机器上执行相比,我们为什么看不到性能提高两倍


在32位机器中,我们不需要从内存中提取两倍的数据吗?更重要的是,我们不需要两倍的周期来执行64位操作吗?

“64位机器”是一个模棱两可的术语,但通常意味着处理器的通用寄存器是64位宽的。比较和,它们具有相同的指令集,在这个意义上都可以称为16位处理器

在这个意义上使用这个短语时,它与内存总线的宽度、CPU内部总线的宽度以及ALU在32或64位宽数据上高效运行的能力无关

您的问题还假设乘法中最困难的部分是将操作数移动到处理器内负责乘法的单元,即使操作数来自内存且总线为32位宽,这也不太正确,因为延迟!=吞吐量此外,关于浮点乘法的数学,64位乘法的难度不是32位乘法的两倍,它大约是(53/24)2倍(但是,同样,晶体管可以在那里有效地计算双精度乘法,而不管通用寄存器的宽度如何)

在32位机器中,我们不需要从内存中提取两倍的数据吗

不会。在大多数现代CPU中,内存带宽至少为64位。较新的微体系结构可能具有更宽的总线。四通道内存的CPU-RAM带宽至少为256位。所以你只需要取一次就可以得到一个双人间。除此之外,大部分时间该值已经在缓存中,因此加载它不会花费太多时间

更重要的是,执行64位操作不需要两倍的周期吗

首先,您应该知道double中有效位的实际数量只有53,所以它不会“加倍”困难

要对这些浮点值进行操作,需要将它们加载到寄存器中。一旦加载,只要ALU能在一条指令中快速完成双精度数学运算,性能就不会有什么不同。对于允许一个内存操作数(如x86)的体系结构,如果将该值提取到缓存中,则对寄存器的操作几乎没有区别


使用SSE2/AVX/AVX-512,ALU甚至可以一次处理2/4/8个双精度,因此您可以看到,只有这样的双精度对它来说并没有太大的工作量。在旧的x87中,内部寄存器的长度为80位,单精度和双精度必须扩展到80位,因此它们的性能也将相同。

Hi Pascal。谢谢你是对的。但理论上,我所期望的是合乎逻辑的?如果我们假设寄存器、总线等都是64位的,那么我们应该期望性能提高两倍?@Computer\u guy不,乘法困难的是乘法部分,它是双精度乘法的(53/24)^2倍于单精度乘法。对于数据的哑传输,64位可以传输为32位的两倍,但这种推理不适用于数学。处理器要么具有双精度乘法器,要么允许您在软件中实现双精度。你不能用4个单精度乘法进行双精度乘法,因为在其他细节中,它们是不够的!你的回答很好。我只是等了几个小时,看看是否还有其他有趣的答案。是的,但大多数64位CPU都有更好的64位值指令集。