目录
1. 实验内容与方法
- 初始化数组。初始化三个double矩阵matrix_a,matrix_b和result,矩阵的行和列可以根据数据量大小自行调整。数组中的值使用c++11中的random类随机生成0到1之间的double值。
- 程序计时。使用c++11中的std::chrono库,使用system_clock表示当前的系统时钟,系统中运行的所有进程使用now()得到的时间是一致的。
- 串行执行数组相乘。遍历两个矩阵,使用矩阵乘法,将存储的结果放到
- 并行执行数组相乘。使用openmp将for循环设置为多线程,线程数根据实验内容进行调整。
- 线程数不变,修改矩阵大小。从6000 * 6000修改为8000 * 6000和8000 * 8000,统计运行时间。
- 矩阵大小不变,修改线程数。分别设置线程数为2、4、8个,统计运行时间。
2. 实验过程
实验设备CPU(i7-7700 3.6GHz, 8核),内存16G,操作系统Ubuntu 18.04,IDE CLion。
2.1 运行时间
分别控制矩阵大小和并行线程数进行实验。经过长时间的代码运行计时,得到以下的实验结果表格。
运行时间/秒 |
6000 * 6000 |
8000 * 6000 |
8000 * 8000 |
串行执行 |
1222.05 |
2603.9 |
3835.77 |