并行计算实验报告
一、 实验题目:
Pthread 实现 Jacobi 迭代
二、实验内容与原理
jacobi 迭代使得矩阵中某一点等于相邻四点的平均值。
根据该公式的性质,可知随着迭代次数的增加,矩阵中的点的值趋向于矩
阵所有元素的平均值。由于边界点没有四个相邻点,所以这里将边界点的值固
定不变只对除边界外的点进行迭代。
为了加大计算量并且在数据数据规模大小中做平衡,将矩阵大小设置为
512*512.
步骤为先随机生成 512*512 的矩阵,在矩阵中随机选择 25%的点值为
256,其他为 0.进行迭代计算,每 20 次输出一次中间结果,一共输出 6 个矩
阵值(包括初始矩阵)
同时由于有输出的操作,所以计算时间开销的时候只计算每次迭代结束和
开始的时间差作为一次迭代的时间开销,将 100 次的时间消耗总和作为最后的
时间消耗。
并行的原理为给每个线程限定只计算(1/线程数)行的任务。
三、程序流程图
程序流程图中左侧为全局流程图,右侧为每个线程计算的流程图;
三、程序流程图
四、实现方法
#include<iostream>
#include<cstdio>
#include <cstdlib>
#include<pthread.h>
#include <ctime>
#include <unistd.h>
#include<sys/time.h>
#include<algorithm>
#include<sstream>
#include<fstream>