【问题标题】:Running 128 bit Fortran calculations of a 64 bit computer运行 64 位计算机的 128 位 Fortran 计算
【发布时间】:2017-07-25 08:18:01
【问题描述】:

我有一个 64 位的 linux 系统。我使用 gfortran 编译并运行我的 Fortran 代码,这会将一些数字输出为双精度,即 ~ 16 位小数。例如

gfortran some_code.f -o executable1
./executable1
10.1234567898765432

如果我现在使用标志-fdefault-real-8 进行编译,则 Fortran 双精度类型将提升为 16 字节 = 128 位,并输出一些数字,但精度更高~小数点后 33 位。例如

gfortran -fdefault-real-8 some_code.f -o executable2
./executable2
10.12345678987654321234567898765432

我的问题是:如果我的电脑只有 64 位,这个计算怎么能做到如此高精度?

【问题讨论】:

  • 这是所有(可能在)软件。您甚至可以拥有更多更高的精度(数百万位)。这完全取决于所使用的软件/算法。尽管有许多可能的技巧和算法来加快速度,但精度越高,过程往往就越慢。 CPU 是 64 位的事实与此无关。这也可以在 32 位或 16 位处理器上完成。
  • 双精度提升为 128 位如果可能。更有可能的是,在 x86 等典型的现代硬件上,它将保持 64 位。

标签: floating-point fortran 64-bit gfortran quadruple-precision


【解决方案1】:

首先,您的 CPU 是 64 位这一事实意味着它使用 64 位指针(内存地址)。它与浮点变量大小完全无关。 32 位 CPU(甚至 16 位!)使用 64 位浮点数和整数就好了。1

128 位浮点数是在软件中实现的,它是一种 128 位浮点处理器单元的“模拟”,实际上非常慢。这不是因为你的 CPU 是 64 位的,而是因为 CPU 的浮点单元只实现了 64 位的浮点运算。即使在 Intel 的 32 位 CPU 中也是如此。

为 GCC 实现 128 位计算的库是 libquadmath


1其实浮点位操作是在浮点单元(FPU)中完成的。它曾经是与 CPU 分离的特殊芯片,但现在它们总是集成在 Intel 消费级处理器中。在过去,如果您不购买单独的 FPU,所有浮点运算都是模拟的并且速度很慢。

【讨论】:

  • 嗯,有趣的是,64 位处理器可以使用 64 位算术模拟 128 位算术吗?这就是为什么 128 位会很慢?
  • 不管是32位处理器还是64位处理器甚至是16位处理器。您感兴趣的是浮点单元。 Intel CPU 具有支持 32 位和 64 位 IEEE 浮点数的浮点单元。其他类型的浮点数必须在软件中实现。是的,它很慢。
猜你喜欢
  • 2018-11-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多