矩阵乘法(串行与并行)

news/2024/11/16 15:29:14/

矩阵乘法

1. 需求

矩阵乘法AB=C。其中,A,B,C均为20482048双精度浮点方阵,A,B初始值为[-1,1]的随机数。

2.串行和OpenMP并行代码

#include <iostream>
#include <stdlib.h>
#include <ctime>
#include "hpc_helpers.hpp"
using namespace std;
#define NUM 2048	//表示数组的长度
//由于数组过大,所以需要定义全局变量,否则容量不够
double A[NUM][NUM];
double B[NUM][NUM];
double C[NUM][NUM];//初始化
void init (double A[][NUM] , double B[][NUM]) {srand ((unsigned int)time (NULL));for ( int row = 0; row < NUM; row++ ) {for ( int col = 0; col < NUM; col++ ) {//x + 1.0 * rand() / RAND_MAX * ( y - x )//随机生成[-1,1]的随机双精度浮点数A[row][col] = -1.0 + 1.0 * rand () / RAND_MAX * 2;A[row][col] = -1.0 + 1.0 * rand () / RAND_MAX * 2;}}
}//计算(矩阵乘法)
void mult (double A[][NUM] , double B[][NUM] , double C[][NUM] , bool parallel , int num_thread) {
#pragma omp parallel for num_threads(num_thread)if(parallel)//使用三重for循环完成矩阵的乘法for ( int i = 0; i < NUM; i++ ) {	//完成行结果的循环(相对结果C矩阵)for ( int j = 0; j < NUM; j++ ) {	//完成列结果的循环(相对结果C矩阵)double accum = 0;for ( int k = 0; k < NUM; k++ ) {	//最内层循环,负责完成A的行乘以B的列//A的第i行的数分别乘以B的第j列的相应数,即矩阵乘法(k表示“相应数”的位置)accum += A[i][k] * B[k][j];}C[i][j] = accum;}}
}
int main () {TIMERSTART (overall)	//计算花费的总时间cout << "=========初始化花费时间=========" << endl;//计算初始化花费的时间TIMERSTART (init)init (A , B);	//初始化TIMERSTOP (init)cout << "=========串行花费时间=========" << endl;//计算3次串行花费的时间for ( int i = 0; i < 3; i++ ) {TIMERSTART (mult_seq)mult (A , B , C , false , 1);TIMERSTOP (mult_seq)}//计算3次并行花费的时间(分别2、4、8、16、32线程)for ( int i = 2; i < 33;i=i*2) {cout << "=========并行花费时间=========" << endl;cout << "当前线程数:" << i << endl;for ( int j = 0; j < 3; j++ ) {TIMERSTART (mult_par)mult (A , B , C , true , i);TIMERSTOP (mult_par)}}TIMERSTOP (overall)return 0;
}

代码分析:

首先,引入了一个定制的头文件hpc_helpers.hpp用于测量程序各部分的时间花销。因为涉及的二维数组比较大(2048*2048),所以需要将所用数组定义为全局变量,否则会因为栈容量不够而报错。

其次,将数组的初始化封装为init函数,其中会将数组以随机双精度浮点数初始化,随机数的范围是[-1,1]。而矩阵乘法的关键计算部分被封装为mult函数,其中将利用三重for循环实现矩阵乘法,程序的“并行”代码是‘#pragma omp parallel for num_threads(num_thread)if(parallel)’。mult函数中的参数parallel (bool)用于在串行和并行执行模式之间切换,参数num_thread(int)则是设置程序并行运行时的线程数。

最后,以同一份数据分别执行并行模式下的2、4、8、16、32个线程情况。同时,为了保证实验数据的可靠性,程序将会把随机生成的矩阵分别计算三次(串行和并行),并且打印出每次计算的时间花销。

性能分析

图1显示了分别在串行模式和并行模式(2、4、8、16、32个线程)运行的时间花销,其中,elapsed time (init)表示初始化花费的时间,elapsed time (mult_­seq) 表示串行模式花费的时间,elapsed time (mult_­par) 表示并行模式下花费的时间,elapsed time (overall)表示程序总共花费的时间。 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-niY5FSw8-1665897486708)(D:\xcz\md\并行处理与体系结构\矩阵乘法.assets\image-20221016131327420.png)]
​ 图 1 程序运行结果截图
图2为程序运行时cpu线程数和运行窗口的截图,显示了程序设置的运行时线程数与系统分配给程序的线程数是匹配的。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T4Bs8xJ3-1665897486709)(D:\xcz\md\并行处理与体系结构\矩阵乘法.assets\image-20221016131347354.png)]
​ 图 2 系统线程数截图
由图1可总结出表格1。

**线程数P/**平均花销时间T/s加速比S相应并行效率E
1**(串行)**61.93//
232.581.9095%
418.463.3584%
89.766.3580%
165.9110.4866%
325.9610.3932%

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79dMuWaT-1665897486710)(D:\xcz\md\并行处理与体系结构\矩阵乘法.assets\image-20221016131557463.png)]
​ 图 3 加速比曲线图
由表格1和图3可知,程序的加速比随着线程数的增加而增大,其原因在于更大数目的线程数需要更多的额外通信开销,相应的并行效率随着线程数的增加而减小。同时,注意到线程数为32时,加速比反而是略微下降。原因可能是实验的笔记本电脑cup为8核16线程,而一般并行设置的线程数最大为(核心数*2-1),所以当线程数为32时导致的电脑卡顿从而增加了时间。


http://www.ppmy.cn/news/561114.html

相关文章

数字化转型案例解读:德意志银行数字化转型背后不为人知的故事

在经历了一段快速增长之后&#xff0c;德意志银行开始在运营层面遭遇一系列障碍。 数据孤岛与未链接系统&#xff0c;导致员工需要浪费大量时间移动各类信息。此外&#xff0c;浩如烟海的纸质表格与电子表格则迫使员工们不得不手工处理文件并核对内容是否属实。 德意志银行企…

周志华专访

转载自&#xff1a;https://blog.csdn.net/haimianjie2012/article/details/41246659 杰青”周志华专访 周志华生于1973 在南京大学我发现新大陆——迄今为止最年轻的杰青——31岁的周志华。他年纪比我小&#xff0c;成就比我高&#xff0c;我慕名打电话乃至到办公室堵截&…

中钢集团CIO李红对数字化转型的思考

数字化转型本质上是新一代信息技术驱动下的一场业务、管理和商务模式的一次深度变革和重构&#xff0c;技术是表象、业务是内核&#xff0c;CIO决不能缺席数字化转型。 作为长期从事企业信息化的IT老兵&#xff0c;中钢集团CIO李红曾经历过几番从IT到管理之间的角色转换&#x…

大数据:颠覆的力量——人文清华讲坛陈国青演讲实录

什么是大数据&#xff1f; 什么是大数据思维&#xff1f; 算法经济时代什么时候到来&#xff1f; 大数据杀熟合适吗&#xff1f; 大数据时代是否应该拥有被遗忘权&#xff1f; 大数据将如何撞击未来&#xff1f; 6月10日晚7点&#xff0c;著名管理学家、清华大学经济管理…

中央企业数字化转型实践

从 2014 年至 2019 年,数字经济对 GDP 增长的贡献率始终保持在 50% 以上,数字经济占 GDP 的比重也在逐年上升,成为驱动经济增长的核心力量。随着数字化转型深入推进,产业数字化在数字经济中的主引擎地位进一步巩固,为数字经济发展注入源源不断的动力,中央企业作为企业数字化转型…

复旦大学-华盛顿大学EMBA校友:将"她力量"变成"我们的力量"

我是来自复旦大学-华盛顿大学EMBA项目C18班的Connie Hu&#xff0c;是一名法务工作者&#xff0c;曾先后在内资律师事务所和国际律师事务所任职多年。自&#xff12;&#xff10;&#xff11;&#xff12;年加入TE Connectivity&#xff08;泰科电子&#xff0c;后简称&#xf…

教授专栏44 | 李家涛:企业高层性别均衡,发展趋势可憧憬

文 / 李家涛教授 宾夕法尼亚大学沃顿商学院8月底发表了一项新研究&#xff0c;发现在“财富 100 强企业”中&#xff0c;女性晋升公司前10名职位比男性快2到4年。据研究统计&#xff0c;女性占“财富100强企业”最高领导职位有27% &#xff0c;这是自1980年以来的巨大进步。 然…

黄一孟

黄一孟 求助编辑百科名片 黄一孟 黄一孟&#xff0c;网名Dash&#xff0c;1982年生。他创办了VeryCD网站&#xff0c;将电驴&#xff08;eMule&#xff09;软件带入中国。目前担任VeryCD总经理&#xff0c;正带领VeryCD团队创业奋斗。 目录 网站档案 发展历程 团队介绍 主要项目…