Openmp 多线程并行计算。为什么结果每次run出来不一样?

janeyxm janeyxm 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
各位,我遇到下面这样一个问题,困扰很久没有解决。不知哪位可以慷慨赐教?
我用了两个线程把计算任务分为相互独立的两个部分。分别完成之后把结果合并成为完整的结果。但两个部分内部的语句,如 do while...end do中的语句不是相互独立的,即有上下关联。
结果是,如果我计算简单的问题,最终得到正确结果,但如果计算比较复杂的例子,得到的计算结果不完整。看上去像是有些计算循环没有完成。
请问这是do while引起的吗?还是可能其他的原因? 可是我并不知道循环次数,只能用do while。而且,我只是各用一thread完成一半的工作,至于每一半里面我不需要并行。

program test
use omp_lib
......

call omp_set_num_threads (2)
......

!$OMP PARALLEL
if (omp_get_thread_num()==0) then
do while(条件)
这里调用了一些subroutine.完成计算并储存结果到矩阵X1
end do
else
do while(条件)
调用同样的subroutine,但用了不同的变量。完成计算并储存结果到矩阵X2。
end do
end do
!$OMP BARRIER
!$OMP END PARALLEL
合并X1和X2,输出结果。

...全文

相关推荐

OpenMP并行计算程序例子

OpenMP并行计算例子,主要包括简单例子、并行循环、常用函数、分段并行、嵌套并行、求π以及同步这些例子。所有例子都已经过测试。

大侠肖

MPI与OpenMP并行计算的实验报告及源程序

MPI与OpenMP的一些并行计算代码和实验报告

Zwartz

基于fortran95,openMP的并行计算 中文版

Parallel_Programming_in_Fortran95_using_OpenMP中文版 pdf

sddxstudent

OpenMP并行计算程序设计基础

OpenMP是由The Board of the OpenMP Architecture Review Board(ARB)提出的一套用于共享内存并行系统的多线程程序设计标准。目前,OpenMP仅支持C、C++和Fortran语言。由于OpenMP是一种共享存储的标准,所以在非共享存储系统上不能使用,如集群(Cluster)(目前在非共享存储系统上并行主要采用MPI)。简而言之,OpenMP就是一种多线程程序设计的标准,适合在个人计算机上进行并行计算。它提供了对并行算法的抽象描述,程序员只需在源代码中加入专用的pragma来指明,编译器将自动将程序进行并行。 主要内容: 一、一个简单的OpenMP例子 1 二、OpenMP概述 5 三、并行数目与并形体对运行效率的影响 8 四、求π例子 13 五、循环结构的并行 17 1、范围条件 17 2、shedule条件 22 3、threadprivate指令 24 六、分段并行 25 七、嵌套并行 29 八、OpenMP中的常用函数 33 1、设置线程数目 33 2、获取线程数目 33 3、获取最多线程数目 33 4、返回线程ID 33 5、获取程序可用的处理器数目 33 6、获取时间 34 7、是否处于并行中 34 九、同步 35 1、互斥同步 39 2、事件同步 42

大侠肖

MPI和openMP并行计算-冒泡排序

MPI和openMP并行计算-冒泡排序

「已注销」
评论 10
收藏 已收藏
分享
返回顶部