蒙特卡罗算法并行计算

因为蒙特卡罗算法求圆周率这个问题没有数据相关性,完全可以用并行计算来模拟之。

首先回顾下蒙特卡罗算法求圆周率,扔了几颗“豆子”,就是说需要执行多少次的随机数产生。比如我们扔了10000次,那么我们要创新获取10000次随机数;我们容忍不了,完全没有数据相关性的事情,完全可以一起做的事情,何必呢!拉出10000人的队伍,没人同时扔一颗不就完事儿了。对的,我们用gpu吧。

开10000个线程,一起来做这件事情!

算法如下,这是《并行计算》里面给出的一个任务分配,很好就用了。

npoints = 10000

circle_count = 0

p = number of tasks

num = npoints/p

find out if I am MASTER or WORKER

do j = 1,num

generate 2 random numbers between 0 and 1

xcoordinate = random1

ycoordinate = random2

if (xcoordinate, ycoordinate) inside circle

then circle_count = circle_count + 1

end do 

if I am MASTER

receive from WORKERS their circle_counts

compute PI (use MASTER and WORKER calculations)

else if I am WORKER

send to MASTER circle_count

endif

 

cuda程序很简单的,自己试着写写。

转载于:https://www.cnblogs.com/viviman/archive/2012/11/21/2780629.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值