MPI求素数个数

博客探讨了在MPI并行计算中求素数个数时遇到的问题及解决方案。错误分析指出MPI_Bcast的用法不当,应分别广播输入数值,避免广播数组多个元素。还提到负载不平衡问题,因偶数素数较少导致进程间工作不均衡,影响并行效率。建议改进方法是更好地分配任务以实现真正的并行计算。
摘要由CSDN通过智能技术生成

附上另一个调用函数后针对一个输入正确代码:

#include "stdafx.h"
#include "mpi.h"
#include "stdio.h"
#include "string.h"
#include "math.h"
int isPrime(int n)
{
        int  flag=1;
		for(int m=2;m<=sqrt(n*1.0);m++)
		{
			if(n%m==0)
			{
				flag=0;
				break;
			}
		}
		return flag;
}
int main(int argc, char *argv[])
{

    int a,mypid,sum=0,local=0,size;
	int flag;
    double starttime1,endtime1,starttime2,endtime2,t1,t2;
    MPI_Init(&argc,&argv);
    MPI_Comm_rank(MPI_COMM_WORLD,&mypid);
    MPI_Comm_size(MPI_COMM_WORLD,&size);
    if(mypid==0)
    {
        scanf_s("%d",&a);
    }
    MPI_Bcast(&a,1,MPI_INT,0,MPI_COMM_WORLD);
	starttime1=MPI_Wtime();
    for(int i=mypid*2+1; i<=a; i+=size*2) //每个进程算自己的任务,保存在local中
    {
		local+=isPrime(i);
 
    }
    MPI_Reduce(&local,&sum,1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值