Openmp 多线程并行计算。为什么结果每次run出来不一样?
我用了两个线程把计算任务分为相互独立的两个部分。分别完成之后把结果合并成为完整的结果。但两个部分内部的语句,如 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的一些并行计算代码和实验报告
基于fortran95,openMP的并行计算 中文版
Parallel_Programming_in_Fortran95_using_OpenMP中文版 pdf
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并行计算-冒泡排序


