91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 198KB
    文件類型: .zip
    金幣: 2
    下載: 0 次
    發布日期: 2024-01-27
  • 語言: 其他
  • 標簽: 矩陣相乘??

資源簡介

矩陣相乘并行程序設計與實現,可以實現多個線程,基于MPI平臺

資源截圖

代碼片段和文件信息

#include?“stdio.h“
#include?“stdlib.h“
#include?“mpi.h“

#define?intsize?sizeof(int)
#define?floatsize?sizeof(float)
#define?charsize?sizeof(char)
#define?A(xy)?A[x*K+y]
#define?B(xy)?B[x*N+y]
#define?C(xy)?C[x*N+y]
#define?a(xy)?a[x*K+y]
#define?b(xy)?b[x*n+y]
#define?buffer(xy)?buffer[x*n+y]?/*?此宏用來簡化對標號為奇數的處理器內的緩沖空間的訪問?*/
#define?c(lxy)?c[x*N+y+l*n]

float?*a*b*c*buffer;
int?s;
float?*A*B*C;????????????/*?A[MK]B[PN].正確的情況下K應該等于P否則無法進行矩陣相乘?*/
int?MNKP?;
int?mn;
int?myid;
int?p;?????????????????????/*?保存工作站集群中處理器數目,也即通信子大小?*/
FILE?*dataFile;????????????/*?用于讀取輸入文件內容和將計算結果輸出到結果文件的臨時文件指針?*/
MPI_Status?status;
double?time1;
double?starttimeendtime;

/*
?*?函數名:?readData
?*?功能:??此函數被rankID為0的進程調用,負責從dataIn.txt文件中讀入
?*?????????A[MK]B[PN]兩個相乘矩陣的數據,并為結果矩陣C[MN]分配空間。
?*?????????其中C[NN]=A[MK]*B[PN]
?*?輸入:??無
?*?返回值:無
?*/
void?readData()
{
????int?ij;
????starttime?=?MPI_Wtime();

????dataFile=fopen(“dataIn.txt““r“);
????fscanf(dataFile“%d%d“?&M?&K);??????????????/*?讀取矩陣A的行,列數MK?*/
????A=(float?*)malloc(floatsize*M*K);?????????????/*?為矩陣A分配空間?*/
????for(i?=?0;?i?????{
????????for(j?=?0;?j?????????{
????????????fscanf(dataFile“%f“?A+i*K+j);
????????}
????}

????fscanf(dataFile“%d%d“?&P?&N);??????????????/*?讀取矩陣B的行,列數PN?*/
????if?(K!=P)?????????????????????????????????????/*?K應該等于P否則矩陣無法相乘?*/
????{
????????printf(“the?input?is?wrong\n“);
????????exit(1);
????}
????B=(float?*)malloc(floatsize*K*N);?????????????/*?為矩陣B分配空間?*/
????for(i?=?0;?i?????{
????????for(j?=?0;?j?????????{
????????????fscanf(dataFile“%f“?B+i*N+j);
????????}
????}
????fclose(dataFile);

????printf(“Input?of?file?\“dataIn.txt\“\n“);
????printf(“%d\t?%d\n“M?K);?????????????????????/*?輸出A矩陣的維數?*/
????for(i=0;i????{
????????for(j=0;j????????printf(“\n“);
????}
????printf(“%d\t?%d\n“K?N);?????????????????????/*?輸出B矩陣的維數?*/
????for(i=0;i????{
????????for(j=0;j????????printf(“\n“);
????}

????C=(float?*)malloc(floatsize*M*N);?????????????/*?為結果矩陣C[MN]分配空間?*/

}

/*
?*?函數名:?gcd
?*?功能:??此函數用來返回兩個整數的不大于group_size的最大公因子
?*?輸入:??MN:要求最大公因數的兩個整數
?*?????????group_size所求公因子必須小于此參數,此參數代表用戶指定的通信子大小
?*?返回值:M和N的不大于group_size的最大公因子
?*/
int?gcd(int?Mint?Nint?group_size)
{
????int?i;
????for(i=M;?i>0;?i--)
????{
????????if((M%i==0)&&(N%i==0)&&(i<=group_size))
????????????return?i;

????}
????return?1;
}


/*
?*?函數名:?printResult
?*?功能:此函數被rankID為0的進程調用,用來將ABC矩陣打印輸出給用戶,
?*???????并輸出用于分發數據和并行計算的時間
?*?輸入:無
?*?返回值:無
?*/
void?printResult()
{
????int?ij;
????printf(“\nOutput?of?Matrix?C?=?AB\n“);
????for(i=0;i????{
????????for(j=0;j????????printf(“\n“);
????}

????endtime=MPI_Wtime();
????printf(“\

?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????86693??2017-11-03?21:42??matrix\dataIn?-?副本.txt
?????文件??????381648??2017-11-03?22:01??matrix\dataIn.txt
?????文件???????86693??2017-11-03?21:42??matrix\dataIn128.txt
?????文件????????9506??2017-09-04?17:16??matrix\matrix.c
?????文件?????????675??2017-09-04?17:16??matrix\readme.txt
?????文件???????20267??2017-11-04?01:10??matrix\時間分析表.xlsx
?????目錄???????????0??2017-11-04?01:10??matrix\

評論

共有 條評論