【发布时间】:2011-08-31 22:00:21
【问题描述】:
我几天来一直在尝试在 MINGW 下安装 GMP 库。我已经在 linux64 位环境下使用带有 gcc 的 __uint128_t 数周,然后在 GMP 和 mingw(32 位版本)下移植了相同的程序。我使用mpz_class 整数而不是__uint128_t。然后我开始了我的新程序,然后......!使用__uint128_t 和 64 位需要 16 分钟才能完成,使用 GMP 和 MINGW 需要 91 小时!!!
我应该怎么做才能加快速度?有没有更快的方法在 32 位环境下进行 128 位整数数学运算?我不需要超过 128 位,所以有什么方法可以告诉 GMP “好的,我只需要 128 位,保持精度固定但请快点”?
【问题讨论】:
-
128位需要做哪些操作? (
+、-、</>、*、/,还有更有趣的吗?) -
编译器原生支持 64 位。查找使用 32 位 uint 执行 64 位算术的代码,并使用这些原理为使用 64 位 uint 的 128 位 uint 实现它。它不会像原生 128 位支持那样快(你可以通过例如 SSE 获得),但它可能会比 libgmp 更快。
-
编译器可能支持 64 位,但在真正的 64 位环境(IOW、64 位寄存器以及更多好)。