阵采用多线程并行算法,也即可以采用OpenMP计算。Р 在MPI的编号大于等于my_rank的处理器利用主行元素对其第i+1,…,m-1行数据做行变换,其它处理器利用主行元素对其第i,…,m-1行数据做行变换部分采用OpenMP计算,所以混合编程的核心代码如下:Р/*编号小于my_rank的进程(包括my_rank本身)利用主行对其第i+1,…,m-1行数据做行变换*/Рif (my_rank<=j){Рint tid;Рomp_set_num_threads(THREADS_NUM);Р#pragma omp parallel private(tid)Р{Рtid = omp_get_thread_num();Рint myid = tid;Рint myk = i+1;Рfloat mychushu = f[v];Рint s,e;Рint c,d;Рs = (m-myk-1)*myid/THREADS_NUM;Рe = (m-myk-1)*(myid+1)/THREADS_NUM;Рfor(c=s+myk+1;c<e+myk+1;c++){Рa(c,v)=a(c,v)/mychushu;Рfor(d=v+1;d<M;d++){Рa(c,d)=a(c,d)-f[d]*a(c,v);Р}Р}Р}Р}Р四、程序运行效果及分析Р这里将通过测试在确定的线程下,对于随机生成的不同大小的矩阵,串行及OpenMP&MPI的运行时间来分析程序性能。并通过改变线程的数量,在不同情况下多次测量,测试编译参数对程序性能的影响。Р4.1、固定线程数时,不同矩阵大小下性能测试Р当线程数为5时:Р测试得到的不同矩阵大小下的加速比数据如图1所示:Р图1Р 根据图1中所示测得的数据,生成折线图如下:Рb.当线程数为100时,测得的实验数据如图2所示:Р图2Р根据图2中所示测得实验数据生成的折线图如下: