在 64 位操作系统上使用 32 位编译器编译的 64 位浮点数

问题描述 投票:0回答:2

我希望之前没有涉及到这一点,但是如果我用 C++ 编译一个使用 64 位浮点数的 32 位程序(

double
),并在 64 位操作系统上运行它,它仍然会像像在 32 位操作系统上一样,将 64 位浮点数移至 CPU 并移回 RAM,因为它是针对 32 位进行编译的。或者会花费更少的时钟周期,因为操作系统一次移动到 64 位,即使程序是在 32 位编译器中编译的。

我问的原因是因为我使用的是 VS Express,它只有 32 位,我想知道我是否可以在保持速度的同时使用 64 位浮点数,或者 32 位浮点数是否会更快,即使我'我使用 64 位操作系统,相信我,我想编写的程序将使用数万个浮点数,这些浮点数将对其执行许多计算和按位运算(研究神经网络)。

谢谢你。

c++ double 32bit-64bit
2个回答
2
投票

您听到的 32 位与 64 位是地址中有多少位。它与用多少位来表示双精度数没有什么关系。特别是,32 位程序仍然表示 64 位中的双精度,并且现代处理器具有可以本机处理 64 位浮点的硬件(即使它们只能本机处理 32 位整数)。

所以回答你的问题,不,这不重要。浮点运算的速度不应取决于操作系统或编译器的 32 位或 64 位。


0
投票

一般来说,双精度数比浮点数慢。

A)数据移入和移出内存需要更长的时间。现在的总线确实很宽,但传输“更多”数据仍然需要“更多”时间。

B)双精度数需要更多时间来计算,因为硬件在进行数学计算时往往一次对位组进行操作,而不是同时操作。

C) 4 字节浮点数有更多用途,因此,向它们抛出了更多门。请注意,x86 芯片上的 SSE 一次运行 4 个浮点,通常每条指令需要 4 个时钟,有一些 SSE 指令使用双精度,但一次只能运行两个,

但是,如果您需要额外的精度,请使用双精度,并消耗性能成本。

您可能想研究 GPGPU 来处理大型数据集,只有最新的硬件才能加倍,但它们的一般 GPU 浮点性能非常出色。

© www.soinside.com 2019 - 2024. All rights reserved.