• 大小: 1.22MB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2023-10-24
  • 语言: C/C++
  • 标签: Cholesky  并行  MPI  C语言  

资源简介

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

评论

共有 条评论