当前位置:文档之家› 多线程并行快速求解Pi的方法

多线程并行快速求解Pi的方法

表1 Data Base Technique·数据库技术 

计算方式 序号 运行时间(S) 计算结果 平均结果 平均时间(s) 并行加速比 

1 1.28l 3.14159 1.O 级数串行计算 2 1.302 3.14l59 3.14159 1.287 1.0 

3 1.277 3.14l59 1.0 1 0.375 3.14925 3.43 级数openMP法 2 O-371 3.14159 3.14159 0.373 3.51 

3 0.372 3.14159 4.02 

表2 

计算方式 序号 运行时间(S) 小数点位数 并行加速比 

1 0.036 4 1.0 BBP串行算法 2 0.045 100 1.0 

3 0.284 1000 1.0 

1 0.01 4 3.6 BBPMPI并行算法 2 0.018 l0O 2.5 

3 O.08l 1000 3.51 

表3 

计算方式 序号 计算结果 运行时间(s) 平均结果 平均时间(s) 加速比 平均加速比 

1 3.14184 0.527 1.O0 串行计算 2 3.14227 0.545 3.14l56 0.532 1.00 1.0O 

3 3.14057 0.525 1.O0 1 3.13999 0.24l 2.19 WinAPI 2 3.13999 0.253 3.13999 0.244 2.15 2.18 3 3.13999 0.239 2.20 1 3.】3999 0.260 2.O3 

OpenMP 2 3.1399 0.248 3.13999 0.254 2 20 2.O9 3 3.1399 0.255 2,O6 l 3.14186 0.238 2-21 MPI 2 3.14179 0.235 3.14144 0.236 2I32 2.25 3 3.14068 0.236 2 22 

for(inti=2;i<N;i++) 

{ 

c[omp_geLthread_num()]+=4 x; 

sign=sign (一1); x sign/double(2 i—1); 

) 

这个算法中,我们发现运行后,串行时 

间和并行时间是基本一致的: 

这个问题在于x,sign的值为共享量,当不 同的线程在调用时存在等待的时间,所以如果 

将这些值私有化,则可以解决这些问题。由于 使用pfiv ̄e时,各个私有变量必须在for中有 定义,即在进入并行区时,for循环中的所有 

私有变量是需要重新定义的,因此我们必须使 

得x,sign等变量在定义时全部使用已知量来定 义 

#pragma omp parallel for private(x,y) 

reduction(+:pi) 

for(inti=1;j<N;i+=2) 

{ Y=1/double(2 i—1): pi=pi+4 y; 

X=一l/double(2 (1+i)一 

1); pi=pi+4 x; 

} 因此程序完美的解决了并行问题。(如 表1所示)。 

3.3 BBP算法的实现 

MPI是专门为集群和多节点并行计算语 

言,运行效率高,实现方式多样,可以进行主 从式、并列式以及流水线式等方式的实现。在 利用计算机多核CPU,模拟多个节点的实现 

方式。改造成主从式程序,利用0号节点作为 主节点收发数据,也参与计算,而其他节点只 

进行计算,为负载均衡选择详尽的计算量运行 到不同的节点上。 根据BBP算法(如图4所示)我们将整 

个运算分成4个部分,分别用一个线程进行运 

算,其运算总时间约等于线程中运行时间最长 的那个(计算结果如表2所示)。 

3.4 API、OpenMP、MPI对比实验 

我们以蒙塔卡罗算法为例,分别采用 API、OpenMP、MPI三种并行方式对值进行 

计算,来对比其运算效率和运算精度(计算结 果如表3所示)。 

4结论 

(1)MPI模拟多节点计算的速度是最快 的,而且计算结果也是最接近穿行结果的,所 

以MPI适合计算大规模的较为精确的求解问 

题。 (2)WjnAPI实现用临界区的效果最差, 而且winAPI的计算速度很大程度也和临界区 的设定有关,尽量缩小临界区有利于提高并行 

速度。 

(3)WinAPl实现用线程号为每个线程 

分配不同的任务,分配过程需要人为干预,对 于函数复杂的程序来说,实现繁琐,不利于使 

用。 (4)数值计算时要根据实际情况选择和 

改造算法。比如在计算值就比e更适合并行。 而且每种并行方法都有它的特使要求,比如在 

使用parallel for private时,由于变量进入for 循环后属于重新定义,所以不能出现自己为自 

己赋值的情况,需要按照程序一步步展开来写, 

相对繁琐。 

参考文献 

[1]多核系列教材编写组.多核程序设计【M]. 北京:清华大学出版社,2007. 

[2]朱建伟,刘荣.多线程并行快速求解e值 

的六种方法[J].现代计算机,201 3. 

[3】张翔圆.周率Pi的BBP多核并行算法实 

现[J】.普洱学院学报,201 3. 

作者单位 中国石油大学(华东)理学院 山东省青岛市 

266500 

Electronic Technology&Software Engineeri

ng电子技术与软件工程·209

相关主题