资源简介
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
- 上一篇:灰度共生矩阵vs2010+opencv2
- 下一篇:c++笔试面试基础
评论
共有 条评论