资源简介
矩阵转置的并行化实现,用的的是c语言,mpi实现的,可以参考下
代码片段和文件信息
#include “stdio.h“
#include “stdlib.h“
#include “mpi.h“
#include “math.h“
#define E 0.0001
#define a(xy) a[x*m+y]
#define b(xy) b[x*m+y]
#define A(xy) A[x*size+y]
#define B(xy) B[x*size+y]
#define intsize sizeof(int)
#define floatsize sizeof(float)
#define charsize sizeof(char)
int sizeN; /* size:保存矩阵行数;N:保存矩阵列数 */
int m; /* 保存子方阵的尺寸 */
int t; /* 棋盘划分的分割数 */
float *B; /* A:保存原矩阵;B:保存转置后的矩阵 */
double starttime; /* 保存开始时间 */
double time1; /* 保存分发数据的结束时间 */
double time2; /* 保存运行的结束时间 */
int my_rank; /* 保存当前进程的进程号 */
double p; /* 保存进程数 */
MPI_Status status; /* 保存MPI状态 */
//FILE *fdA; /* 输入文件 */
/* 运行结束前调用本函数释放内存空间 */
void Environment_Finalize(float *afloat *b)
{
free(a);
free(b);
}
int main(int argc char **argv)
{ int A[4][4]={{1234}{5678}{9101112}{13141516}};
int ijkmy_rankgroup_size;
float *a*b;
int uv;
float temp;
MPI_Init(&argc&argv);
MPI_Comm_size(MPI_COMM_WORLD&group_size);
MPI_Comm_rank(MPI_COMM_WORLD&my_rank);
p=group_size;
/* 如果是主进程(rank=0的进程)则进行读文件的操作
将待转置的矩阵读入内存保存到全局变量A中
*/
if(my_rank==0)
{
starttime=MPI_Wtime();
size=4;
N=4;
//fdA=fopen(“dataIn.txt““r“);
/* 读入矩阵的行数和列数并保存到size和N中 */
//fscanf(fdA“%d %d“ &size &N);
/* 判断是否是方阵如果不是程序退出 */
/*if(size != N)
{
puts(“The input is error!“);
exit(0);
}
A=(float*)malloc(floatsize*size*size);*/
B=(float*)malloc(floatsize*size*size);
/* 将矩阵的所有值读入保存到A中 */
/*for(i = 0; i < size; i ++)
{
for(j = 0; j < size; j ++) fscanf(fdA “%f“ A+i*size+j);
}
fclose(fdA);*/
}
/* 广播矩阵的尺寸 */
MPI_Bcast(&size1MPI_INT0MPI_COMM_WORLD);
/* 获得棋盘划分的数目 */
t=(int)sqrt(p);
if (t>size)
t=size;
if(size%t!=0)
for(;;)
{
t--;
if(size%t==0)
break;
}
/* 获得实际利用的处理器个数 */
p=t*t;
/* 每个子方阵的尺寸 */
m=size/t;
/* a保存子方阵b是临时矩阵是主进程用来保存待发送给别的进程的子方阵 */
a=(float *)malloc(floatsize*m*m);
b=(float *)malloc(floatsize*m*m);
if (a==NULL||b==NULL)
printf(“allocate space fail!“);
/* 对主进程获得自己的子方阵(即左上角的子方阵) */
if (my_rank==0)
{
for(i=0;i for(j=0;j a(ij)=A[i][j];
}
/* 主进程向其他进程发送数据 */
if (my_rank==0)
{
for(i=1;i {
v=i/t; /* 子方阵的行号 */
u=i%t; /* 子方阵的列号 */
for(
- 上一篇:VC++MFC编程
- 下一篇:DES算法加密解密C++源码及程序完整的工程文件
相关资源
- 基于MPI的PSRS算法的实现
- LL(1)文法判断Compilation principle
- OpenMP并行计算程序设计基础 pdf高清版
- Jumping the Queue C++代码
- 基于MPI-GA的TSP问题C++代码
- iar.cc++.compiler.v1.30.3.50673.for.rl78-patch
- Intel C++ Compiler 9 10 11 license Key 注册文
- c 编译器 masm32 汇编 可自举
- MPI并行化多体问题源码
- StateMachineCompiler for C 根据状态表生成
- mingW-w64 C++ compiler
- Intel C++ Compiler 11.1.054 windows (包含安
- 高性能计算之并行编程技术-MPI并行程
- 共轭梯度法求解偏微分方程MPI并行的
- OpenMP实现计算pi值和PSRS排序并行计算
- 并行计算mpi奇偶排序
- 2 维热传导 (Heat distribution) 基于M
- 矩阵相乘的MPI 并行计算程序Fortran
- MPI并行程序设计都志辉-C源程序
评论
共有 条评论