开始尝试在 Win7 下使用 OpenMP 编写 fortran 并行程序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了开始尝试在 Win7 下使用 OpenMP 编写 fortran 并行程序相关的知识,希望对你有一定的参考价值。

参考技术A 备忘:

教程: Parallel Programming in Fortran 95 using OpenMP
使用 OpenMP 应该算是一种比较简单的并行方式,用

将需要并行的部分放进去就行了。

gfortran 编译的话使用 -fopenmp 选项即可

如果不是并行程序的话,仅仅会输出一次,但是这里输出了 4 次,因为有四个线程。而教程中也对这个做了解释:

Since the code enclosed between the two directives is executed by each thread, the message Hello appears in the screen as many times as threads are being used in the parallel region.

不知道那个控制台的图标为啥变成了四个红点,是不是点的个数表示线程数呢?

One of the aims of the OpenMP standard is to offer the possibility of using the same source code lines with an OpenMP-compliant compiler and with a normal compiler. This can only be achieved by hiding the OpenMP directives and commands in such a way, that a normal compiler is unable to see them. For that purpose the following two directive sentinels are introduced: !$OMP & !$

需要注意的是 !$OMP 前面不能出现非空字符,否则将会被认为是普通的注释。OMP的这种方式可以很巧妙地使得程序能够在所有的编译器上运行,如果不支持OMP的话就当作普通的注释,如果支持那么这些就会起作用。另外 指令后面有一个空格,这个主要是为了 指令和后面的语句分隔开。这个空格是强制添加的,否则将作为普通注释来处理。

OMP 的指令行支持续行,和 fortran 没多大区别,只要记得每一行都有指令符号就行了。

暂时就学了这么点。。。

以上是关于开始尝试在 Win7 下使用 OpenMP 编写 fortran 并行程序的主要内容,如果未能解决你的问题,请参考以下文章

如何让 OpenMP 在程序每次运行时只创建一次线程?

OpenMP 中的同步

如何在英特尔 MIC 上本地分析 openmp 代码?

强制 OpenMP 不在每个线程中缓存大对象

如何使用 OpenMP 在 C++ 中实现监视器?

如何编写在 C++ openmp 上重用线程的代码?