• 大小: 148KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-06-15
  • 语言: C/C++
  • 标签: OpenMP,C  

资源简介

OpenMP实现矩阵乘法,通过C语言编程,通过控制矩阵规模和计算量的调整观察并行计算的加速比!研究生高性能计算的基础实验

资源截图

代码片段和文件信息

#include “stdafx.h“
#include 
#include 
#include 

int *generate_martix(int mint n);//声明矩阵生成函数
void show_martix(int *arrint mint n);//声明矩阵显示函数
void multi_martix(int *arr1int *arr2int mint n);//声明矩阵乘法函数
int main(int argcchar *argv[]){
int rowcolumn;//矩阵行、列
printf(“二维数组的行数(m):“);
scanf(“%d“&row);
printf(“二维数组的列数(n): “);
scanf(“%d“&column);
int *martix1*martix2;
martix1=generate_martix(rowcolumn);//创建矩阵
martix2=generate_martix(columnrow);//创建矩阵
//show_martix(martix1rowcolumn);
//printf(“\n“);
//show_martix(martix2columnrow);

int compute_scale;//矩阵乘法计算次数
printf(“请输入矩阵乘法计算次数:“);
scanf(“%d“&compute_scale);
omp_set_num_threads(thread_num);

int start=0;
int end=0;

//开启一个线程
omp_set_num_threads(1);
start=omp_get_wtime()*1000;
//int count=0;
//printf(“运行多线程前时间(单位ms):%d\n“start);
#pragma omp parallel for
for(int i=0;i {
multi_martix(martix1martix2rowcolumn);//进行矩阵乘法
//count++;
}
//printf(“矩阵计算次数=%d\n“count);
end=omp_get_wtime()*1000;
//printf(“运行多线程后时间(单位ms):%d\n“end);
printf(“开启一个线程的运行时间(单位ms):%d\n“end-start);

//开启两个线程
omp_set_num_threads(2);
start=omp_get_wtime()*1000;
#pragma omp parallel for
for(int i=0;i {
multi_martix(martix1martix2rowcolumn);//进行矩阵乘法
}
end=omp_get_wtime()*1000;
printf(“开启两个线程的运行时间(单位ms):%d\n“end-start);

//开启四个线程
omp_set_num_threads(4);
start=omp_get_wtime()*1000;
#pragma omp parallel for
for(int i=0;i {
multi_martix(martix1martix2rowcolumn);//进行矩阵乘法
}
end=omp_get_wtime()*1000;
printf(“开启四个线程的运行时间(单位ms):%d\n“end-start);

//开启八个线程
omp_set_num_threads(8);
start=omp_get_wtime()*1000;
#pragma omp parallel for
for(int i=0;i {
multi_martix(martix1martix2rowcolumn);//进行矩阵乘法
}
end=omp_get_wtime()*1000;
printf(“开启八个线程的运行时间(单位ms):%d\n“end-start);

//开启十六个线程
omp_set_num_threads(16);
start=omp_get_wtime()*1000;
#pragma omp parallel for
for(int i=0;i {
multi_martix(martix1martix2rowcolumn);//进行矩阵乘法
}
end=omp_get_wtime()*1000;
printf(“开启十六个线程的运行时间(单位ms):%d\n“end-start);

system(“pause“);
return 0;
}

//矩阵生成函数
int *generate_martix(int mint n){
int *tmp;
tmp=(int *)malloc(sizeof(int)*m*n);
for(int i=0;i for(int j=0;j tmp[i*n+j]=i*(j+1)+1;//按此规则生成二维数组的各项
}
}
return tmp;
}

//矩阵乘法函数
void multi_martix(int *arr1int *arr2int mint n){
int temp=0;
int c[256][256];//最大运算256*256规模的矩阵
for(int i=0;i for(int j=0;j for(int k=0;k temp +=arr1[i*n+k]*arr2[k*m+j];
}
//printf(“temp=%d\n“temp);
c[i][j] = temp;
//printf(“%5d“ c[i][j]);
temp=0;//清理temp值

}
//printf(“\n“);
}
}

//矩阵显示函数
void show_martix(int *arrint mint n){
for(in

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2017-09-25 20:49  OPenMP实现矩阵乘法\
     文件      182353  2017-09-23 10:46  OPenMP实现矩阵乘法\OpenMP实现矩阵乘法.docx
     文件        3513  2017-09-19 16:50  OPenMP实现矩阵乘法\OpenMP实现矩阵乘法.cpp

评论

共有 条评论

相关资源