高斯列主元消元法mpi实现
来源:互联网 发布:mac系统u盘恢复 编辑:程序博客网 时间:2024/05/18 22:11
列主元法mpi实现
列主元消元法在求解线性方程组时很好的解决了因为计算机本身字长的限制而产生的问题。本文中使用mpi将矩阵分行处理,并将通信量最小化。这是课程作业,学弟学妹们参考参考就好
直接放代码
#include<iostream>#include"mpi.h"#include<fstream>#include<algorithm>#include<cmath>using namespace std;const double eps=1e-10;const int N=1000;int main(){ double **a=new double*[N]; double *answer=new double[N]; int *local=new int[N+1]; double max; int i,j,myid,numprocs,madex; for(i=0;i<N;i++) a[i]=new double[N+1];//malloc /*local 数组用于对应主元的位置和原来的位置的映射关系*/ for(i=0;i<N+1;i++) local[i]=i; ifstream fin("matrix.dat");//fscanf for(i=0;i<N;i++) for(j=0;j<N+1;j++) fin>>a[i][j]; MPI_Init(0,0); MPI_Comm_rank(MPI_COMM_WORLD,&myid); MPI_Comm_size(MPI_COMM_WORLD,&numprocs); int numtasks=N/numprocs; for(j=0;j<N;j++){ if(myid==j%numprocs){ max=madex=0; for(int k=0;k<N;k++) if(local[k]>=j&&abs(a[j][local[k]])>=max){ max=abs(a[j][local[k]]); madex=k; } } MPI_Bcast(&madex,1,MPI_INT,j%numprocs,MPI_COMM_WORLD); MPI_Bcast(a[j],N+1,MPI_DOUBLE,j%numprocs,MPI_COMM_WORLD); swap(local[j],local[madex]);//交换两个部分的值 for(i=myid;i<N;i+=numprocs){ if(i!=j){ double temp=a[i][local[j]]/(a[j][local[j]]+eps); for(int k=0;k<N+1;k++){ a[i][k]-=a[j][k]*(temp); } } } } for(j=0;j<N;j++){ if(myid==j%numprocs){ answer[local[j]]=a[j][N]/(a[j][local[j]]+eps); } MPI_Bcast(answer+local[j],1,MPI_DOUBLE,j%numprocs,MPI_COMM_WORLD); } if(myid==0){ for(j=0;j<N;j++){ cout<<"X["<<j<<"]="<<answer[j]<<endl; } } MPI_Finalize();}
阅读全文
0 0
- 高斯列主元消元法mpi实现
- mpi c++实现示例
- 实现MPI IO Stream
- 使用MPI实现直方图
- MPI 枚举排序实现
- QuickSort (MPI 实现)
- fox 算法 mpi 实现
- mpi实现矩阵相乘
- MPI实现psrs
- MPI实现矩阵乘法程序--实现MPI传递连续数组
- MPI 实现直接选择排序
- MPI 实现雅可比迭代法
- MPI 实现 SUMMA 矩阵乘法
- MPI 实现梯形积分法
- MPI并行实现枚举排序
- 枚举排序的MPI实现
- MPI实现并行计算统计数据
- FOX算法的MPI实现
- 利用VS获取程序图标
- ubuntu 命令行模式和图形界面切换
- Ubuntu 开机进入命令行模式
- 加农算法的MPI实现 【矩阵相乘】
- 【QT】深入qt信号与槽实现原理
- 高斯列主元消元法mpi实现
- Turan图
- 你的JWTs存储在哪里
- Unbuntu安装Docker
- HDFS工作机制
- 禁止文本框自动完成
- jvm调优
- 选定文本内容
- 三、基于Cortex-A8和ZigBee技术的智能家居监控系统的设计与实现