我希望以前没有涉及到这个问题,但是如果我在c ++中编译一个使用64位浮点数(双精度)的32位程序,并在64位操作系统上运行它,它仍然会花费尽可能多的时钟周期将64位浮点数移动到cpu并返回到ram,就像在32位操作系统上一样,因为它编译为32位。或者它需要更少的时钟周期,因为OS一次以64位移动,即使程序是在32位编译器中编译的。我问的原因是因为我使用VS express只有32位,我想知道我是否可以使用64位浮点数同时保持速度或32位浮点数会更快,即使我使用64位操作系统,并相信我,我想编写的程序将使用数万个浮点数,这些浮点数将对它们进行许多计算和逐位运算(查看神经网络)。
谢谢。
答案 0 :(得分:1)
你听到的32比64比特是地址中有多少比特。它与用于表示双精度的位数没有多大关系。特别是,32位程序仍然代表64位的双倍,而现代处理器的硬件可以本机处理64位浮点数(即使它们本身只能处理32位整数)。
所以回答你的问题,不管它不重要。浮点运算的速度不应取决于OS或编译器的32位或64位。
答案 1 :(得分:0)
作为一般规则,双打比浮点慢。
A)数据移入和移出内存需要更长的时间。现在的公交车非常广泛,但仍然需要“更多”时间来移动“更多”数据。
B)双打花费更多时间进行计算,因为硬件在进行数学运算时往往会在一组位上运行,而不是一次完成。
C)4字节花车有更多的用途,因此,更多的门被扔在他们身上。请注意,x86芯片上的SSE一次运行4个浮点数,通常每个指令运行4个时钟。有些SSE指令使用双精度数,但一次只能使用两个,但是,如果您需要额外的精确度,那么请使用双打,并消耗性能成本。
您可能希望研究GPGPU来处理大型数据集,只有最新的硬件才会增加一倍,但它们的GPU浮动性能非常出色。