使用浮子或整数阵列计算PI



我正在使用aparapi在GPU上的Java程序中进行数字处理。据我了解,Aparapi与浮子阵列一起播放。

我想使用aparapi将PI计算为第n个十进制。我正在考虑使用Leibniz方法,但我不确定如何处理和存储以浮动或整数形式的长小数。

一个整数数组可以工作,阵列的大小是需要的n个小数数?

int[] digits = new int[N];

如果我将其与leibniz方法一起使用,我需要计算一个n整数的数组,以找到我找到的术语(liebniz说pi/4 = 1-1/3 1/5 1/5-1/7 1/9 ....),然后将它们添加在一起并将结果编号乘以4。但这意味着我需要为我计算的每个术语分配许多整数在内存。

tl; dr:如何使用浮动操作的循环来计算PI,以便我可以使用Aparapi进行操作?

感谢一堆!

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

还应使用localbarrier();将核心与当地工作组中的计算单元或工作单位同步。然后将数据发送到主内存。

非常简短的例子:

您需要1 2 3 4 5 6 .....您有3个核心GPU的单位。

1 2在核心号1

中完成

3 4在核心编号2

中完成

5 6在核心编号3

中完成

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

终于在一个阵列中获得3,7,11,该数组中的本地内存中的21总和。

将所有计算单元的所有这些数据添加到主要内存,例如21,57。

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

最新更新