GPU 与 CPU 计算

计算科学 并行计算 显卡 复杂
2021-12-08 21:21:41

我一直在计算大阶乘(N>109) 我想知道使用 GPU 在 openCL 之类的东西上运行计算是否会更快。然而,我意识到,在这种情况下,我不仅不知道这是否值得,我也不知道何时使用 GPU 进行数字运算是合适的或不合适的。所以,基本上,对于这么大的数字使用 GPU 和 CPU 的优缺点是什么(109!) 或者什么时候值得做 GPU 实现?

2个回答

这可能在原始问题下的评论中没有被注意到,但是计算109!产生一个有 85 亿位数的数字,也就是说它的数量级为109109. 鉴于109109=1000310910243109=(210)3109=231010, 你需要大约31010位,或周围4109字节来简单地表示这样一个数字。这是相当大的内存量。

现在假设您想通过让每个处理器计算部分阶乘来并行计算这个数字。例如,处理器p计算Qp=k=Np1Npk, 那么总数可以计算为NP!=p=1PQp如果你选择N0=1P是处理器的数量。但一般来说,每一个Qp将与最终结果的数量级相同(嗯,不完全是,但你明白了),所以如果你有P处理器,您需要提供P存储最终结果所需的内存倍数。

在 GPU 上,您有许多处理器,P=O(1000). 如果您必须存储的每个数字已经占用了 4 GB 内存,那么如果您必须将其存储 1000 次以上,那么您很快就会得到大量内存,这不仅在典型的 GPU 上不可用,而且在事实上,即使在普通台式电脑中也没有。

我认为这意味着如果你尝试计算,你咬的比你可能咀嚼的要多109!.

有点旧,但 CUDA 多精度算术库可能支持您需要的操作,并报告2-4 倍的加速比 CPU 插槽。它声称具有类似 GMP 的接口,因此相对于编写自定义内核代码而言,移植您的代码可能是直截了当的。