吴燕晶实验11:使用OpenMP和MPI求素数个数

需积分: 0 0 下载量 87 浏览量 更新于2024-08-05 收藏 226KB PDF 举报
"SA17011125_吴燕晶_实验11 - 求素数个数的并行计算实验" 本实验主要关注的是如何利用并行计算技术来提高求解素数个数的效率。实验者吴燕晶通过两个不同的并行计算框架——OpenMP和MPI——来实现这一目标。实验的主要任务是给定一个正整数n,计算小于等于n的所有素数的数量,并测量不同规模下程序的运行时间,以便分析并行计算的性能和加速比。 首先,实验中涉及的核心算法有两个关键部分: 1. **values函数**:该函数负责设置并行计算的线程数,维护一个全局变量来统计素数的个数。它会并行地处理从2到n的每个数,通过调用isprime函数来判断每个数是否为素数。在完成计算后,values函数将输出素数的总数、所需时间和加速比。 2. **isprime函数**:这是一个用于判断一个数是否为素数的函数。素数是只有1和自身两个正因数的自然数,大于1且不能被1和自身之外的其他自然数整除。isprime函数会进行一系列的除法操作,检查输入数字是否能被小于它的任何整数整除,从而确定其素数状态。 实验在Ubuntu 16.04操作系统上进行,使用4GB内存和4核处理器的虚拟机环境。对于OpenMP的实现,实验结果显示随着线程数的增加,运行时间在初期有显著减少,但当线程数超过一定值(在这个案例中是4)时,运行时间的增长速度减缓,表明并行计算的效率开始下降。同时,观察到加速比也显示出类似的趋势,即并行处理在初期有较大的加速效果,但增加线程数后加速比逐渐降低。 对于MPI(Message Passing Interface)的实现,实验同样展示了类似的现象。随着进程数的增加,运行时间总体上减少,但加速比在进程数达到一定值后不再线性增长。值得注意的是,MPI在处理更大规模问题(如100000和500000)时,相比OpenMP有更稳定的加速表现。 综合来看,实验旨在探讨并行计算在解决数学问题中的应用,特别是在素数计算这种计算密集型任务中的性能表现。通过比较OpenMP和MPI两种并行编程模型,可以为优化并行算法提供有价值的参考,帮助选择更适合特定问题的并行计算策略。