首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用浮点数组或整数数组计算Pi

使用浮点数组或整数数组计算Pi
EN

Stack Overflow用户
提问于 2012-12-28 15:05:00
回答 1查看 929关注 0票数 1

我使用Aparapi在GPU上的Java程序中进行数字运算。据我所知,Aparapi很好地使用了浮点数组。

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

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

代码语言:javascript
复制
int[] digits = new int[N];

如果我将其与Leibniz方法一起使用,我将需要为我找到的M项计算N个整数数组(Liebniz表示pi/4 =1- 1/3 + 1/5 - 1/7 +1/9...),然后将它们相加,并将得到的数字乘以4。但这意味着我需要为我计算的每个项分配许多整数,这将增加并真正消耗内存。

tl;dr:我如何使用浮点运算的循环来计算Pi,这样我就可以用Aparapi来计算Pi了?

非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-25 05:11:35

您需要减少将m个元素部分添加到@Local注释数组中(用于aparapi中的本地内存)。假设有N个total元素,因此您需要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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14065929

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档