首页 > 解决方案 > 任何数字的阶乘都是可并行化的吗?

问题描述

任意数的计算阶乘可以并行吗?如何 ?

标签: parallel-processingopenmp

解决方案


当然,为什么不呢?乘法是关联的。a * (b * (c * d)) == (((a * b) * c) * d) == (a * b) * (c * d)。分而治之的并行化方案的含义应该很清楚。

但是,这只会对许多数字的产品有任何切实的好处,如果你在谈论阶乘,这意味着你正在处理超出任何计算机本机整数范围的巨大产品,这意味着你正在处理任意精度算术...在这种情况下,您可能有机会并行化单个乘法(Karatsuba 乘法是递归的,并且基于 FFT 的乘法中的 FFT 也非常可并行化),并且如果您可以用完所有资源这样一来,在更高层进行并行化就没有意义了。

对于计算合理大小的阶乘,最快的方法可能是直接的单线程方法,它没有开销。


推荐阅读