复化梯形求定积分的并行计算方法
2016-09-22杨菁蓓
杨菁蓓
中国石油大学(华东)理学院
复化梯形求定积分的并行计算方法
杨菁蓓
中国石油大学(华东)理学院
使用复化梯形法求积分,需要将区间[0,1]进行分割,分割数越大求得的积分近似值就越精确。但是当分割数N较大时,算法的计算量会比较大,算法的运行效率比较低。可以通过并行计算的方法提高运算的速度。这样在达到较高计算精度的同时提高了算法运行的速度。
复化梯形法;并行计算;定积分
一、某问题的串行算法描述
1.1实现梯形积分法的基本步骤
(1)输入区间[a,b]的端点a,b值以及分割数N;
(2)将区间[a,b]等分成N个小区间,每一个小区间的长度h=(b-a)/N;
(3) 计算每一个等分点的函数值yi=f (a+ih)(i=0,1,…,N );
二、该问题的并行算法描述
2.1基于API的多核并行算法的设计
Windows系统提供很多API接口,可以利用WINAPI定义线程函数,函数内部设计好改线程所要进行的工作,然后主函数里创建线程,将线程函数导入创建好的线程中运行,计算根据创建的线程数目,调用相应数目的CPU进行计算,保证每个CPU运行一个线程,最终计算结束后将结果合并可得到正确结果。
2.2基于OpenMP的多核并行算法的设计
利用编译指导语句parallelfor并行原理采用工作分配的执行方式,将循环所需要工作量按一定方式分配到各个执行线程,所有线程执行工作总合是原串行完成的工作量。此方式对一个确定并且完整的for循环进行分割,分割成多段在不同CPU上运行。
可以将(2)分割成若干段独立的计算,每段计算完成后进行整理合并,在具体计算的过程中可以根据CPU的个数将多项式分成合适的个数。
三、算法实现
3.1串行算法的实现
3.2基于基于API的多核并行算法的实现
主要代码:
3.3基于OpenMP的多核并行算法的实现
OpenMp提供了对并行算法的高层的抽象描述,通过在源代码中加入专用pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。归约操作的方式是拷贝复制执行
3.4基于MPI的并行算法实现
MPI是基于消息传递的并行计算模式,建立消息传递标准的主要优点是可移植性和易于使用。以低级消息传递程序为基础的较高级和抽象程序所构成的分布储存通信环境中,标准化的效益特别明显。随着高性能计算技术的普及,MPI标准如今已经成为事实意义上的消息传递并行编程标准,也是最为流行的并行计算编程接口。
四、数值实验结论
(1)MPI模拟多节点计算的速度最快,线程调用以及初始化耗费时间少,加速比接近理论值。并且节点数目增加时,计算效果更好,所以MPI并行计算最适合求解大规模问题。
(2)WinAPI 实现用线程号分配得每个线程不同的计算任务,加速效果比较好,但是线程数不变时,随着计算步数的增加,加速比逐渐减少。
(3)利用OpenMP实现并行时,利用parallel for 进行计算不用考虑如何归约数据的问题,方便计算,并且计算速度也比较快。
杨菁蓓(1995—)女,汉族,河南邓州人,中国石油大学(华东)理学院,2013级本科生,数学与应用数学专业
[1]高性能并行计算(陈华)
[2] 由Euler_Maclaurin求和公式构造修正复化梯形公式(刘明才)