我开始学习 CUDA,我认为计算 pi 的长数字将是一个不错的入门项目。
我已经实现了易于并行化的简单蒙特卡罗方法。我只是让每个线程在单位正方形上随机生成点,计算出单位圆内有多少个点,然后使用归约运算计算结果。
但这肯定不是计算常数的最快算法。之前,当我在单线程 CPU 上进行此练习时,我使用类似 Machin 的公式进行计算,以实现更快的收敛。对于那些感兴趣的人,这涉及将 pi 表示为反正切的总和并使用泰勒级数来评估表达式。
这种公式的一个例子:
不幸的是,我发现将这种技术并行化到数千个 GPU 线程并不容易。问题是大多数操作只是简单地进行高精度数学运算,而不是对长数据向量进行浮点运算。
所以我想知道,在 GPU 上计算任意长的 pi 数字的最有效方法是什么?