资源简介
Cholesky算法的MPI并行C语言实现
包含以下内容:
(1)Cholesky的所用的正定矩阵的生成算法
(2)Cholesky的串行算法实现
(3)Cholesky的MPI并行算法实现
(4)完整的设计报告
代码片段和文件信息
/*
* INFO
* File: cholesky.c
* Date: 2015-10-21
* Author: Team of Zhangguoqing
*
* EXEC:
* Build: mpicc -o cholesky -lm cholesky.c
* Run: mpiexec -np numprocess ./cholesky matrix-order
* Note: matrix-order = m * numprocess
* Verify: http://www.yunsuanzi.com/matrixcomputations/solvecholeskyfactorization.html
*
* */
#include
#include
#include
#include
#include “mpi.h“
//Macro Definition
#define RANDMAX 10
void initMatrix(double *matrix int row int col)
{
int i j;
for(i=0; i
for(j=0; j matrix[i*col+j]=0;
}
}
}
void printMatrix(double *matrix int row int col)
{
int i j;
for(i=0; i
for(j=0; j printf(“%10.4f“ matrix[i*col+j]);
}
printf(“\n“);
}
}
void printTriangleMatrix(double *matrix int order)
{
int i j;
for(i=0; i for(j=0; j<=i; j++){
printf(“%10.4f“ matrix[i*order+j]);
}
printf(“\n“);
}
}
/*
* Function Purpose:
* Generate a positive random (semi-)definite matrices
*
* Method:
* Given an arbitrary matrix A compute M = AT * A
* AT means A‘s transposition (constructing a Cholesky decomposition)
*
* Reference:
* http://stackoverflow.com/questions/619335/a-simple-algorithm-for-generating-positive-semidefinite-matrices
*
* */
void generate(double *matrix int order)
{
int i j k;
double *ori_matrix = (double*)malloc(sizeof(double)*order*order);
double *tra_matrix = (double*)malloc(sizeof(double)*order*order);
//Generate origin matrix
printf(“##### Generate %d*%d semi-definite matrix #####\n“ order order);
srand(time(0));
for(i=0; i for(j=0; j ori_matrix[i*order+j]=(double)(rand()%RANDMAX) + 1;
}
}
printf(“\nRand Arbitrary Matrix:\n“);
printMatrix(ori_matrix order order);
//Transpose ori_matrix tra_matrix
for(i=0; i for(j=0; j tra_matrix[j*order+i] = ori_matrix[i*order+j];
}
}
printf(“\nTranspose matrix:\n“);
printMatrix(tra_matrix orderorder);
//matrix = ori_matrix * tra_matrix
for(i=0; i for(j=0; j for(k=0; k matrix[i*order+j] = matrix[i*order+j] + tra_matrix[i*order+k] * ori_matrix[k*order+j];
}
}
}
printf(“\nSemi-definite Matrix one-dimension:\n“);
printMatrix(matrix orderorder);
free(ori_matrix);
free(tra_matrix);
}
void serial_cholesky(double *A_matrix int order)
{
int i j k;
double sum;
double *matrix = (double*)malloc(sizeof(double)*order*order);
for(i=0;i for(j=0;j matrix[i*order+j] = A_matrix[i*order+j];
}
}
for(j=0; j sum = 0.0;
for(k=0; k sum += matrix[j*order+k] * matrix[j*order+k];
}
matrix[j*order+j] = matrix[j*order+j] - sum;
matrix[j*order+j] = sqrt(matrix[
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2015-11-10 14:32 Cholesky MPI并行C语言实现\
文件 7936 2015-11-10 14:20 Cholesky MPI并行C语言实现\cholesky.c
文件 1854464 2015-11-10 14:28 Cholesky MPI并行C语言实现\Cholesky并行分解-实验报告.doc
相关资源
- 并行计算求解三对角线性方程组
- 康威生命游戏C语言并行实现intrinsic
- Borland C++ 5.5 编译器
- C++并行程序设计
- NVIDIA_CUDA_C_ProgrammingGuideCUDA 编程指南
- Pyopencl Tutorial .pdf
- FPGA并行编程(Xilinx官方翻译版本)
- [MPI与OpenMP并行程序设计:C语言版].(
- MinGW64 Compiler (C)离线安装包
- MPI与OpenMP并行程序设计(C语言版)美
- 矩阵转置多线程.cpp
- Intel C++ Compiler V11.0.074安装及简单设置
- 使用Win32 API的相关知识实现矩阵的乘
- MPI_并行程序设计中文教程C++/c/Fortan
- c0文法编译课程设计
- 使用MPI实现的nBody代码
- 生命游戏MPI并行实现
- 矩阵转置的并行算法mpi实现
- 基于MPI的PSRS算法的实现
- LL(1)文法判断Compilation principle
- fisher最优分割
- 多峰函数多个最优解问题 演化算法
- C++ 矩阵乘并行算法实现
- 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 汇编 可自举
评论
共有 条评论