我一直在查看代码
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
任何人都可以告诉这个算法使用什么级别的并行性? 我问的是平行度的水平 1)工作或计划水平 2)任务或程序级别 3)内部指令级别 4)内部指令级
答案 0 :(得分:0)
这是monte carlo方法,运行得越多,你将会追溯到更准确的结果。
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
上面的代码是蒙特卡罗步骤,它可以在独立运行的num个线程中并行化(只要在线程之间共享circle_count变量)。 在创建所有点之后,您可以返回单线程来计算pi值。