1

我正在使用 Aparapi 在 GPU 上的 Java 程序中进行数字运算。据我了解,Aparapi 非常适合浮点数组。

我想使用 Aparapi 将 Pi 计算到小数点后 N。我正在考虑使用 Leibniz 方法,但我不确定如何处理以浮点或整数形式表示和存储长小数。

整数数组是否可以工作,数组的大小是所需的 N 个小数?

int[] digits = new int[N];

如果我将它与 Leibniz 方法一起使用,我需要为我找到的 M 个项计算 N 个整数的数组(Liebniz 说 pi/4 = 1 - 1/3 + 1/5 - 1/7 + 1/9 ....),然后将它们加在一起并将结果数乘以 4。但这意味着我需要为我计算的每个术语分配 M 个整数,这会加起来并且确实会占用内存。

tl;dr:如何使用浮点运算循环计算 Pi,以便我可以使用 Aparapi 来计算?

非常感谢!

4

1 回答 1

2

您需要减少以在 @Local 注释数组中部分添加 m 元素(用于 aparapi 中的本地内存)。假设总共有 N 个元素,因此您需要 N/m 个需要更快带宽的部分和(因此在本地内存中)。

你也应该使用 localBarrier(); 同步计算单元中的核心或本地工作组中的工作单元。然后将数据发送到主存。

非常简短的例子:

您需要 1+2+3+4+5+6+..... 并且每个 GPU 计算单元有 3 个内核。

1+2 在核心数 1 中完成

3+4 在 2 号核心中完成

5+6 在 3 号核心中完成

然后在本地内存中添加内核的输出,该计算单元的所有相邻内核都共享该输出。

最后你在一个数组中得到 3,7,11,在本地内存中总和为 21。

将所有计算单元的所有这些数据都添加到主内存中,例如 21,57,.... 然后您可以将它们全部添加到 cpu 中。

当然会有 (+/-)(1/(2*n+1)) 而不是 1,2,3,4,5

于 2013-05-24T21:11:35.290 回答