并行计算课程考核 实验报告
考核题目:QR分解算法的并行实现 并行实现方式:OpenMP
1. 问题概述
QR分解法是目前求一般矩阵全部特征值的最有效并广泛应用的方法,一般矩阵先经过正交相似变化成为householder矩阵,然后再应用QR方法求特征值和特征向量。它是将矩阵分解成一个正规正交矩阵Q与上三角形矩阵R,所以称为QR分解法。 2. 串行代码描述 串行主要代码如下: #include
void Matrix_print(double A[n][n]) { for (int i=0;i double Matrix_norm(double a[n]) { double d=0; for (int i=0;i void Matrix_multiply(double A[n][n],double B[n][n],double C[n][n]) { for (int i=0;i } void Matrix_copy(double A[n][n],double B[n][n]) { for(int i=0;i void householder_trans(double A[n][n],int k,double Q[n][n]) { double a[n]; for(int i=0;i void Matrix_input(double A[n][n]) { srand( (unsigned)time( NULL ) ); for(int i=0 ;i void main() { double Q[n][n]; double A[n][n]; Matrix_input(A); printf(\ Matrix_print(A); for (int i=0;i 3. 并行化设计思路 a. 将有for循环且没有数据关系、计算量大的计算进行并行优化; b. 将毫不相关且可独立运行的代码块进行并行优化; c. 程序主要优化是对householder变换里的乘法和矩阵赋值进行优化。 4. 并行代码描述 #include void Matrix_print(double A[n][n]) { for (int i=0;i